Mybatis 검색기능 Search

메타플랫폼대표
|2024. 7. 11. 12:18
반응형

1. 2024_0710_Visit_Ajax_Mybatis(실습 작업 파일)

 

GitHub - chaSunil/FirstProject: 1차 프로젝트

1차 프로젝트. Contribute to chaSunil/FirstProject development by creating an account on GitHub.

github.com

 

2. 2024_0710_MybatisTest(실습 작업 파일)

 

GitHub - chaSunil/FirstProject: 1차 프로젝트

1차 프로젝트. Contribute to chaSunil/FirstProject development by creating an account on GitHub.

github.com

 



 

visit_list 검색창 추가

 

 

visit_list function 추가

 

 

 

VisitListAction Servlet 수정

package action;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import dao.VisitDao;
import db.vo.VisitVo;

/**
 * Servlet implementation class VisitListAction
 */
@WebServlet("/visit/list.do")
public class VisitListAction 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 {

		// /visit/list.do
		// /visit/list.do??search=all&search_text=
		// /visit/list.do??search=name&search_text=길동
		// /visit/list.do??search=content&search_text=내용
		// /visit/list.do??search=name_content&search_text=길동(이름이나 내용이 길동)
		
		// 0. 수신인코딩 설정
		request.setCharacterEncoding("utf-8");
		
		// 1. parameter 받기
		String search		=		request.getParameter("search");
		String search_text	=		request.getParameter("search_text");
		
		// search 값이 안들어왔을때 그냥 default로 전체보기로 보여주겠다.(안넣어주면 nullPointException)
		if(search==null) {
			search="all";
		}
		
		// 검색조건을 담을 맵
		Map<String, String> map = new HashMap<String, String>();
		
		// 이름 + 내용
		if(search.equals("name_content")) {
			map.put("name", search_text); // 데이터를 찾아오는 값에 이름에다가두 넣구우
			map.put("content", search_text); // 내용에다가두 넣구우
		} else if(search.equals("name")) { // 문자열 비교는 무조건 equals //search=="name"(X)
		// 이름
			map.put("name", search_text);
		} else if(search.equals("content")) {
		// 내용
			map.put("content", search_text);
		}
		
		// 방명록 데이터 가져오기
		List<VisitVo> list = VisitDao.getInstance().selectList(map);
		
		// request binding
		request.setAttribute("list", list);
		
		// Dispatcher형식으로 호출
		String forward_page = "visit_list.jsp";
		RequestDispatcher disp = request.getRequestDispatcher(forward_page);
		disp.forward(request, response);

	}

}

 

 

Dao 추가

	public List<VisitVo> selectList(Map<String, String> map) {
		
		List<VisitVo> list = null;
		
		// 1. SqlSession 얻어오기
		SqlSession sqlSession = factory.openSession(); // Connection 획득
		
		// 2. 작업수행                namespace
		list = sqlSession.selectList("visit.visit_list_condition", map);
		
		// 3. 닫기 : conn.close()과정 포함
		sqlSession.close();

		return list;
	}

 

 

where문에 동적쿼리문을 적용할 때의 수행과정

Map 아래에 있는 if문에 대해서 해당사항이 없으면 trim안에 있는 element들은 전부 무시당한채로 진행된다.

(그렇기 때문에 search의 value값이 all인 전체보기는 visit_view로 전체보기가 자동으로 되는 것이다)

 

 

 

 

 

 

 

 

 

 


 

 

 

이번엔 Select를 사용해서 많은 종류의 데이터를 선택하는 방법을 알아보자~~

 

html 설정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<style type="text/css">
#box {
	width: 1200px;
	margin: auto;
	margin-top: 50px;
}
</style>

<script type="text/javascript">

	function search(){
		const deptno = $("#deptno").val();
		
		// 직급전체
		$("#sajob").val("all");
		
		// Ajax로 요청
		$.ajax({
			url		:		"sawon/list.do",
			data	:		{"deptno":deptno}, // sawon/list.do?deptno=10
			success	:		function(res_data){
				$("#disp").html(res_data);
			},
			error	:		function(err){
				alert(err.responseText);
			}
		});
	}// end:search()

	function search_sajob(){
		const sajob = $("#sajob").val();
		
		// 직급전체
		$("#deptno").val(0);
		
		// Ajax로 요청
		$.ajax({
			url		:		"sawon/list_job.do", // SawonListJobAction
			data	:		{"sajob":sajob}, // sawon/list.do?sajob=대리
			success	:		function(res_data){
				$("#disp").html(res_data);
			},
			error	:		function(err){
				alert(err.responseText);
			}
		});
	}// end:search_sajob()
	
	function search_all(){
		const deptno = $("#deptno").val();
		const sajob = $("#sajob").val();
		const sasex = $("#sasex").val();
		const hire_year_10 = $("#hire_year_10").val();
		
		$.ajax({
			url		:		"sawon/list_condition.do",
			data	:		{"deptno":deptno,
					"sajob":sajob,"sasex":sasex,"hire_year_10":hire_year_10	
			},
			success	:		function(res_data){
							$("#disp").html(res_data);
			},
			error	:		function(err){
							alert(err.responseText);
			}
		});
	}


