mybatis基於XML配置的動態SQL語句
阿新 • • 發佈:2018-12-04
mybatis動態SQL語句
mappers配置檔案中的幾個標籤:
<if>
<where>
<foreach>
<sql>
If標籤
- 1 . 作用:
當if標籤的test成立時,就把if標籤中的內容,拼接到上邊的sql語句的後邊
- 2 . 案例:
<!-- 此處配置了別名,因此引數型別以及返回值型別可以使用簡略寫法--> <select id="findUserByIf" resultType="user" parameterType="user"> select * from user where 1=1 <!-- 判斷姓名是否為null或空字串,為空則不進行SQL語句拼接--> <if test="username != null and username != '' "> and username = #{username} </if> <!-- 判斷性別是否為空,為空則不進行SQL語句拼接--> <if test="sex != null"> and sex = #{sex} </if> </select>
where標籤
- 1 . 作用:
用於"多條件不確定"查詢時,確定在拼接sql語句時,是否把"and"關鍵字給替換為"where"
使用while標籤時,第一個if標籤中的sql語句,可以省略and關鍵字
- 2 . 案例:
<!-- 此處配置了別名,因此引數型別以及返回值型別可以使用簡略寫法--> <select id="findUserByWhere" resultType="user" parameterType="user"> select * from user <where> <if test="username != null"> and username = #{username} </if> <if test="sex != null"> and sex = #{sex} </if> </where> </select>
foreach標籤
- 1 . 作用:
當需要遍歷"傳入引數",並拼接sql語句時. //特別是類似於 id in (1,5,8) 之類的內容
- 2 . 案例:
<!-- 此處配置了別名,因此引數型別以及返回值型別可以使用簡略寫法--> <select id="findUserInIds" resultType="user" parameterType="queryvo"> <include refid="defaultUser"></include> <where> <if test="ids != null and ids.size()>0"> <foreach collection="ids" open="and id in (" close=")" item="uid" separator=","> #{uid} </foreach> </if> </where> </select>
- 3 . 解析(foreach標籤)
collection :表示被遍歷的集合
item :集合中的每個元素
separator :拼接的每個元素之間的分割
open :被拼接的語句的開始
#{uid} :被迴圈拼接的東西
close :被拼接的語句的結束
- 4 . 注意:
4.1:如果要遍歷的是物件中的屬性,則 collection="屬性名"
4.2:如果要遍歷的是傳入引數本身(也就是說,傳遞的引數本身就是一個集合或陣列)
如果是List集合,則 collection="list"
如果是陣列,則 collection="array"
如果是Set集合,則:
第1步: 在介面的方法上,新增@Param("set")
//List<User> findUserBySet(@Param("set") Set<Integer> ids);
第2步: collection="set"
4.3:傳入引數僅限一個.
sql標籤(sql語句片段)
Sql 中可將重複的 sql 提取出來,使用時用 include 引用即可,最終達到 sql 重用的目的
- 定義程式碼片段
<!-- 抽取重複的語句程式碼片段 -->
<sql id="defaultSql">
select * from user
</sql>
- 引用程式碼片段
<!-- 配置查詢所有操作 -->
<select id="findAll" resultType="user">
<include refid="defaultSql"></include>
</select>
<!-- 根據 id 查詢 -->
<select id="findById" resultType="UsEr" parameterType="int">
<include refid="defaultSql"></include>
where id = #{uid}
</select>