本專欄主要是記錄學(xué)習(xí)完JavaSE后學(xué)習(xí)JavaWeb部分的一些知識(shí)點(diǎn)總結(jié)以及遇到的一些問題等,如果剛開始學(xué)習(xí)Java的小伙伴可以點(diǎn)擊下方連接查看專欄
本專欄地址:??JavaWeb
Java入門篇: ??Java基礎(chǔ)學(xué)習(xí)篇
Java進(jìn)階學(xué)習(xí)篇(持續(xù)更新中):??Java進(jìn)階學(xué)習(xí)篇
本系列文章會(huì)將講述有關(guān)于如何使用MyBatis完成增刪查改的操作,預(yù)計(jì)本系列文章會(huì)有以下這些文章,在寫完本系列的文章后會(huì)有一篇文章羅列這些文章以及其地址(傳送門)小伙伴們直接點(diǎn)擊查看即可
文章名稱 | 文章地址 |
---|---|
查詢所有數(shù)據(jù) | 使用映射配置文件實(shí)現(xiàn)CRUD操作——查詢所有數(shù)據(jù) |
查詢?cè)斍?/td> | 使用映射配置文件實(shí)現(xiàn)CRUD操作——通過主鍵查詢對(duì)應(yīng)數(shù)據(jù) |
使用映射配置文件實(shí)現(xiàn)CRUD操作——多條件查詢 | |
添加數(shù)據(jù) | |
修改全部字段 | |
修改動(dòng)態(tài)字段 | |
刪除一條數(shù)據(jù) | |
批量刪除數(shù)據(jù) |
一、前言
在上一篇文章中我們說到:?jiǎn)螁问褂脜?shù)占位符去編寫SQL語(yǔ)句還是存在一定的問題的,比如當(dāng)我們有一個(gè)參數(shù)沒有值的時(shí)候,就查詢不出來結(jié)果了,而這種情況極有可能發(fā)生(因?yàn)橛脩舨灰欢〞?huì)篩選所有條件)所以要用動(dòng)態(tài)SQL來解決問題
二、概述
在MyBatis中有以下幾個(gè)屬性標(biāo)簽來支撐動(dòng)態(tài)SQL
-
if
-
choose(when,otherwise)
-
trim(where,set)
-
foreach
三、if標(biāo)簽(多條件動(dòng)態(tài)查詢)
1.概述
if標(biāo)簽是條件判斷,if標(biāo)簽里面寫test,即邏輯表達(dá)式,可以理解為if后面的判斷語(yǔ)句
2.格式
<if test="···">
···
</if>
3.具體實(shí)例
<select id="selectByCondition" resultMap="brandResultMap">
select
*
from tb_brand
where
<if test="status != null">
status = #{status}
</if>
<if test="companyName != null and conpanyName != '' ">
and company_name like #{companyName}
</if>
<if test="brandName != null and brandName != '' ">
and brand_name like #{brandName}
</if>
</select>
4.弊端
當(dāng)我們stasus
參數(shù)沒有傳入的時(shí)候,SQL語(yǔ)句會(huì)變化,變成一個(gè)不正確的SQL語(yǔ)句,如下所示,所以在查詢過程中也會(huì)報(bào)錯(cuò),無(wú)法正確實(shí)現(xiàn)查詢要求,但是如果不加and
的話,原本的SQL語(yǔ)句語(yǔ)法也不對(duì),所以接下來會(huì)講述如何解決
此時(shí) SQL 語(yǔ)句
select * from tb_brand where and company_name like ? and brand_name like ?
5.解決弊端方法
1??使用恒等式
這里我們只需要在where
后加一個(gè)恒等式"1 = 1"
,那么就算第一個(gè)條件沒有執(zhí)行,SQL語(yǔ)句也不會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,拼接完后的SQL語(yǔ)句會(huì)變成如下這樣,也就不會(huì)報(bào)錯(cuò),可以正常執(zhí)行,但是依然不是最優(yōu)解。MyBtais提供了一個(gè)where標(biāo)簽可以一下子解決問題
select * from tb_brand where 1 = 1 and company_name like ? and brand_name like ?
2??使用where標(biāo)簽
這個(gè)標(biāo)簽可以 自動(dòng)生成SQL語(yǔ)句中的WHERE關(guān)鍵字,并判斷是否只有一個(gè)條件,如果是,還會(huì) 自動(dòng)去掉AND,保證SQL語(yǔ)句的語(yǔ)法正確性
四、choose標(biāo)簽(單條件動(dòng)態(tài)查詢)
1.概述
choose標(biāo)簽是可以從多個(gè)條件中選擇一個(gè),可以把它看成Java中的switch
語(yǔ)句,既然是要選擇,那么每個(gè)條件都要有一個(gè)when
標(biāo)簽包裹語(yǔ)句,如果所有條件都不符合的話,就要用otherwise
標(biāo)簽來包裹最后的語(yǔ)句,一般為1 = 1
,即直接查詢所有的數(shù)據(jù)
一般會(huì)使用在單條件的動(dòng)態(tài)查詢中,比如下拉表單選擇要查詢的條件(狀態(tài)/品牌名稱/公司名稱),再輸入自己想要搜索的關(guān)鍵字
2.格式
<choose>
<when>
···
</when>
<when>
···
</when>
<otherwise>
···
</otherwise>
</choose>
3.實(shí)例
<select id="selectByConditionSingle" resultMap="brandResultMap">
select *
from tb_brand
<where>
<choose>
<when test="status != null">
status = #{status}
</when>
<when test="companyName != null and conpanyName != '' ">
company_name like #{companyName}
</when>
<when test="brandName != null and brandName != '' ">
brand_name like #{brandName}
</when>
<otherwise>
1 = 1;
</otherwise>
</choose>
</where>
</select>
這里的測(cè)試類與前面相同,這里就不再贅述了,大家可以查看前面的文章來寫測(cè)試類,這里我就傳入了一個(gè)status參數(shù)來查詢,即查詢狀態(tài)為1的數(shù)據(jù),結(jié)果如下
[Brand{id=2, brandName=‘華為’, companyName=‘華為技術(shù)有限公司’, ordered=100, description=‘華為致力于把數(shù)字世界帶入每個(gè)人、每個(gè)家庭、每個(gè)組織,構(gòu)建萬(wàn)物互聯(lián)的智能世界’, status=1}, Brand{id=3, brandName=‘小米’, companyName=‘小米科技有限公司’, ordered=50, description=‘a(chǎn)re you ok’, status=1}]
如果沒有任何一個(gè)參數(shù)傳遞進(jìn)去的話,那么執(zhí)行的會(huì)是1 = 1,那結(jié)果應(yīng)該是表格中所有的數(shù)據(jù)
[Brand{id=1, brandName=‘三只松鼠’, companyName=‘三只松鼠股份有限公司’, ordered=5, description=‘好吃不上火’, status=0}, Brand{id=2, brandName=‘華為’, companyName=‘華為技術(shù)有限公司’, ordered=100, description=‘華為致力于把數(shù)字世界帶入每個(gè)人、每個(gè)家庭、每個(gè)組織,構(gòu)建萬(wàn)物互聯(lián)的智能世界’, status=1}, Brand{id=3, brandName=‘小米’, companyName=‘小米科技有限公司’, ordered=50, description=‘a(chǎn)re you ok’, status=1}]文章來源:http://www.zghlxwxcb.cn/news/detail-786085.html
五、結(jié)語(yǔ)
接下來將講述添加功能,有任何問題可以留言評(píng)論文章來源地址http://www.zghlxwxcb.cn/news/detail-786085.html
到了這里,關(guān)于MyBatis案例 | 使用映射配置文件實(shí)現(xiàn)CRUD操作——?jiǎng)討B(tài)SQL優(yōu)化條件查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!