</script>
</head>
<body>
<div id="box">
	<form class="form-inline">
		부서번호:<select class="form-control" id="deptno">
			<option value="0">전체보기</option>
			<option value="10">10번부서</option>
			<option value="20">20번부서</option>
			<option value="30">30번부서</option>
			<option value="40">40번부서</option>
		</select>
		<input class="btn btn-primary" type="button" value="부서별검색" onclick="search();">
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		직급:<select class="form-control" id="sajob">
			<option value="all">전체보기</option>
			<option value="부장">부장</option>
			<option value="과장">과장</option>
			<option value="대리">대리</option>
			<option value="사원">사원</option>
			<option value="알바">알바</option>
		</select>
		<input class="btn btn-primary" type="button" value="직급별검색" onclick="search_sajob();">
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	
	성별:<select class="form-control" id="sasex">
		 	<option value="all">전체</option>
		 	<option value="여자">여자</option>
		 	<option value="남자">남자</option>
		 </select>
 	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	
	입사년대:<select class="form-control" id="hire_year_10">
		 	<option value="1980">1980년대</option>
		 	<option value="1990">1990년대</option>
		 	<option value="2000">2000년대</option>
		 </select>
		 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	<input type="button" class="btn btn-info" value="전체조건검색" onclick="search_all();">
	<hr>
		<div id="disp">
		
		</div>
	</form>
</div>

</body>
</html>

 

 

SawonListConditionAction Servlet 생성

package action;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import dao.SawonDao;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import vo.SawonVo;

/**
 * Servlet implementation class SawonListAction
 */
@WebServlet("/sawon/list_condition.do")
public class SawonListConditionAction 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 {
		// parameter가 들어올 수도 있고, 들어오지 않을 수도 있다.
		// /sawon/list_condition.do
		// /sawon/list_condition.do?deptno=0&sajob=all
		// /sawon/list_condition.do?deptno=0&sajob=부장
		// /sawon/list_condition.do?deptno=10&sajob=사원
		
		// 0. 수신인코딩
		request.setCharacterEncoding("utf-8");
        
        // 여기서부터 지정해주는것은 list_condition.do로 parameter 값을 안치고 그대로 쳤을경우에 조건식 지정
		
		int deptno = 0;
		
		try {
			deptno = Integer.parseInt(request.getParameter("deptno"));
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		String sajob = request.getParameter("sajob");
		if(sajob==null) {
			sajob = "all";
		}
		
		String sasex = request.getParameter("sasex");
		if(sasex==null) {
			sasex = "all";
		}
		
		// 검색할 조건을 전달할 Map
		Map<String, Object> map = new HashMap<String, Object>();
		
		if(deptno!=0) { // 전체가 아니면
			map.put("deptno", deptno);
		}
		
		if(!sajob.equals("all")) { // 전체가 아니면
			map.put("sajob",sajob);
		}
		
		if(!sasex.equals("all")) { // 전체가 아니면
			map.put("sasex",sasex);
		}
		
		// list 가져오기 (사원목록)
		List<SawonVo> list = SawonDao.getInstance().selectList(map);
		
		
		
		// Request Binding(객체 값을 지정해서 넘기기)
		request.setAttribute("list", list);
		
		// Dispatcher형식으로 호출
		String forward_page = "sawon_list.jsp";
		RequestDispatcher disp = request.getRequestDispatcher(forward_page);
		disp.forward(request, response);

	}

}

 

 

 

SawonDao 생성

	public List<SawonVo> selectList(Map<String, Object> map) {
		
		List<SawonVo> list = null;
		
		// 1. SqlSession 얻어오기(Mybatis 수행객체)
		SqlSession sqlSession = factory.openSession();
		
		// 2. 작업수행                namespace.mapperId        parameter
		list = sqlSession.selectList("sawon.sawon_list_condition", map);
		
		// 3. 작업완료 후 닫기작업
		sqlSession.close();

		return list;
	}

 

 

 

sawon.xml 생성

	<!-- 부서와 직급별로 조회 Dynamic Query -->
	<select id="sawon_list_condition" parameterType="Map" resultType="vo.SawonVo">
		select * from sawon
		<!-- 검색조건 추가 -->
		<trim prefix="where" prefixOverrides="and">
			<!-- 부서검색 -->
			<if test="deptno!=null">
				deptno = #{ deptno }
			</if>
			<if test="sajob!=null">
				and sajob = #{ sajob }
			</if>
			<if test="sasex!=null">
				and sasex = #{ sasex }
			</if>
			<if test="hire_year_10!=null">
				and floor(to_number(to_char(sahire,'YYYY'))/10)*10 = #{ hire_year_10 }
			</if>
		</trim>
	</select>

 

 

반응형

'데이터베이스↗' 카테고리의 다른 글

페이징 처리  (0) 2024.07.12
Mybatis Double Table deptMap  (0) 2024.07.11
Mybatis library 설정과 사용  (0) 2024.07.10
json kakao open api 활용하기  (0) 2024.07.09
json Data 활용  (0) 2024.07.09