6 MyBatis動態SQL之choose(when、otherwise)語句
1 MyBatis動態SQL之if 語句
2 MyBatis動態sql之where標簽|轉
3 MyBatis動態SQL之set標簽|轉
4 MyBatis動態SQL之trim元素|轉
5 MyBatis動態sql中foreach標簽的使用
6 MyBatis動態SQL之choose(when、otherwise)語句
7 MyBatis動態SQL之bind標簽|轉
??有時候,我們不想用所有的條件語句,而只想從中擇其一二。針對這種情況,MyBatis提供了choose元素,它有點像Java中的switch語句。還是上面的例子,但是策略變為:傳入了 id就按id查找,傳入了loginname 和password就按loginnam 和password查找,若兩者都沒有提供,就返回所有sex等于男的Employee。
<select id="selectEmployeeChoose" parameterType="hashmap" resultType="my.mybatis.domain.Employee">
SELECT * FROM tb employee WHERE state = 'ACTIVE'
<!--- 如果傳入了id,就根據id查詢,沒有傳入id就根據loginname和password查詢,否則查詢sex等于男的數據-->
<choose>
<when test="id != null">
and id= #{id}
</when>
<when test="loginname != null and password != null">
loginname = #{loginname} and password = #{password}
and
</when>
<otherwise>
and sex = '男'
</otherwise>
</choose>
</select>
??提供id、loginname 和password的時候,調用selectEmployeeChoose()方法,控制臺顯示如下:
SELECT * FROM tb_employee WHERE state = 'ACTIVE' and loginname = ? and password = ?
??由于傳遞的參數只包括loginname和password,所以sql語句是按照loginname和password查找,查詢返回的Emplyee對象就是loginname,即jack,并且password是123456的對象。沒有傳遞任何參數時,控制臺顯示如下:
SELECT * FROM tb_employee WHERE state = 'ACTIVE' and sex = '男'
??可以看到,由于沒有傳遞任何參數,故sql語句執行的是< otherwise >元素里面的查詢條"sex='男'"的對象。
Buy me a coffee. ?Get red packets.
浙公網安備 33010602011771號