wrapper条件构造器

mybatis-plus简化sql语句

在mybatis-plus中,我们让mapper层继承了BaseMapper这个接口,极大程度上让开发者少写许多sql语句,直接调用封装好的方法就能使用.

只要告诉在那张表

@TableName("表名")

表里的主键是哪个

@TableId(type= IdType.AUTO)

大部分的sql语句在之后都不用亲自写了!!!

 

但是有一些传入的条件参差不齐,需要一个一个来设置条件.

举例:分页查询

在之前,我们会根据表中的字段来设置条件,会写下面这一段字符串来拼接sql语句

 //拼接条件
    private  void  appedSql(StringBuffer sql, UserCondition userCondition,List<Object> paramList){
        if(userCondition != null){
            if(userCondition.getName() != null && !userCondition.getName().isEmpty() ){
                sql.append("  AND name like ? ");
                paramList.add("%"+userCondition.getName()+"%");
            }if(userCondition.getStartAge() != null  ){
                sql.append(" AND  age >= ? ");
                paramList.add(userCondition.getStartAge());
            }
            if(userCondition.getEndAge() != null  ){
                sql.append(" AND  age <= ? ");
                paramList.add(userCondition.getEndAge());
            }
        }
    }

 这样会出现一个缺点:由于sql语句是string类型的字符串,会出现拼错单词,且字符串不报错的情况

解决:引入LambdaQueryWrapper条件构造器,它最大的作用就是字段检查.

Wrapper条件构造器

字面来理解,就是定义各种各样的条件,相当于sql语句中的(where).

wrapper条件构造器是一个接口,是一个顶级父类,它下面有各种实现类,今天重点介绍LambdaQueryWrapper和LambdaUpdateWrapper

LambdaQueryWrapper

作用:

1.字段检查,防止字段写错

2.防止传入的数据为null作为条件

它的书写方式如下:

1.引入对象

2.调用函数

LambdaQueryWrapper给我们提供了多种函数,函数中第一个值使用lambda表达式,想要哪个字段,通过访问对应实体类的属性就能获得(前提:保证字段名与属性名一样,要是不一样,在属性名上使用@TableFiled("字段")注解);

第二个值是传入的参数.下面代码中把传入的条件封装成一个类;(要是多条件传入,推荐封装成一个vo类)

  LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        if(!StringUtils.isEmpty(userVO.getName())){
            queryWrapper.like(User::getName,userVO.getName());
        }
        if(userVO.getStartAge()!=null){
            queryWrapper.ge(User::getAge,userVO.getStartAge());
        }
        if(userVO.getEndAge()!=null){
            queryWrapper.le(User::getAge,userVO.getEndAge());
        }
        userMapper.selectPage(page,queryWrapper);
        return page;

大致给我们提供以下函数

 

LambdaUpdateWrapper

作用及用法与LambdaQueryWrapper相似,它是条件更新构造器,通常使用set()函数

posted @ 2023-01-13 21:41  Tmillion  阅读(211)  评论(0编辑  收藏  举报