MyBatis資料持久化 SQL複用(可重用的 SQL 程式碼段)

衣舞晨風發表於2016-09-01

1、修改pom.xml,升級MyBatis版本升級到3.3.0以上版本
2、重新整理maven(兩種方式)
A. 命令方式
在terminal視窗輸入:

mvn clean install -Dmaven.test.skip=true

小注:
clean 移除所有上一次構建生成的檔案
install 將包安裝至本地倉庫,以讓其它專案依賴
maven.test.skip 跳過測試

該方式需要先定位到pom.xml所在的資料夾,再執行命令。
這裡寫圖片描述

B. 工具操作方式:
利用idea中的Maven工具來操作,先clean後install
這裡寫圖片描述
AB兩種方式,操作完成後,最好重新整理一下
這裡寫圖片描述
如果還是不行,刪除一下target檔案
這裡寫圖片描述
3、程式碼編寫

<sql id="sqlDemo1">
    SELECT * FROM tableA
    <where>
        tableA.code=#{code}
        <if test="city != null and city!= ''">
            AND tableA.city = #{city}
        </if>
    </where>
</sql>
<sql id="sqlDemo2">
    SELECT * FROM tableB
    <where>
        tableB.city IN
        (
        <include refid="sqlDemo1">
            <property name="city" value="${city}"/>
            <property name="code" value="${code}"/>
        </include>
        )
    </where>
</sql>
<select id="getList" parameterType="Map" resultType="Map">
    <include refid="sqlDemo2">
        <property name="city" value="${city}"/>
        <property name="code" value="${code}"/>
    </include>
</select>

該程式碼主要演示了:sql片段可以巢狀,可以動態傳值,但注意在給property的value傳值時,只能用$,用#的會導致在sql中取不到值。
上面用的ide是:IntelliJ IDEA 15.0.6
用property的時候idea有可能報錯如下,但編譯可以通過不影響使用:
這裡寫圖片描述
至於sql片段傳遞固定值,可以參考以下說明

=================傳遞固定值=====================
這個元素可以被用來定義可重用的 SQL 程式碼段,可以包含在其他語句中。它可以被靜態地(在載入引數) 引數化. 不同的屬性值通過包含的例項變化. 比如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

這個 SQL 片段可以被包含在其他語句中,例如:

<select id="selectUsers" resultType="map">
  select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
  from some_table t1
    cross join some_table t2
</select>

屬性值可以用於包含的refid屬性或者包含的字句裡面的屬性值,例如:

sql id="sometable">
  ${prefix}Table
</sql>

<sql id="someinclude">
  from
    <include refid="${include_target}"/>
</sql>

<select id="select" resultType="map">
  select
    field1, field2, field3
  <include refid="someinclude">
    <property name="prefix" value="Some"/>
    <property name="include_target" value="sometable"/>
  </include>
</select>

小注:傳遞傳遞值部分摘自《MyBatis官方文件》,連結地址:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章