MyBatis 동적 쿼리

최주영·2023년 7월 6일
0

MyBatis

목록 보기
3/8
  • 각 모든 경우 XML 파일일 경우에만 가능하다

✅ 파라미터 값을 가져올 때
#{} : setType()값을 대입 -> 자료형에 맞는 리터럴을 대입

SELECT * FROM EMPLOYEE WHERE GENDER = #{gender}

${} : 문자열처리하는 표현 ex) 컬럼명 쓸때 사용

SELECT * FROM EMPLOYEE WHERE ${type} Like '%'||#{keyword}||'%'

✅ if 문

  • 조건에 따라서 쿼리문 처리 가능
  • JSTL과 다르게 test 에 대입되는 값은 문자열 자체로 넣는다
<if test="salFlag!=null and salary!=null and salary!=''">
		<if test="salFlag=='ge'">   <!-- == 대신 eq로할수있음 -->
			AND SALARY >= #{salary}  <!-- AND SALARY &gt;= #{salary} -->  <!-- 위와 같은표현식임 -->
		</if>
		<if test="salFlag=='le'">
			AND SALARY <![CDATA[<=]]> #{salary} 
            <!-- <만쓰면은 태그로인식되기때문에 <![CDATA[<=]]> -> 이스케이프문 -->
	<!-- 		AND SALARY &lt;= #{salary} --> <!-- 위와 같은표현식임 -->
		</if>	
        
<insert id="insertProduct">
	INSERT INTO PRODUCT VALUES(#{productId},#{userId},#{productTitle},#{productStatus},DEFAULT,#{price},DEFAULT,DEFAULT,#{explanation},
	<if test="keyword!=null">
	#{keyword},
	</if>
	<if test="keyword==null">
	'선택안함',
	</if>
    #{subCategoryName},#{areaName})
</insert>        
    

✅ choose 문

  • 자바의 switch문과 비슷하며, 여러 경우의 수를 고려하며 쿼리문 처리 가능
	<choose>  
		<when test="salFlag=='le'">
			AND SALARY &lt;= #{salary}
		</when>
		<otherwise>
			AND SALARY &gt;= #{salary}
		</otherwise>
	</choose> 

✅ foreach 문

  • 배열방식의 값을 처리할 때 사용
  • 속성
    collection : 배열방식의 데이터
    item : 배열의 데이터를 저장하는 변수명
    open : 반복을 시작할때 출력할 값을 설정
    close : 반복을 끝냈을 때 출력할 값을 설정
    separator : 반복할 때마다 출력할 값을 설정
    index : 배열의 인덱스 번호를 저장하는 변수
<foreach collection="deptCodes" open="(" close=")" separator="," item="d"> 
<!-- (로 시작   )로 끝나며 중간중간 값마다 ,를 넣어줌 -->
		#{d}
</foreach>

✅ where 문

  • 여러 쿼리문을 위에서 작성한 조건문에 맞춰서 작성하다 보면, 문법이 맞지 않을경우가 있다
  • 그 문제를 해결하기 위해서 등장
  • trim 문이랑 동일한 문법임
  • WHERE 절에 무조건 참값으로 넣는것도 좋은 방법
    -> WHERE 1=1
<select id="searchEmp" resultMap="empMap" parameterType="map"> <!-- 매개변수로 map을 받음 -->
		SELECT * FROM EMPLOYEE	
		<where> <!-- where 절을 쓰면 알아서 쿼리문이 조합되서 쿼리문이 짜짐 -->
        <!-- WHERE 1=1 -->
		<!-- <trim prefix="WHERE" prefixOverrides="AND|OR"> --> <!-- trim절로 사용가능 where절과 동일 -->
			<if test="keyword!=null and keyword!=''"> <!-- text값 넘길때 공란으로 넘길수 있기때문에 != '' --> 
				AND ${type} LIKE '%'||#{keyword}||'%' <!--알아서 필요할때 AND가 붙고, 필요하지않을땐 없어짐 -->
			</if>
			<if test="gender!=null and gender!=''">
				AND GENDER = #{gender} 
			</if>		
			
		<!-- </trim> -->
		</where>
	</select>

위 예제를 보면 기본적으로
SELECT * FROM EMPLOYEE 문장이 실행이된다!
그 밑으로는 조건이 맞을경우 WHERE 조건식이 추가되면서 각 조건에 따라서 쿼리문을 실행한다

profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글