날아라쩡글이의 블로그입니다.
다이나믹 쿼리(select문 하나로 여러 쿼리를 조회하다.) 본문
다이나믹 쿼리(select문 하나로 여러 쿼리를 조회하다.)
날아라쩡글이 2022. 1. 4. 08:25Criteria : 기준, 표준의 복수형
form 객체로 등록한다. 내용은 opt와 value라는 속성으로 정의하고, 기본생성자와 getter/setter로 정의한다.
이제 검색을 통해보일 Controllerdp Criteria를 매개변수로 정의하고, Controller에는
if(StringUtils.hasText(criteria.getOpt()) && StringUtils.hasText(criteria.getValue())) {
// criteria의 opt에 text가 존재하고 또는 criteria의 value에 text가 존재하면
List<Book> books = bookService.searchBook(criteria);
//객체가 출력되고,
model.addAttribute("books",books);
//model 에 값을 담는다.
} else {
List<Book> books = bookService.getAllBookList();
model.addAttribute("books",books);
//안 적혀 있으면 전체가 출력된다.
}
return "book/list.jsp";
그리고 다이나믹 쿼리를 작성한다. where태그를 사용하고 내부에는 if -> choose -> when으로 쿼리를 짜준다.
where태그 : <where>태그안에 sql문이 포함되면 where 키워드로 변경된다.
where태그안에 sql문이 포함되었으나 따로 객체가 발견되지 않으면 where태그는 없다고 가정한다.
where태그안에 sql문중에서 첫번째 sql문이 "and 컬럼명 = 값" 의 형태면 and를 제거한다.
일반 select문은 동일하게, form도 동일하게 작성 후
<where>
<if test="opt != null and value != null">
//만약 opt가 null이 아니고, value가 null이 아니라면 ! 보이는 것이다.
<!-- 다이나믹 쿼리, 반응형 쿼리 -->
<choose>
//선택하라
<when test="opt == '제목'">
//when의 opt의 값이 제목이라면
book_title like '%' || #{value} || '%'
//속성의 값이 동일한것을 책이름에서 찾는다.
</when>
<when test="opt == '저자'">
book_author = #{value}
</when>
<when test="opt == '출판사'">
book_publisher = #{value}
</when>
<when test="opt == '최소가격'">
book_price >= to_number(#{value})
</when>
<when test="opt == '최대가격'">
book_price < = to_number(#{value}) <!-- < -->
</when>
</choose>
</if>
</where>
<는 <라는 표시이다.
반응형 쿼리 : where - if- choose - when
해당 jsp에서 javaScript으로 막아주는 것이 좋다.
//검색버튼을 클릭해서 폼이 제출할 때 실행될 이벤트 핸들러 함수를 등록한다.
$('#form-search-book').submit(function(){ //form에서 submit 이벤트가 발생했을 떄, 반환값에 따라서 form의 입력값이 서버로 제출되거나 제출되지 않을 수 있다.
var opt = $("select[name=opt]").val();
var value = $.trim($(":input[name=value]").val());
if(opt && value) { //opt도 값이 있고, value도 값이 있어야 참이다.
return true; //이벤트 핸들러 함수가 true를 반환하면 form의 입력값이 서버로 제출된다.
}
alert("검색조건 혹은 검색어를 입력하세요");
return false; //이벤트 핸들러 함수가 false를 반환하면 form의 입력값이 서버로 제출되지 않는다.
});
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
Session어노테이션 & SessionUtils로 객체 담기 (0) | 2022.01.05 |
---|---|
다이나믹쿼리 (resultMap) (0) | 2022.01.04 |
RedirectAttributes,Model 의 차이점 (0) | 2022.01.02 |
Project Object Model.xml설정, 로그설정 (0) | 2021.12.31 |
myBatis-spring 실습 (xml환경 설정) (0) | 2021.12.30 |