반응형
1. 2024_0710_Visit_Ajax_Mybatis(실습 작업 파일)
2. 2024_0710_MybatisTest(실습 작업 파일)
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();">
직급:<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();">
성별:<select class="form-control" id="sasex">
<option value="all">전체</option>
<option value="여자">여자</option>
<option value="남자">남자</option>
</select>
입사년대:<select class="form-control" id="hire_year_10">
<option value="1980">1980년대</option>
<option value="1990">1990년대</option>
<option value="2000">2000년대</option>
</select>
<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 |