Mybatis Plus 更新

一、根据id更新

@Test
public void updateById() {
    User user = new User();
    user.setId(1088248166370832385L);
    user.setAge(26);
    user.setEmail("wtf2@baomidou.com");
    int rows = userMapper.updateById(user);
    System.out.println("影响记录数:" + rows);
}

控制台输出:

DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE id=? 
DEBUG==> Parameters: 26(Integer), wtf2@baomidou.com(String), 1088248166370832385(Long)
DEBUG<==    Updates: 1
影响记录数:1

二、以条件构造器作为参数的更新方法

@Test
public void updateByWrapper() {
    UpdateWrapper wrapper = new UpdateWrapper();
    wrapper.eq("name", "李艺伟");
    wrapper.eq("age", "28");
    User user = new User();
    user.setEmail("lyw2021@baomidou.com");
    user.setAge(29);
    int rows = userMapper.update(user, wrapper);
    System.out.println("影响记录数:" + rows);
}

控制台输出:

DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE name = ? AND age = ? 
DEBUG==> Parameters: 29(Integer), lyw2021@baomidou.com(String), 李艺伟(String), 28(String)
DEBUG<==    Updates: 1
影响记录数:1

UpdateWrapper 还有重载方法,传入实体对象,实体对象不为空的属性当作条件

@Test
public void updateByWrapper2() {
    User whereUser = new User();
    whereUser.setName("李艺伟");

    UpdateWrapper wrapper = new UpdateWrapper(whereUser);
    wrapper.eq("name", "李艺伟");
    wrapper.eq("age", "28");
    User user = new User();
    user.setEmail("lyw2021@baomidou.com");
    user.setAge(29);
    int rows = userMapper.update(user, wrapper);
    System.out.println("影响记录数:" + rows);
}

控制台输出:实体对象会和 wrapper.eq 设置的条件合并

DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE name=? AND age=? AND name = ? AND age = ? 
DEBUG==> Parameters: 29(Integer), lyw2021@baomidou.com(String), 李艺伟(String), 0(Integer), 李艺伟(String), 28(String)
DEBUG<==    Updates: 0
影响记录数:0

注意这里 age 条件出现了两次,这不是bug这是因为定义属性类型的方式有区别

  • private int age:age默认是0,也就是不为空
  • private Integer age:age默认是null

三、条件构造器中set方法使用

我们也不必创建对象来设置语句的set所需的值,UpdateWrapper 提供了 set() 方法

@Test
public void updateByWrapper3() {
    UpdateWrapper wrapper = new UpdateWrapper();
    wrapper.eq("name", "李艺伟");
    wrapper.eq("age", 29);
    wrapper.set("age", 30);
    
    int rows = userMapper.update(null, wrapper);
    System.out.println("影响记录数:" + rows);
}

LambdaWrapper

@Test
public void updateByWrapperLambda() {
    LambdaUpdateWrapper<User> wrapper = Wrappers.lambdaUpdate();
    wrapper.eq(User::getName, "李艺伟").eq(User::getAge, 30)
            .set(User::getAge, 30);
    int rows = userMapper.update(null, wrapper);
    System.out.println("影响记录数:" + rows);
}

LambdaUpdateChainWrapper

@Test
public void updateByWrapperLambdaChain() {
    boolean flag = new LambdaUpdateChainWrapper<>(userMapper).eq(User::getName, "李艺伟").eq(User::getAge, 30)
            .set(User::getAge, 30).update();
    System.out.println("是否修改成功:" + flag);
}

 

posted @ 2021-01-21 10:44  认真对待世界的小白  阅读(937)  评论(0编辑  收藏  举报