MP学习-条件构造器

条件构造器

简介

MP提供了对于持久层的复杂sql的书写方法,其中之一就是利用条件构造器,

解释说明

  • 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中
  • 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true
  • 以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)
  • 以下方法在入参中出现的R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段idgetMethod)
  • 以下方法入参中的R column均表示数据库字段,当R具体类型为String时则为数据库字段名(字段名是数据库关键字的自己用转义符包裹!)!而不是实体类数据字段名!!!,另当R具体类型为SFunction时项目runtime不支持eclipse自家的编译器!!!
  • 以下举例均为使用普通wrapper,入参为MapList的均以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);
}
posted @ 2020-09-06 17:46  且I听  阅读(518)  评论(0)    收藏  举报