简介
本文介绍MyBatisPlus的条件构造器Wrapper的用法(有示例)。
本文内容包括:条件大全;Wrapper类的关系;Wrapper的用法:QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper、UpdateWrapper、LambdaUpdateWrapper、LambdaUpdateChainWrapper。
条件构造器
见:Mybatis-Plus-条件构造器的用法 – 自学精灵
Wrapper类的关系
介绍
上图绿色框为抽象类abstract
蓝色框为正常class类,可new对象
黄色箭头指向为父子类关系,箭头指向为父类
wapper介绍
Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
QueryWrapper
见:Mybatis-Plus-QueryWrapper-使用/实例 – 自学精灵
LambdaQueryWrapper
见:Mybatis-Plus-LambdaQueryWrapper-使用/实例 – 自学精灵
LambdaQueryChainWrapper
见:MyBatis-Plus-LambdaQueryChainWrapper的使用 – 自学精灵
UpdateWrapper
根据 Entity 条件,更新记录
entity 实体对象 (set 条件值,不能为 null)
updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
public void update() { //修改值 User user = new User(); user.setStatus(true); user.setName("zhangsan"); //修改条件 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper.eq("name", "lqf"); userUpdateWrapper.eq("email", "123@qq.com"); int update = userMapper.update(user, userUpdateWrapper); System.out.println(update); }
打印结果 ==> Preparing: UPDATE user SET name=?, status=? WHERE name = ? ==> Parameters: zhangsan(String), true(Boolean), lqf(String) <== Updates: 100 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@56a4f272] 100 2018-10-02 15:08:03.928 INFO 7972 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@37313c65: startup date [Tue Oct 02 15:08:00 CST 2018]; root of context hierarchy 2018-10-02 15:08:03.937 INFO 7972 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2018-10-02 15:08:04.053 INFO 7972 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. Process finished with exit code 0
不构造实体对象
假设只更新一个字段,使用updateWrapper 的构造器时也需构造一个实体对象,这样比较麻烦。可用updateWrapper的set
方法
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("name","shimin").set("age", 35); Integer rows = userMapper.update(null, updateWrapper);
LambdaUpdateWrapper
简介
数据更新相关的构造器(UpdateWrapper、LambdaUpdateWrapper、LambdaUpdateChainWrapper)使用方法类似于查询构造器(QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper),不同的是它增加了如下两个方法:
- set:设置数据库字段值
- setSql:设置 set 部分的 sql
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(User::getName, "shimin") .set(User::getAge, 34); Integer rows = userMapper.update(null, lambdaUpdateWrapper);
LambdaUpdateChainWrapper
简介
- 本Wrapper只可更新数据。
- 典型用法是自定义Service并继承ServiceImpl,实现IService,然后自定义service实例直接用lambdaUpdate方法取得
- 所在包为:com.baomidou.mybatisplus.extension.conditions.update
(另一个包已标记为deprecated:com.baomidou.mybatisplus.extension.service.additional.update.impl)
更新数据:
LambdaUpdateChainWrapper<User> lambdaUpdateChainWrapper = new LambdaUpdateChainWrapper<>(userMapper); boolean update = lambdaUpdateChainWrapper .eq(User::getName, "Iron Man") .set(User::getAge, 20) .update();
可用的更新
请先
!