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>

 

반응형

'IT > Java' 카테고리의 다른 글

Spring Integration  (0) 2023.08.17
[Java] java.nio.file.Files 클래스  (0) 2022.10.31
[Java] NIO 기본동작방식 및 개념?  (1) 2022.10.11
[Java] Socket 통신 샘플 소스  (0) 2022.10.06
enum 열거형  (0) 2022.07.22
디폴트 메서드(default method)  (0) 2022.07.08
[람다식] JAVA에서의 람다식/기본편  (0) 2022.07.08
[개발환경] 이클립스 / JDK  (0) 2022.06.20
1. 전자정부프레임워크 기본설정  (0) 2020.05.19
CORS / httpUrlConnection 예제  (0) 2020.02.03