条件构造器
简介
MP提供了对于持久层的复杂sql的书写方法,其中之一就是利用条件构造器,
解释说明
- 以下出现的第一个入参
boolean condition表示该条件是否加入最后生成的sql中
- 以下代码块内的多个方法均为从上往下补全个别
boolean类型的入参,默认为true
- 以下出现的泛型
Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)
- 以下方法在入参中出现的
R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段id的getMethod)
- 以下方法入参中的
R column均表示数据库字段,当R具体类型为String时则为数据库字段名(字段名是数据库关键字的自己用转义符包裹!)!而不是实体类数据字段名!!!,另当R具体类型为SFunction时项目runtime不支持eclipse自家的编译器!!!
- 以下举例均为使用普通wrapper,入参为
Map和List的均以json形式表现!
- 使用中如果入参的
Map或者List为空,则不会加入最后生成的sql中!!!
继承关系
Wrapper 条件构造抽象类
-- AbstractWrapper 查询条件封装,用于生成 sql 中的 where 语句。
-- QueryWrapper Entity 对象封装操作类,用于查询。
-- UpdateWrapper Update 条件封装操作类,用于更新。
-- AbstractLambdaWrapper 使用 Lambda 表达式封装 wrapper
-- LambdaQueryWrapper 使用 Lambda 语法封装条件,用于查询。
-- LambdaUpdateWrapper 使用 Lambda 语法封装条件,用于更新。
之前MP的EntityWrapper,在3.0版本以上就没了,改为了QueryWrapper。
常用条件
比较大小
| 比较大小 |
解释 |
| eq(R column, Object val) |
= |
| ne(R column, Object val) |
<> 不等于 |
| gt(R column, Object val) |
> 大于 |
| ge(R column, Object val) |
>= 大于等于 |
| lt(R column, Object val) |
< 小于 |
| le(R column, Object val) |
<=小于等于 |
范围
| 范围 |
解释 |
| between(R column, Object val1, Object val2) |
等价于 between a and b |
| nobeween(R column, Object val1, Object val2) |
等价于 not between a and b |
| in(R column, Object... values) |
等价于 字段 IN (v0, v1, ...) |
| notIn(R column, Object... values) |
字段 NOT IN (v0, v1, ...) |
| inSql(R column, Object... values) |
等价于 字段 IN (sql 语句) |
| notInSql(R column, Object... values) |
等价于 字段 NOT IN (sql 语句) |
模糊匹配
| 模糊匹配 |
解释说明 |
| like(R column, Object val) |
LIKE '%值%' |
| notLike(R column, Object val) |
NOT LIKE '%值% |
| likeLeft(R column, Object val) |
LIKE '%值' |
| likeRight(R column, Object val) |
LIKE '值% |
空值比较
| 空值比较 |
解释说明 |
| isNull(R column) |
IS NULL |
| isNotNull(R column) |
IS NOT NULL |
分组排序
| 类型 |
解释说明 |
| groupBy(R... columns) |
GROUP BY 字段 |
| orderByAsc(R... columns) |
ORDER BY 字段 |
| orderByDesc(R... columns) |
ORDER BY 字段 |
| having(String sqlHaving, Object... params) |
HAVING ( sql语句 ) |
拼接
| 类型 |
解释说明 |
| or() |
a or b |
| or(Consumer consumer) |
or(a or/and b) |
| and(Consumer consumer) |
and(a or/and b) |
| nested(Consumer consumer) |
(a or/and b) |
| apply(String applySql, Object... params) |
拼接sql(若不使用 params 参数,可能存在 sql 注入) |
| last(String lastSql) |
无视优化规则直接拼接到 sql 的最后 |
| exists(String existsSql) |
拼接 exists 语句 |
QueryWrapper
public void test(){
//第一步:创建一个querywrapper的对象
QueryWrapper<实体类> queryWrapepr=new QueryWrapper<>();
//第二步:构造查询条件
queryWrapper
.select("id", "name", "age")
.lt("age", 23)//小于23岁
.orderByAsc("id");//升序排序
//执行查询
mapper.selectList(queryWrapper).forEach(System.out::println);
}
UpdateWrapper
方法:
set(String column,Object val)
set(Boolean condition,String column,Object val)
setSql(String sql) //设置部分SQL
测试
public void test(){
int reduceAge=2;
User user=new User();
//创建wrapper
UpdateWrapper<User> updateWrapper=new UpdateWrapper<User>();
//修改数据的语句
updateWrapper.set("email","adadaddadad.com");
updateWrapepr.setSql("age=age-"+reduceAge);、
updateWrapper.eq("id",4);
mapper.update(user,updateWrapper);
}