mybatis-plus中多条件查询使用and合or嵌套使用
背景
在实际项目中,数据库条件查询经常需有一些复杂的查询条件的SQL语句,将这些SQL语句用mybatis-plus 组件的实现的时候经常会费一些时间,下面对几种常见的SQL语句实现做个介绍以方便以后遇到时少走弯路提高开发效率。
案例
@Data
public class User{ private Integer id; private String name; private Integer age; private DateTime updateTime; private Integer deleted; private String status; }
示例代码
例1: wrapper.like("name", "BNTang").or().between("age", 20, 30)
NAME LIKE '%BNTang%' OR age BETWEEN 20 AND 30
例2: wrapper.and(wrapper->wrapper.eq("SEND_USER_ID","001").eq("RECEIVE_USER_ID","002"))
AND ((SEND USER ID = “001” AND RECEIVE USER ID = “002”) OR (SEND USER ID =“003” AND RECEIVE USER ID = “004”))
例3: wrapper.eq("name", "wangsf").nested(w->w.and(wp->wp.in("contract_mode", (Object[]) "5,6".split(",")).ge("actual_completion_time", now.minusYears(2).format(fmt) + " 23:59:59")).or(wp->wp.notIn("contract_mode", (Object[]) "5,6".split(",")).ge("actual_completion_time", now.minusYears(5).format(fmt) + " 23:59:59")))
name = ? AND ((contract_mode IN (?,?) AND actual_completion_time BETWEEN ? AND ?) OR (contract_mode NOT IN (?,?) AND actual_completion_time BETWEEN ? AND ?))