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