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()函数