마이바티스 옵션
insert, update, delete 요청에서 selectKey추출
<insert id="id" parameterType="HashMap" >
<selectKey keyProperty="seq" resultType="Integer" order="BEFORE">
(SELECT SEQUNCE_NAME.NEXTVAL FROM DUAL)
</selectKey>
INSERT INTO TABLE_NAME
VALUES(#{seq}, #{data})
</insert>
serviceImpl.java
reqMap.get("seq") // null
dao.insert(id, reqMap);
reqMap.get("seq") // SEQUNCE_NAME.NEXTVAL
반복문
<delete id="id" parameterType="HashMap">
DELETE TABLE_NAME WHERE COL = #{key}
<if test="cttNums != null ">
<foreach collection="cttNums" item="item" separator="," open="AND CTT_NUM NOT IN (" close=")">#{item}</foreach>
</if>
</delete>
내가 mybatis에서 경험했던 이슈
1. sqlmap에서 if옵션을 사용해 분기처리를 하는부분이 있는데 의도한대로 분기처리가 되지 않았다.
문제의 sqlmap
<select id="...." parameterType="HashMap" resultType="egovMap">
...
<if test="fileTy == '5'">
...
<if>
<if test="fileTy == '6'">
...
</if>
</select>
해결 과정
- 파라미터 확인
reqMap.get("fileTyp") // "5"
- 파라미터 타입 확인
reqMap.get("fileTy") instanceof String // TRUE reqMap.get("fileTy") instanceof Integer // FALSE
- 혹시 mybatis에서 파라미터값에 따라 자료형을 재정의하지 않을까 ??
- sqlmap 소스변경 기존
<if test="fileTy == '5'">
이부분에서 싱글쿼테이션을 제거하여 정수형으로 변경<if test="fileTy == 5 ">
테스트 완료정정합니다. (2018.09.01)mybatis에서 파라미터값에 따라 자료형을 재정의하진 않습니다.
위와같은 상황에서 mybatis에 개발자가 원하는걸 명확히 전달하려면 아래와 같이 사용하면 됩니다.
<!-- test구문을 싱글쿼테이션으로 감싸주는게 중요. -->
<if test='param.equals("5")'>
...
</if>
Back to Top ↑왜 그런지에 대한 이유는 다른글에서 별도로 다루겠습니다. mybatis의 OGNL기반 표현식 분석으로 이동
댓글남기기