我就廢話不多說了,大家還是直接看**吧~
select * from blog
where
state = #
如果state引數為空時,程式設計客棧最終生成sql語句為
select * from blog
where
執行會出錯,當然,你可以在where 後加乙個1=1,改成
select * from blog
where 1=1
and state = #
但是這個做法不太「環保」(畢竟引入了乙個垃圾條件),其實只要改成...即可
select * from blog
and state = #
cgwycoeluc
補充知識:mybatis @select註解中當引數為空則不新增該引數的判斷
如下所示:
@select("select * from "+depttable+" ")
list selectalldept();
在mybatis中不用xml檔案的形式,selectdept方法執行的就是上面的sql語句,如果是遇到動態的語句就需要用到下面的形式。
1.用provider去實現sql拼接:
@selectprovider(type=deptdynasqlprovider.class,method="count")
integer count(map程式設計客棧, object> params);
類中的方法
public string count(map params),'%') ");}}}}.tostring();}
2.還有一種方式是用script標籤包圍,像xml語法一樣書寫
@select()
注意:方式1有個隱患就是當傳入引數為空的時候,可能會造成全表查詢。
複雜sql用方式2會比較靈活(當然,並不建議寫複雜sql),而且可以抽象成通用的基類,使每個dao都可以通過這個基類實現基本的通用查詢,原理類似spring jdbc template。
本文標題: 巧妙mybatis避免where 空條件的尷尬
本文位址:
where 條件為空時不走where條件
mysql 若想當where 條件為空時不走where條件,where可以整個為空,但裡面的如where is status sta tus 的 status 的 status 的status不能為空,不然會查詢出status為空的資料,記錄一下。where sta demandstatus if ...
MyBatis 數值型別 where 條件配置的坑
select id listbyconditions parametertype studentquery resultmap baseresultmap select include refid base column list from t student where if test ids n...
避免把判斷處理放入 WHERE 條件
業務需求如下 有表a 在查詢的時候,需要根據標誌確定是查詢大於某個值的記錄,還是小於某個值的記錄 if a 0 select trannumber from a where trannumber 10000 else if a 1 select trannumber from a where tra...