所有分类
  • 所有分类
  • 未分类

MyBatis-Plus–Wrapper的使用

简介

本文介绍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();

可用的更新

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录