1. 程式人生 > 其它 >mybatis-plus中and()和or()連用,格式為A and( B or C)

mybatis-plus中and()和or()連用,格式為A and( B or C)

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。它提供了QueryWrapper自定義查詢物件,可以無需手寫sql,進行條件查詢。在其中的and()和or()方法,可以進行條件的連線,寫幾個例子介紹一下使用方式;
1.and()方法
當只想進行簡單的條件連結時,只需將查詢條件直接連寫即可,拼裝後的sql就是用and連線的

//程式碼
 List<VisitActHandleLog> list = visitActHandleLogService.list(
                new
QueryWrapper<VisitActHandleLog>() .eq("from_app_type", "wx") .eq("zf_code", "M106944") );
//sql條件部分
WHERE
    ( from_app_type = ? AND zf_code = ? )

2.or()方法
條件之間需要用or進行連線,需要呼叫or()方法,拼裝的sql條件就可用or連線

//程式碼
 List<VisitActHandleLog> list = visitActHandleLogService.list(
                
new QueryWrapper<VisitActHandleLog>() .eq("from_app_type", "wx") .or() .eq("zf_code", "M106944") );
//sql條件部分
WHERE
     (from_app_type = ? OR zf_code = ?) 

3.and()和or()連用
在許多查詢中可能會用到(A or B)and (C or D)或者 (A and B) or (C and D)這種形式的查詢,簡單的將and()和or()進行連線,無法在條件上拼接(),變成A or B and C or D這種,無法實現功能,需要在程式碼中呼叫or(Consumer consumer)和and(Consumer consumer)這兩個方法實現

//程式碼
List<VisitActHandleLog> list = visitActHandleLogService.list(
                new QueryWrapper<VisitActHandleLog>()
                .eq("from_app_type", "wx")
                .or(qw->qw.eq("zf_code", "M106944").eq("channel","test"))
        );
//sql條件部分
WHERE
    ( from_app_type = ? OR ( ( zf_code = ? AND channel = ? ) ) )

這樣就可以在or的後面拼接(),實現功能,and()也是如此

.and(qw->qw.eq("zf_code", "M106944").eq("channel","test"))

例2:

sql如下:

and appkey = ? and (contact_mail like ? or user_name like ?)

如果拼接條件複雜,其實可以直接在xml中手寫sql,感覺可讀性強,也不是很麻煩