@
在前一篇[MyBatis動態SQL(認真看看, 以后寫SQL就爽多了)]中, 詳細給出了動態 SQL 的用法, 也收到了至今為止最多的贊和日閱讀量。
今天在大致講解一下 <sql> 和 <include> 節點的使用。
<sql> 節點的基礎
對於 <sql> 節點, 很多人的理解估計就是用來包含數據庫的字段的, 以便用來替換所有字段 「*」 符號, 以此來提高 SQL 的執行速度。
類似這樣
<sql id="Base_Column_List">
student_id, name, phone, email, sex, locked, gmt_created, gmt_modified
</sql>
但是在 mybatis 的定義中, <sql> 節點是用來定義可重用的 SQL 代碼段。
它可以被包含在其他語句里面, 使用 <include> 節點來包含。
而且, 它里面是可以使用 ${} 占位符參數化的(注意, 此處的參數不是調用時傳進來的), 不同的屬性值通過包含的實例而變化。
比如
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </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>
<include> 節點
看一下 include 的約束:
可以看待, 必須要有 refid, 可以有0個或多個 property。 通過 property 標簽, 將我們的屬性包含進來。 如以上的
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
占位符也可以被用在 <include> 元素的 refid 屬性里
<include refid="${include_target}"/>
<sql> 節點包含的節點
在 <sql> 節點內部, 還能包含很多節點
所有的動態 SQL 相關的節點都是可以有的。
用的最多的就是 <include> 節點。
<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
你想不想來學習 mybatis? 學習其使用和源碼呢?那么, 在博客園關注我吧!!
我自己打算把這個源碼系列更新完畢, 同時會更新相應的注釋。快去 star 吧!!