一、根据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); }