JSP

[JSP] Mybatis_2

(งᐛ)ว 2023. 11. 7. 22:32
728x90

Mybatis_1 의 2️⃣사원테이블, 3️⃣고객테이블 추가기능 만들기

 

 

2️⃣사원테이블에서 부서별로 사원을 조회할 수 있는 기능 만들기

sawon_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 코어라이브러리 -->
<%@ taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <!-- 자바함수사용가능 -->
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<script type="text/javascript">
			function find(){
				//select 태그의 value값을 가져온다. 
				//where절이 있는 쿼리문을 작성해야 한다. 
				var deptno = document.getElementById("deptno").value;
				
				//폼태그를 사용하고 있지 않아서 location.href를 통해 보낸다. 
				location.href="sawon_list.do?deptno="+deptno;
			}
			
			
			//window.onload : html이 모두 로드된 후 작동하는 콜백함수 
			window.onload = function(){
				var deptno = document.getElementById("deptno");
				var dept_array = [0,10,20,30,40,50];
				
				for(var i =0; i<dept_array.length; i++){
					if('${param.deptno}' == dept_array[i]){
						//특정 option을 강제로 남겨둘 수 있다. 
						deptno[i].selected = true;
						break;
					}
				}
			}
			
		</script>
	</head>
	<body>
		<div align="center">
			부서명:
			<select id="deptno">
				<option value="0">:::부서를 선택하세요:::</option>
				<option value="10">총무부</option>
				<option value="20">영업부</option>
				<option value="30">전산실</option>
				<option value="40">관리부</option>
				<option value="50">경리부</option>
			</select>
			<input type="button" value="검색" onclick="find()">
		</div>
	
		<hr>
	
		<table border="1" align="center">
			<caption>:::사원목록:::</caption>
		<tr>
			<th>사번</th>
			<th>이름</th>
			<th>직책</th>
			<th>급여</th>
			<th>입사일</th>
		</tr>
		<c:forEach var="vo" items="${list}">
			<tr>
				<td>${vo.sabun}</td>
				<td>${vo.saname}</td>
				<td>${vo.sajob}</td>
				<td>${vo.sapay}</td>
				<c:set var = "sahire" value="${vo.sahire}"/>
				<td>${fn:split(sahire," ")[0]}</td>	<!-- 띄어쓰기 기준으로 나누고 0번째배열 가져오기 -->			
				<%-- <td>${vo.sahire}</td> --%> <!-- 날짜와 시간이 출력됨. 시간은 필요없으니 짤라보자 -->
			</tr>
		</c:forEach>
		</table>
	</body>
</html>

 

 

SawonListAction.java

package action;

import java.io.IOException;

/**
 * Servlet implementation class SawonListAction
 */
@WebServlet("/sawon_list.do")
public class SawonListAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		int deptno = 0;
		String str_deptno = request.getParameter("deptno"); //string으로 넘어오기때문에 string으로 받는다
		
		//sawon_list.do?deptno=   ->empty상태
		//sawon_list.do?	  ->null상태
		if(str_deptno != null && !str_deptno.isEmpty()) { //null이 아니고 비어있지 않아야
			deptno = Integer.parseInt(str_deptno); //매개변수를 정수로 변환가능
		}
			
		
		// 사원목록조회
		List<SawonVO> list = /* SawonDAO.getInstance().select(); */ null;
		
		if(deptno == 0) {
			list = SawonDAO.getInstance().select(); //전체조회
		}else {
			list = SawonDAO.getInstance().select(deptno); //파라미터 해당 부분조회
		}
		
		//바인딩
		request.setAttribute("list", list);
		//포워딩
		RequestDispatcher disp = request.getRequestDispatcher("sawon_list.jsp");
		disp.forward(request, response);
	}

}

 

 

SawonDAO.java

////////////////////////////////////////////////////////////
//이어서 

