在MyBatis中,SQL的語(yǔ)句可以分為動(dòng)態(tài)和靜態(tài)。靜態(tài)SQL是指在應(yīng)用程序編寫SQL語(yǔ)句時(shí)已經(jīng)固定好的SQL語(yǔ)句,而動(dòng)態(tài)SQL則是可以根據(jù)條件動(dòng)態(tài)地生成SQL語(yǔ)句。
動(dòng)態(tài)SQL在實(shí)際開發(fā)中非常常見,它可以根據(jù)條件進(jìn)行if、choose、when、otherwise、foreach等元素的組合拼接,從而生成不同的SQL語(yǔ)句。
以下是一些常見的動(dòng)態(tài)SQL:
if元素:if元素是一個(gè)條件判斷,它可以根據(jù)條件決定是否包含SQL語(yǔ)句片段。示例代碼:
<select id="selectBlog" resultType="Blog">
select * from Blog
<where>
<if test="title != null">
and title like #{title}
</if>
<if test="author != null">
and author like #{author}
</if>
</where>
</select>
choose元素:choose元素類似于Java中的switch語(yǔ)句,可以根據(jù)條件匹配其中的when元素,如果都不匹配則執(zhí)行otherwise元素。示例代碼:
<select id="selectBlog" resultType="Blog">
select * from Blog
<where>
<choose>
<when test="title != null">
and title like #{title}
</when>
<when test="author != null">
and author like #{author}
</when>
<otherwise>
and 1=1
</otherwise>
</choose>
</where>
</select>
foreach元素:foreach元素可以用于迭代集合或數(shù)組,并將集合或數(shù)組中的元素作為SQL參數(shù)傳遞。示例代碼:
<select id="selectBlog" resultType="Blog">
select * from Blog where id in
<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
#{item}
</foreach>
</select>
通過(guò)動(dòng)態(tài)SQL,可以大大簡(jiǎn)化SQL的編寫,并且能夠?qū)崿F(xiàn)更加靈活的SQL語(yǔ)句組合。