회사에서 개발을 하면서 myBatis를 통해 mapper에 전달된 파라미터 값을 편리하게 활용할 수 있었다. 근데 아직까지 내용정리를 못했던 거 같아서 간단하게 정리를 해보려고 한다. 시험기간이라 정신이 없어서 이번에는 문법만 대충 정리하겠다😥
<if test="조건"> 조건이 참이면 해당 쿼리 실행 </if>
<select id="getUserList" parameterType="String" resultType="hashMap"> SELECT * FROM USERTABLE WHERE USE_YN = 'Y' <if test='userId != null and userId != ""'> AND USER_ID = #{userId} </if> </select>
<choose> <when test="조건1"> 조건1이 참이면 해당 쿼리 실행 </when> <when test="조건2"> 조건1이 거짓이고, 2가 참이면 해당 쿼리 실행 </when> <otherwise> 조건 1,2가 전부 거짓이면 해당 쿼리 실행 </otherwise> </choose>
<select id="getUserInfo" parameterType="hashMap" resultType="hashMap"> SELECT * FROM BOARD WHERE USE_YN = 'Y' <choose> <when test='"writer".equals(searchType)'> AND WRITER = #{searchValue} </when> <when test='"content".equals(searchType)'> AND CONTENT = #{searchValue} </when> <otherwise> AND TITLE = #{searchValue} </otherwise> </choose> </select>
<foreach collection="컬렉션 변수" item="항목" index="인덱스" open="시작문자열" close="종료문자열" separator="구분자"> #{item} </foreach>
<select id="getUserList" parameterType="hashMap" resultType="hashMap"> SELECT * FROM USERTABLE WHERE STUDENT_ID IN <foreach collection="params" item="item" open="(" separator="," close=")"> #{item.userId} </foreach> </select>
<selectKey keyProperty="propertyName" resultType="string" order="BEFORE"> SELECT 컬럼명 FROM 테이블명 WHERE 조건 </selectKey> // BEFORE : keyProperty 변수로 지정한 결과값을 #{propertyName} 활용할 수 있다. <selectKey keyProperty="propertyName" resultType="string" order="AFTER"> SELECT 컬럼명 FROM 테이블명 WHERE 조건 </selectKey> // AFTER : JAVA단에서 AFTER로 보낸 값을 사용할 수 있으나 변수로 활용 X
<insert id="insertUserInfo" parameterType="hobby"> <selectKey keyProperty="userid" resultType="string" order="BEFORE"> SELECT MAX(user_id) + 1 FROM USERTABLE </selectKey> INSERT INTO USERTABLE(user_id, user_name, user_age) VALUES (#{userid}, #{username}, #{userage}) </insert>
이번 글은 아무리 시험기간이라고 하지만 정말 성의가 없다고 나도 느껴진다. 하지만 이 글을 정리하면서 다중쿼리(selectKey)를 활용하여 mapper의 결과값을 도출할 수 있는 또다른 지식을 얻은 거 같다. 찾아보니 where이라는 조건 특화 어쩌구도 있던데 나중에 활용하게 된다면 여기에 다시 한번 정리를 하도록 하겠다.
글 재미있게 봤습니다.