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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM