mybatis-plus中and()和or()連用,格式為A and( B or C)
阿新 • • 發佈:2021-06-18
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。它提供了QueryWrapper自定義查詢物件,可以無需手寫sql,進行條件查詢。在其中的and()和or()方法,可以進行條件的連線,寫幾個例子介紹一下使用方式;
1.and()方法
當只想進行簡單的條件連結時,只需將查詢條件直接連寫即可,拼裝後的sql就是用and連線的
//程式碼 List<VisitActHandleLog> list = visitActHandleLogService.list( newQueryWrapper<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,感覺可讀性強,也不是很麻煩