巧妙mybatis避免Where 空條件的尷尬

2022-10-06 02:42:07 字數 1055 閱讀 7063

我就廢話不多說了,大家還是直接看**吧~

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...