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,感覺可讀性強,也不是很麻煩


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM