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