Mybatis-Plus?CRUD操作方法
Mybatis-Plus CRUD
通用 Service CRUD 封裝 IService 接口,進(jìn)一步封裝 CRUD 采用 get 查詢、remove 刪除 、list 查詢集合、page 分頁(yè)的前綴命名方式區(qū)分 Mapper 層避免混淆
泛型 T 為任意實(shí)體對(duì)象
如果自定義通用 Service 方法,可以創(chuàng)建自己的 IBaseService 繼承 Mybatis-Plus 提供的基類IService
對(duì)象 Wrapper 為 條件構(gòu)造器
Service CRUD 接口
Save
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| T | entity | 實(shí)體對(duì)象 |
| Collection | entityList | 實(shí)體對(duì)象集合 |
| int | batchSize | 插入批次數(shù)量 |
// 插入一條記錄(選擇字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
SaveOrUpdate
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| T | entity | 實(shí)體對(duì)象 |
| Wrapper | updateWrapper | 實(shí)體對(duì)象封裝操作類 UpdateWrapper |
| Collection | entityList | 實(shí)體對(duì)象集合 |
| int | batchSize | 插入批次數(shù)量 |
// TableId 注解存在更新記錄,是否插入一條記錄 boolean saveOrUpdate(T entity); // 根據(jù)updateWrapper嘗試更新,是否繼續(xù)執(zhí)行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
Remove
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Wrapper | queryWrapper | 實(shí)體包裝類 QueryWrapper |
| Serializable | id | 主鍵 ID |
| Map<String, Object> | columnMap | 表字段 map 對(duì)象 |
| Collection<? extends Serializable> | idList | 主鍵 ID 列表 |
// 根據(jù) UpdateWrapper 條件,更新記錄 需要設(shè)置sqlset boolean update(Wrapper<T> updateWrapper); // 根據(jù) whereWrapper 條件,更新記錄 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根據(jù) ID 選擇修改 boolean updateById(T entity); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
Update
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Wrapper | updateWrapper | 實(shí)體對(duì)象封裝操作類 UpdateWrapper |
| T | entity | 實(shí)體對(duì)象 |
| Collection | entityList | 實(shí)體對(duì)象集合 |
| int | batchSize | 更新批次數(shù)量 |
// 根據(jù) UpdateWrapper 條件,更新記錄 需要設(shè)置sqlset boolean update(Wrapper<T> updateWrapper); // 根據(jù) whereWrapper 條件,更新記錄 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根據(jù) ID 選擇修改 boolean updateById(T entity); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
Get
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Serializable | id | 主鍵 ID |
| Wrapper | queryWrapper | 實(shí)體對(duì)象封裝操作類 QueryWrapper |
| boolean | throwEx | 有多個(gè) result 是否拋出異常 |
| T | entity | 實(shí)體對(duì)象 |
| Function<? super Object, V> | mapper | 轉(zhuǎn)換函數(shù) |
// 根據(jù) ID 查詢
T getById(Serializable id);
// 根據(jù) Wrapper,查詢一條記錄。結(jié)果集,如果是多個(gè)會(huì)拋出異常,隨機(jī)取一條加上限制條件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根據(jù) Wrapper,查詢一條記錄
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根據(jù) Wrapper,查詢一條記錄
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根據(jù) Wrapper,查詢一條記錄
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);List
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Wrapper | queryWrapper | 實(shí)體對(duì)象封裝操作類 QueryWrapper |
| Collection<? extends Serializable> | idList | 主鍵 ID 列表 |
| Map<String, Object> | columnMap | 表字段 map 對(duì)象 |
| Function<? super Object, V> | mapper | 轉(zhuǎn)換函數(shù) |
// 查詢所有 List<T> list(); // 查詢列表 List<T> list(Wrapper<T> queryWrapper); // 查詢(根據(jù)ID 批量查詢) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查詢(根據(jù) columnMap 條件) Collection<T> listByMap(Map<String, Object> columnMap); // 查詢所有列表 List<Map<String, Object>> listMaps(); // 查詢列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查詢?nèi)坑涗? List<Object> listObjs(); // 查詢?nèi)坑涗? <V> List<V> listObjs(Function<? super Object, V> mapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗? List<Object> listObjs(Wrapper<T> queryWrapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗? <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
Page
| IPage | page | 翻頁(yè)對(duì)象 |
|---|---|---|
| Wrapper | queryWrapper | 實(shí)體對(duì)象封裝操作類 QueryWrapper |
// 無(wú)條件分頁(yè)查詢 IPage<T> page(IPage<T> page); // 條件分頁(yè)查詢 IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper); // 無(wú)條件分頁(yè)查詢 IPage<Map<String, Object>> pageMaps(IPage<T> page); // 條件分頁(yè)查詢 IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);
Count
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Wrapper | queryWrapper | 實(shí)體對(duì)象封裝操作類 QueryWrapper |
// 查詢總記錄數(shù) int count(); // 根據(jù) Wrapper 條件,查詢總記錄數(shù) int count(Wrapper<T> queryWrapper);
Chain
query
// 鏈?zhǔn)讲樵?普通
QueryChainWrapper<T> query();
// 鏈?zhǔn)讲樵?lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();
// 示例:
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();update
// 鏈?zhǔn)礁?普通
UpdateChainWrapper<T> update();
// 鏈?zhǔn)礁?lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();
// 示例:
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);Mapper CRUD 接口
通用 CRUD 封裝 BaseMapper 接口,為 Mybatis-Plus 啟動(dòng)時(shí)自動(dòng)解析實(shí)體表關(guān)系映射轉(zhuǎn)換為 Mybatis 內(nèi)部對(duì)象注入容器
泛型 T 為任意實(shí)體對(duì)象
參數(shù) Serializable 為任意類型主鍵 Mybatis-Plus 不推薦使用復(fù)合主鍵,約定每一張表,都有自己的唯一 id 主鍵
對(duì)象 Wrapper 為 條件構(gòu)造器
Insert
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| T | entity | 實(shí)體對(duì)象 |
// 插入一條記錄 int insert(T entity);
Delete
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Wrapper | wrapper | 實(shí)體對(duì)象封裝操作類(可以為 null) |
| Collection<? extends Serializable> | idList | 主鍵 ID 列表(不能為 null 以及 empty) |
| Serializable | id | 主鍵 ID |
| Map<String, Object> | columnMap | 表字段 map 對(duì)象 |
// 根據(jù) entity 條件,刪除記錄 int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 刪除(根據(jù)ID 批量刪除) int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根據(jù) ID 刪除 int deleteById(Serializable id); // 根據(jù) columnMap 條件,刪除記錄 int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
Update
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| T | entity | 實(shí)體對(duì)象 (set 條件值,可為 null) |
| Wrapper | updateWrapper | 實(shí)體對(duì)象封裝操作類(可以為 null,里面的 entity 用于生成 where 語(yǔ)句) |
調(diào)用
updateById方法前,需要在T entity(對(duì)應(yīng)的實(shí)體類)中的主鍵屬性上加上@TableId注解
// 根據(jù) whereWrapper 條件,更新記錄 int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper); // 根據(jù) ID 修改 int updateById(@Param(Constants.ENTITY) T entity);
Select
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| Serializable | id | 主鍵 ID |
| Wrapper | queryWrapper | 實(shí)體對(duì)象封裝操作類(可以為 null) |
| Collection<? extends Serializable> | idList | 主鍵 ID 列表(不能為 null 以及 empty) |
| Map<String, Object> | columnMap | 表字段 map 對(duì)象 |
| IPage | page | 分頁(yè)查詢條件(可以為 RowBounds.DEFAULT) |
// 根據(jù) ID 查詢 T selectById(Serializable id); // 根據(jù) entity 條件,查詢一條記錄 T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查詢(根據(jù)ID 批量查詢) List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根據(jù) entity 條件,查詢?nèi)坑涗? List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查詢(根據(jù) columnMap 條件) List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗? List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗?。注意?只返回第一個(gè)字段的值 List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據(jù) entity 條件,查詢?nèi)坑涗洠ú⒎?yè)) IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗洠ú⒎?yè)) IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據(jù) Wrapper 條件,查詢總記錄數(shù) Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
到此這篇關(guān)于Mybatis-Plus CRUD的文章就介紹到這了,更多相關(guān)Mybatis-Plus CRUD內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MyBatis-Plus的基本CRUD操作大全
- MyBatisPlus如何優(yōu)化千萬(wàn)級(jí)數(shù)據(jù)的CRUD
- MyBatis-Plus通用CRUD操作的實(shí)現(xiàn)
- MyBatis Plus Mapper CRUD接口測(cè)試方式
- MyBatisPlus中CRUD使用方法詳解
- MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用詳解
- mybatisplus?復(fù)合主鍵(多主鍵)?CRUD示例詳解
- MyBatis-Plus使用ActiveRecord(AR)實(shí)現(xiàn)CRUD
- MyBatis-Plus 實(shí)現(xiàn)單表 CRUD的示例代碼
相關(guān)文章
java如何實(shí)現(xiàn)自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔
以前我們還需要手寫數(shù)據(jù)庫(kù)設(shè)計(jì)文檔、現(xiàn)在可以通過引入screw核心包來(lái)實(shí)現(xiàn)Java?數(shù)據(jù)庫(kù)文檔一鍵生成。本文將具體介紹一下如何通過java自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔,需要的朋友可以參考下2021-11-11
SpringMVC加載控制與Postmand的使用和Rest風(fēng)格的引入及RestFul開發(fā)全面詳解
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開發(fā)2022-10-10
詳解Spring事件發(fā)布與監(jiān)聽機(jī)制
Spring提供了ApplicationContext事件機(jī)制,可以發(fā)布和監(jiān)聽事件,這個(gè)特性非常有用。Spring內(nèi)置了一些事件和監(jiān)聽器,例如在Spring容器啟動(dòng)前,Spring容器啟動(dòng)后,應(yīng)用啟動(dòng)失敗后等事件發(fā)生后,監(jiān)聽在這些事件上的監(jiān)聽器會(huì)做出相應(yīng)的響應(yīng)處理2021-06-06
如何將SpringBoot項(xiàng)目打成?war?包并部署到Tomcat
這篇文章主要介紹了如何將SpringBoot項(xiàng)目?打成?war?包?并?部署到?Tomcat,當(dāng)前環(huán)境是windows,tomcat版本是8.5采用的springboot版本是2.2.3,本文結(jié)合實(shí)例代碼給大家詳細(xì)講解需要的朋友可以參考下2022-11-11
JDK20?+?SpringBoot?3.1.0?+?JdbcTemplate?使用案例詳解
通過 JdbcTemplate 直接執(zhí)行 SQL 語(yǔ)句,結(jié)合源碼動(dòng)態(tài)編譯即可方便實(shí)現(xiàn)動(dòng)態(tài)修改代碼邏輯的效果,這篇文章主要介紹了JDK20?+?SpringBoot?3.1.0?+?JdbcTemplate?使用,需要的朋友可以參考下2023-09-09
java多線程編程之從線程返回?cái)?shù)據(jù)的兩種方法
從線程中返回?cái)?shù)據(jù)和向線程傳遞數(shù)據(jù)類似。也可以通過類成員以及回調(diào)函數(shù)來(lái)返回?cái)?shù)據(jù)。但類成員在返回?cái)?shù)據(jù)和傳遞數(shù)據(jù)時(shí)有一些區(qū)別,下面讓我們來(lái)看看它們區(qū)別在哪2014-01-01
mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的操作方法
這篇文章主要介紹了mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的實(shí)現(xiàn)方法,本文給大家分享兩種方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
Java實(shí)現(xiàn)復(fù)原IP地址的方法
這篇文章主要介紹了Java實(shí)現(xiàn)復(fù)原IP地址的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
淺談Java內(nèi)部類與靜態(tài)內(nèi)部類的區(qū)別
本文主要介紹了淺談Java內(nèi)部類與靜態(tài)內(nèi)部類的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

