動(dòng)態(tài) SQL
什么是動(dòng)態(tài) SQL
就是動(dòng)態(tài)的對(duì) SQL 進(jìn)行組裝 拼接.
<if>
<select id="findById" resultType="String" parameterType="User">
select userName from user
<where>
<if test="id != null || id != 0">
userId = #{id}
</if>
</where>
</select>
<where>: 可以自動(dòng)去掉條件中的第一個(gè) and
注:<if>中的 test 屬性是 User 對(duì)象中的屬性名,而且這里寫的是java代碼,而不是 SQL 語句(is not null).
<set>
類似的用于動(dòng)態(tài)更新語句的解決方案叫做 set形娇。set 元素可以被用于動(dòng)態(tài)包含需要更新的列亮垫,而舍去其他的甘邀。比如:
<update id="updateAuthorIfNecessary">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
知識(shí)拓展
綜合查詢
當(dāng)我們查詢的時(shí)候需要用到很多的查詢條件,例如用戶信息綜合查詢,查詢條件可能包括用戶信息,商品 訂單的.
比如我們可以查詢某用戶買了哪些商品,還可以查詢某些商品被哪些用戶買了.
針對(duì)這些復(fù)雜的查詢我們可以定義一個(gè)包裝類userQueryVo
Vo指的是視圖對(duì)象.
public class UserQueryVo {
//此類可以包含User對(duì)象
public User user;
//或者商品 訂單對(duì)象等
}
SQL 語句重用
<sql id="id">
</sql>
<select id="find">
<include refid="id"></include>
</select>
當(dāng)多條查詢語句的where條件相同時(shí),我們可以使用此方法.
<sql>: id 屬性是sql重用代碼 的唯一標(biāo)識(shí)
<include>: refid 屬性引用SQL重用代碼的標(biāo)識(shí),如果不在同一個(gè)mapper映射文件中,這需要添加namespace.
注:
1.基于表單定義SQL重用代碼,提高代碼重用性.
2.在SQL重用代碼,不要包含where,因?yàn)橛锌赡苣愕倪@條SQL重用代碼,會(huì)包含在一個(gè)where中.