1. 程式人生 > >Mybatis中sql語句中的in查詢,一定要判斷null的情況

Mybatis中sql語句中的in查詢,一定要判斷null的情況

不嚴謹的寫法,可能會報錯:in (),這種情況不符合mysql的語法。

    select from loanwhere LOAN_ID in 

<foreach item="item" index="id" collection="list" open="(" separator="," close=")">  

     #{item}  

要麼在Mybatis的sql檔案中,要麼在Java程式中。

sql中的寫法

<select id="findByLoanIds" parameterType="List">

select *

from p2p_loan_variation where 1= 1

<if test="list != null and list.size>0">

and LOAN_ID in

<foreach item="item" index="id" collection="list" open="("

separator="," close=")">

#{item}

</foreach>

</if>

<if test="list==null or list.size==0">and 1=0</if>

</select>

Java中的寫法:

  List<LoanVariation> list = null;

    if(ListUtils.isNotEmpty(loadIds){

      list =loanVariationDao.findByLoanIds(loanIds);

   }

  return list;

如果有多個Java方法呼叫dao mapper,在sql中寫比較省事,畢竟只需要一次“引數檢查”。

上面的寫法是針對一個查詢條件的,如果有多個查詢條件,記得處理條件之間的關係,

比如 a=1 and b =2 or c=3.

如果有in條件,最好加上括號,(a=1) and (b =2 ) or ( c in ...)