//부서별 사원목록
	public List<SawonVO> select(int deptno){ //오버로딩 조건 중 파라미터 갯수가 다르면 가능
		//1. 처리객체 가져오기 
		SqlSession sqlSession = factory.openSession();
		
		//2. 처리객체를 사용하여 작업수행
		//sqlSession이 관리하는 CRUD관련 메서드는 파라미터를 추가할 수 있다.
		//단, 파라미터는 한개만 추가할 수 있다. 
		List<SawonVO> list = sqlSession.selectList("sawon.sawon_list_no",deptno);
		
		//3.사용 후에는 처리객체반환(connection, pstmt, resultSet 등을 반환하는 작업이 내장되어있다.)
		sqlSession.close();
		
		return  list;
	}
}

 

 

sawon.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sawon">
<!-- mapper : DB에 쿼리문을 요청하고 결과를 돌려받는 속성파일 -->
 
<select id="sawon_list" resultType="vo.SawonVO"> <!-- select는 항상 resultType정해줘야함 패키지명.VO파일명-->
	SELECT * FROM SAWON <!-- 세미콜론 절대 금지 -->
</select>  

<select id="sawon_list_no" resultType="vo.SawonVO" parameterType="int">
	SELECT * FROM SAWON WHERE DEPTNO = #{deptno}
</select>

</mapper>

 

이후 DAO로 돌아가서 list반환 후 서블릿으로 돌아가서 전체조회 or 부분조회 후 바인딩,포워딩 진행

 

결과

 

 

 


 

 

3️⃣고객테이블에서 주소를 검색할 수 있는 기능 만들기

gogek_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 코어라이브러리 -->    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<script type="text/javascript">
			function search(){
				var search = document.getElementById("search").value.trim();
				location.href="gogek_list.do?search="+search;
			}
		</script>
	</head>
	<body>
		<div align="center">
			지역 : 
			<input id="search" placeholder="검색어를 입력하세요">
			<input type="button" value="검색" onclick="search()">
		</div>
	
		<hr>
	
		<table border="1" align="center">
			<caption>:::고객리스트:::</caption>
			<tr>
				<th>고객번호</th>
				<th>담당자</th>
				<th>이름</th>
				<th>주소</th>
				<th>주민번호</th>
			</tr>
			<c:forEach var="vo" items="${list}">
				<tr>
					<td>${vo.gobun}</td>
					<td>${vo.godam}</td>
					<td>${vo.goname}</td>
					<td>${vo.goaddr}</td>
					<td>${vo.gojumin}</td>
				</tr>
			</c:forEach>
		</table>
	</body>
</html>

 

 

GogekListAction.java

package action;

import java.io.IOException;

/**
 * Servlet implementation class GogekListAction
 */
@WebServlet("/gogek_list.do")
public class GogekListAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String search="all";		
		String str_search = request.getParameter("search");
		
		if(str_search != null && !str_search.isEmpty()) {
			search = str_search;
		}
		
		// 고객목록조회 
		List<GogekVO> list = /* GogekDAO.getInstance().select(); */ null;
		
		if(search.equals("all")) {
			list = GogekDAO.getInstance().select();
		} else {
			list = GogekDAO.getInstance().select(search);
		}
		
		//바인딩
		request.setAttribute("list", list);
		//포워딩
		RequestDispatcher disp = request.getRequestDispatcher("gogek_list.jsp");
		disp.forward(request, response);
	}

}

 

 

SawonDAO.java

////////////////////////////////////////////////////////////
//이어서 


	public List<GogekVO> select(String search){ //오버로드
		SqlSession sqlSession = factory.openSession();
		List<GogekVO> list = sqlSession.selectList("gogek.gogek_select",search);
							  //xml의 namespace와 id
		
		sqlSession.close();
		return list;
	}
	
	
}

 

 

gogek.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="gogek">
<!-- mapper : DB에 쿼리문을 요청하고 결과를 돌려받는 속성파일 -->
 
<select id="gogek_list" resultType="vo.GogekVO"> <!-- select는 항상 resultType정해줘야함 패키지명.VO파일명-->
	SELECT * FROM GOGEK <!-- 세미콜론 절대 금지 -->
</select>  

<select id="gogek_select" resultType="vo.GogekVO" parameterType="String">
	SELECT * FROM GOGEK WHERE GOADDR LIKE '%'||#{GOADDR}||'%' <!-- 띄어쓰기하면안됨 -->
</select>

</mapper>

 

 

결과

 

 

 

728x90