MybatisPlus是Mybatis的增強工具,它在Mybatis的基礎上添加了很多有用的功能,包括快速CRUD操作。其中,update操作也是非常常見的一個操作,而MybatisPlus提供的update方法也有很多種用法,本篇文章將從不同角度對其中的update方法進行詳解。
一、MybatisPlusUpdateById
updateById是MybatisPlus對單表更新數據的操作,其基本語法如下:
int updateById(T entity);
其中,T代表實體類,entity代表要更新的對象。這個方法會根據對象的id,自動匹配出要更新的行,然後更新對應的數據。下面是一個示例:
@Autowired
private UserMapper userMapper;
public void updateUserById(User user) {
userMapper.updateById(user);
}
上面的代碼中,我們通過自動注入的UserMapper,調用updateById方法更新User對象。
二、MybatisPlusUpdate多參無效
當我們要更新多個字段時,可以使用以下兩種方法。第一種方法是在實體類中,通過get和set方法來一個一個地設置更新的值,這種方法比較麻煩。第二種方法是使用多參的update方法,但需要注意的是,MybatisPlus的多參update方法只能更新一個字段,不能更新多個字段,否則會拋出異常。以下是一個錯誤示例:
@Autowired
private UserMapper userMapper;
public void updateUserByIdAndName(String id, String name) {
userMapper.update(null,
new UpdateWrapper<User>().eq("id", id).set("name", name));
}
上面的代碼中,我們嘗試更新用戶id和name,但是會拋出異常。如果我們要更新多個字段,可以使用下面即將介紹的update方法。
三、MybatisPlusUpdateWrapper
如果我們要在更新時使用條件,可以使用MybatisPlus提供的UpdateWrapper來進行更新。UpdateWrapper可以實現條件構造,可以使用類似SQL的語法來構造查詢和更新條件,以下是一個示例:
@Autowired
private UserMapper userMapper;
public void updateUserByNameAndAge(String name, Integer age) {
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", name).set("age", age);
userMapper.update(null, wrapper);
}
上面的代碼中,我們使用UpdateWrapper來構造查詢條件,然後使用set方法來設置要更新的值,最後通過update方法進行更新。
四、MybatisPlusUpdate為null不set
如果我們在更新時不希望把null值設置到數據庫中,可以使用以下代碼來設置:
@Autowired
private UserMapper userMapper;
public void updateUser(User user) {
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("id", user.getId());
if (user.getName() != null) {
wrapper.set("name", user.getName());
}
if (user.getAge() != null) {
wrapper.set("age", user.getAge());
}
userMapper.update(null, wrapper);
}
上面的代碼中,我們使用UpdateWrapper來構造查詢條件,然後在set方法之前判斷字段值是否為null,如果不是null,則調用set方法進行更新。
五、MybatisPlusUpdateWrapper的用法
在使用UpdateWrapper時,我們還可以使用很多其他的方法來構造查詢條件,以下是一些常用的方法:
- eq:等於,相當於SQL中的=
- ne:不等於,相當於SQL中的!=
- gt:大於,相當於SQL中的>
- ge:大於等於,相當於SQL中的>=
- lt:小於,相當於SQL中的<
- le:小於等於,相當於SQL中的<=
- like:模糊查詢,相當於SQL中的like
- in:IN查詢,相當於SQL中的in
以下是一個示例:
@Autowired
private UserMapper userMapper;
public void updateUserByWrapper(String name, String address) {
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", name).like("address", address);
wrapper.set("age", 18);
userMapper.update(null, wrapper);
}
上面的代碼中,我們使用UpdateWrapper來構造查詢條件,包括名字和地址的值,然後使用set方法來更新年齡字段的值為18。
總結
本文針對MybatisPlus的update方法,從updateById、多參無效、UpdateWrapper、為null不set和UpdateWrapper的用法5個方面進行了詳細的闡述。通過本文的講解,相信讀者已經對MybatisPlus的update方法有了更深入的理解,能夠更好地在項目中使用。
原創文章,作者:KQPX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144465.html