1. 程式人生 > >mybatis基於XML配置的動態SQL語句

mybatis基於XML配置的動態SQL語句

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>