IT/Java
MyBatis 동적쿼리 / #$ / include sql / property
상짱
2020. 2. 5. 14:58
반응형
1. 동적쿼리
SELECT COLUMN_ID01
, COLUMN_ID02
, COLUMN_ID03
, COLUMN_ID04
FROM TABLE_NAME
<where>
AND COLUMN_ID01 = #{columnId01}
<!-- if -->
<if test="columnId02 != '' and columnId02 != null">
AND COLUMN_ID02 = #{columnId02}
</if>
<!-- choose -->
<choose>
<when test="columnId03 != '' and columnId03 != null">
AND COLUMN_ID03 = #{columnId03}
</when>
<otherwise>
AND COLUMN_ID04 = #{columnId04}
</otherwise>
</choose>
</where>
2. #$
- # 은 문자열 ( String ) / '' 을 붙이고 들어온다.
- $ 글자그대로....음...예제고~ / '' 없이 문자 그대로... / number 타입만 들어올 경우 사용해도 될듯하다.
SELECT COLUMN_ID01
, COLUMN_ID02
, COLUMN_ID03
, COLUMN_ID04
FROM TABLE_NAME
<where>
// columnId01 이 'code01' 이라는 값이 들어올 경우
AND COLUMN_ID01 = #{columnId01} // 'code01'
AND COLUMN_ID01 = ${columnId01} // code01
</where>
3. include sql / property
- 임시파일 두개가 있다고 가정하에 common_sql.xml , custom_sql.xml
- include sql 에 parameter 를 넘기기 위해서 property 를 사용
- common_sql.xml
// common_sql.xml
<mapper namespace="common">
<sql id="xxxxHeader">
SELECT COUNT(*) OVER() AS CNT
, SQLRSLT.*
FROM (
</sql>
<sql id="xxxxFooter">
) SQLRSLT
WHERE 1=1
</sql>
<sql id="xxxCondition">
AND ${columnName} = ${columnValue}
// columnValue 에서 #{columnId05} 라고 작성을 해도 값은 들어오지만,
// custom_sql.xml 에서만 사용가능하다.
// 다수의 화면 및 다수의 sql.xml 사용을 위해서 네임을 지정하고 사용한다.
</sql>
</mapper>
- custom_sql.xml
// custom_sql.xml
<mapper namespace="custom">
<select id="selectXxxxxxList" resultType="Map">
<include refid="common.xxxxHeader"/>
SELECT COLUMN_ID01
, COLUMN_ID02
, COLUMN_ID03
, COLUMN_ID04
, COLUMN_ID05
FROM TABLE_NAME
<where>
<include refid="common.xxxCondition">
<property name="columnName" value="COLUMN_ID05" />
<property name="columnValue" value="#{columnId05}" />
</include>
</where>
<include refid="common.xxxxFooter"/>
</select>
</mapper>
반응형