MyBatis-plus提供的通用Mapper中,删改查(没有insert)的方法通常会需要我们传入一个条件构造器,用来生成最后执行的SQL语句
- Wrapper : 条件构造父类。
- AbstractWrapper :QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。
- AbstractLambdaWrapper :Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
- LambdaQueryWrapper :Lambda形式的查询Wrapper。
- LambdaUpdateWrapper :Lambda 形式的更新Wrapper。
- QueryWrapper :继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取。 - UpdateWrapper : 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取。
常用sql拼接方法
QueryWrapper(查询条件构造器)
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取
示例
//查询第一条纪律
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "lld");
User user = mapper.selectOne(queryWrapper);
//查询总记录数
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "lld");
Integer count = mapper.selectCount(queryWrapper);
//查询所有记录:返回实体列表 List<user>
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "lld");
List<User> list=mapper.selectList(queryWrapper );
//查询所有记录:返回map列表 List<Map<String,Object>>
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "lld");
List<User> list=mapper.selectMaps(queryWrapper);
//查询所有记录并翻页:返回Ipage<entity>
Page<User> page = new Page<>(1, 5);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
IPage<User> userIPage = mapper.selectPage(page, queryWrapper);
//查询所有记录并翻页:返回Ipage<Map<String, Object>>
Page<User> page = new Page<>(1, 5);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
IPage<Map<String, Object>> mapIPage = mapper.selectMapsPage(page, queryWrapper);
//查询所有记录:lambda
LambdaQueryWrapper<User> lambdaQuery=Wrappers.<User>lambdaQuery();
lambdaQuery.likeRight(User::getName,"杨")
.and(lqw->lqw.lt(User::getAge,40).or().isNostNull(User::getEmail));
List<User> userList=userMapper.selectList(lambdaQuery);
userList.forEach(System.out::println)
//查询所有记录:chain
List<User> userList=new LambdaQueryChainWrapper<User>(userMapper)
.like(User::getName,"杨").ge(User::getAge,20).list();
UpdateWrapper(更新条件构造器)
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!
示例
//形式一:wrapper
UpdateWrapper<User> updateWrapper=new UpdateWrapper<User>();
updateWrapper.eq("id",1);
User user=new User()
user.setName("张三");
int result=baseMapper.update(user,updateWrapper);
//形式二:whereWrapper
User whereUser=new User();
whereUser.setId(1);
UpdateWrapper<User> updateWrapper=new UpdateWrapper<User>(whereUser);
User user=new User()
user.setName("张三");
int result=baseMapper.update(user,updateWrapper);
//形式三:lambda
LambdaUpdateWrapper<User> lambdaUpdateWrapper=Wrappers.<User>lambdaUpdate();
lambdaUpdateWrapper.eq(User::getId,1).set(User::getName,"张三");
int result=baseMapper.update(null,lambdaUpdateWrapper);
//形式四:链式
boolean update=new LambdaUpdateChainWrapper<User>(userMapper)
.eq(User::getId,1).set(User::getName,"张三").update();
使用 Wrapper 自定义SQL
需要mybatis-plus版本 >= 3.0.7 param 参数名要么叫ew,要么加上注解@Param(Constants.WRAPPER) 使用$ 不支持 Wrapper 内的entity生成where语句
用注解
@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);
用XML
List<MysqlData> getAll(Wrapper ew);
<select id="getAll" resultType="MysqlData">
SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>