검색기능 헷갈리는 개념 정리

최고고·2022년 11월 14일
0

페이지가 로드될때 js로 간단한 alert창 띄우기

예시)

$(document).ready(function() {
			let result = '<c:out value = "${result}"/>'
			checkAlert(result);
			console.log(result);

			function checkAlert(result) {
				if (result === '') {
					return;
				}
				if (result === "enrol success") {
					alert("등록이 완료되었습니다.");
				}
   });
  • 컨트롤러에서 온 result를 변수에 담아 사용자정의 함수 매개변수로 지정
    컨트롤러의 매개변수자리에 RedirectAttributes rttr를 넣고,
    스트링 데이터를 "result" 속성 값에 저장하는 addFlashAttribute() 메소드를 호출
    if문을 원하는대로 늘려갈 수 있다.
	@RequestMapping("/boardUpdate")
	public String boardUpdate(BoardVO vo, RedirectAttributes rttr) throws Exception {
		System.out.println(vo.toString());
		service.update(vo);
		rttr.addFlashAttribute("result", "modify success");
		
		return "redirect:/listPage";
	}
  • .preventDefault()함수 : a, button, submit 등 페이지를 이동시키거나 form 의 내용을 전송하거나 고유의 동작이 있는데 그 동작을 중단시킴 -> 원하는 처리를 할 수 있게함

  • 출력 태그 c:out
    <c:out value="${value}"/> : 보안상 좋다
    html 문자 탈락시키는 기능, 엄격한 태그 규칙, 개행 문자 파싱의 차이 등.
    또는 바로 el태그를 써도 됨

    <c:out value="${value}" escapeXml="true"나 "false" default="출력값/>
    value 속성-필수입력해줘야됨(화면에 출력할값)
    어떤 값이든 간에 출력 값을 문자열로 바꾸어 출력합니다. escaperXml 속성은 기본적으로 true 값으로 설정되나 false로 설정했을때 default 속성은 value 값을 찾지 못했을 때 출력하는 값임

검색조건을 주기위해 동적 sql을 사용하도록한다

동적SQL : MyBatis의 동적 태그를 통해 조건에 맞게 파라미터를 조정할 수 있음
참고) https://mybatis.org/mybatis-3/ko/dynamic-sql.html

  • if test속성에 조건을넣고 true일시 sql 실행

	<if test="type == 'T'.toString()"> 
  		(title like '%'||#{keyword}||'%')
 	</if>
    
    

(oracle)

검색 조건이 추가되어 변경될 sql문(전체 개수 조회메서드, 게시글 필터링 된 메서드)에 중복된 코드를 줄이기 위해서 <sql>, <inlcude> 태그를 사용하고 게시글전체 개수 조회 메서드, 검색조건에 따른 게시글 조회 메서드에 추가한다.
sql 태그 : 쿼리의 상단에 선언, 다른구문에서 재사용할 sql구문을 지정함 파라미터처럼 사용할 수 있음
include 태그 :같은 파일 내에 정의해둔 <sql> 태그 내의 쿼리들을 불러올 수 있게해줌 <include> 태그를 선언하고 해당 태그에 refid속성을 추가 해준 뒤 속성 값으로 불러오고자 하는 <sql> 태그의 id속성 값을 삽입

<trim> 은 앞뒤 필요구문 추가하거나 생략 역할
이를 이용해 검색 조건을 결합하기
prefix : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 붙여준다.
prefixOverrides : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다.
suffix : 실행 될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 붙여준다.
suffixOverrides : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다.
상황에 따라 where, set, and, or 등등 키워드를 추가하거나 빼야할 때가 있음
https://java119.tistory.com/103 참고함!
choose-when 구문을 이용해 검색 조건을 줌

아래는 참고 예시들

prefix, prefixOverrides 사용
맨 앞에 있는 연산자를(AND 또는 OR) 제거하는 경우


<select id="selectInfo" resultType="user">
	 SELECT * FROM USER
	 <trim prefix="WHERE" prefixOverrides="AND |OR">
		<if test="username != null">AND username=#{username}</if>
		<if test="password != null">OR password=#{password}</if>
		<if test="email != null">AND email=#{email}</if>
	</trim>
</select>

prefix, prefixOverrides, suffixOverrides 사용
맨 앞에 'SET' 붙이고 맨 앞, 맨 끝에 있는 콤마(,)를 제거하기



<update id="updateTable">
	UPDATE TABLE
	<trim prefix="SET" prefixOverrides="," suffixOverrides="," >
		<if test="aFlag != null">
			, A_FLAG = #{aFlag}
		</if>

		<if test="bFlag != null">
			, B_FLAG = #{bFlag}
		</if>

		<if test="cFlag != null">
			, C_FLAG = #{cFlag} ,
		</if>
	</trim>
	WHERE KEY = #{key}
</update>

prefix, prefixOverrides, suffix 사용
맨 앞에 'AND (' 붙이고 맨 앞 'OR' 제거하고 맨 끝에 ')' 붙이기

<select id="searchUser">

<trim prefix="AND (" prefixOverrides="OR" suffix=")">
 <if test="searchCategory0 != null"> 
  OR TT LIKE '%' || #{searchContent} || '%' 
 </if>  
 <if test="searchCategory1 != null"> 
  OR DS LIKE '%' || #{searchContent} || '%' 
  </if>
  <if test="searchCategory2 != null"> 
   OR WRT_MPR_NM LIKE '%' || #{searchContent} || '%' 
  </if>
</trim>
</select>

MyBatis에서 like 구문 사용법
MySQL
name like concat('%',#{userName},'%')
바로 쿼리문실행시에는 컬럼명 like '%ddddd%%'라고 해도 실행이 되지만 MyBatis를 썼을때는 문자열을 붙여주는 함수 concat을 사용해야함

MsSQL
name like '%'+#{userName}+'%'

Oracle
name like '%'||#{userName}||'%'

<if> 태그 - 검색조건없이 화면을 이동할 때 null인 typeArr 변수가 생성되고 BoardMapper 로 전달이 되는데 에러를 방지하기 위함이다.

foreach문 지원 태그
collection : 전달받은 인자. List or Array 형태만 가능
item : 전달받은 인자 값을 alias 명으로 대체
open : 구문이 시작될때 삽입할 문자열
close : 구문이 종료될때 삽입할 문자열
separator : 반복 되는 사이에 출력할 문자열
index : 반복되는 구문 번호이다. 0부터 순차적으로 증가
collection을 넘겨주는 배열 변수 값과 동일

0개의 댓글