Mybatis-plus的service通用接口解讀
service接口
通用 Service CRUD 封裝IService (opens new window)接口,進(jìn)一步封裝 CRUD 采用 get 查詢單行 remove 刪除 list 查詢集合 page 分頁 前綴命名方式區(qū)分 Mapper 層避免混淆,
1.Save 插入
參數(shù)說明
類型參數(shù)名描述Tentity實(shí)體對(duì)象CollectionentityList實(shí)體對(duì)象集合intbatchSize插入批次數(shù)量
// 插入一條記錄(選擇字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize); /不存在則插入 否在更新 boolean saveOrUpdate(T entity); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList);
測試:
1.1單個(gè)添加測試
/** ? ? ?* 單個(gè)添加測試 ? ? ?*/ ? ? @Test ? ? public void save(){ ? ? ? ? Department department=new Department(); ? ? ? ? department.setName("牛逼"); ? ? ? ? department.setRemark("xxx"); ? ? ? ? boolean save = departmentService.save(department); ? ? }
1.2 批量添加測試
/** ? ? ?* 批量添加測試 ? ? ?*/ ? ? @Test ? ? public void saveBatch(){ ? ? ? ? Department department1=new Department(); ? ? ? ? department1.setName("牛逼1"); ? ? ? ? department1.setRemark("xxx1"); ? ? ? ? Department department2=new Department(); ? ? ? ? department2.setName("牛逼2"); ? ? ? ? department2.setRemark("xxx2"); ? ? ? ? Department department3=new Department(); ? ? ? ? department3.setName("牛逼3"); ? ? ? ? department3.setRemark("xxx3"); ? boolean b = departmentService.saveBatch(Arrays.asList(department1, department2, department3)); ? ? }
1.3批量添加或者更新
判斷ID是否存在,如果ID不存在執(zhí)行新增,如果ID存在先執(zhí)行查詢語句,查詢結(jié)果為空新增,否則修改
? ? /** ? ? ?* 批量添加或者更新 ? ? ?*/ @Test public? void? saveOrUpdateBatch() { ? ? User user1 = new User();? ? ? user1.setName("兔子");? ? ? user1.setAge(18); ? ? User user2 = new User();? ? ? user2.setId(1088250446457389060L);? ? ? user2.setName("烏龜"); ? ? user2.setAge(18); ? ? ? List<User> users = Arrays.asList(user1, user2); ? ? ? boolean b = userService.saveOrUpdateBatch(users);? ? ? System.out.println(b);}
2.Remove 刪除
// 根據(jù) entity 條件,刪除記錄 boolean remove(Wrapper<T> queryWrapper); // 根據(jù) ID 刪除 boolean removeById(Serializable id); // 根據(jù) columnMap 條件,刪除記錄 boolean removeByMap(Map<String, Object> columnMap); // 刪除(根據(jù)ID 批量刪除) boolean removeByIds(Collection<? extends Serializable> idList);
2.1.通過id刪除
?/** ? ? ?* 通過id刪除 ? ? ?*/ ? ? @Test ? ? public void removeById(){ ? ? ? ? boolean b = departmentService.removeById(9); ? ? }
2.2根據(jù) entity 條件,刪除記錄
@Test ? ? public void test1() { ? ? ? ? User user=new User(); ? ? ? ? user.setAge(5); ? ? ? ? user.setName("貓"); ? ? ? ? QueryWrapper<User> queryWrapper=new QueryWrapper(); ? ? ? ? queryWrapper.setEntity(user); ? ? ? ? boolean count=testService.remove(queryWrapper); ? ? ? ? System.out.println(count); ?//true ? ? }
2.3根據(jù) columnMap 條件,刪除記錄
@Test public void test2() { ? ? HashMap<String, Object> map = new HashMap<>(); ? ? //自定義查詢條件,下面的值全部滿足才能成功 ? ? map.put("name", "狗"); ? ? map.put("age", 5); ? ? boolean b = testService.removeByMap(map); ? ? System.out.println(b); ?// true }
2.4批量刪除
@Test public void test3() { ? List<String> list=new ArrayList(); ? list.add("1495949722160246786"); ? list.add("1495950143763296258"); ? ? boolean b = testService.removeByIds(list); ? ? System.out.println(b); }
3.Update修改
// 根據(jù) whereWrapper 條件,更新記錄 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根據(jù) ID 選擇修改 boolean updateById(T entity); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList);
3.1 根據(jù) ID 選擇修改
?@Test ? ? public void updateById(){ ? ? ? ? Department department=new Department(); ? ? ? ? department.setId(9); ? ? ? ? department.setName("牛逼2"); ? ? ? ? department.setRemark("xxx2"); ? ? ? ? boolean save = departmentService.updateById(department); ? ? ? ? System.out.println(save); ? ? }
3.2通過實(shí)體+UpdateWrapper做修改
@Test public void test4() { ? ? ? ? UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<>(); ? ? ? ? userUpdateWrapper.eq("email","1314@qq.com"); ? ? ? ? ?User user=new User(); ? ? ? ? ?user.setAge(25); ? ? ? ? ? user.setName("李白"); ? ? ? ? testService.update(user,userUpdateWrapper); }
4.Get 查詢一條記錄
// 根據(jù) ID 查詢 T getById(Serializable id); // 根據(jù) Wrapper,查詢一條記錄。結(jié)果集,如果是多個(gè)會(huì)拋出異常,隨機(jī)取一條加上限制條件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根據(jù) Wrapper,查詢一條記錄 Map<String, Object> getMap(Wrapper<T> queryWrapper);
4.1根據(jù)id查詢記錄
根據(jù) 主鍵 ID 返回?cái)?shù)據(jù)
@Test public void test5() { ? ? System.out.println(testService.getById("1495950143763296266")); ? ? //User(id=1495950143763296266, age=25, name=張飛, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:38:22 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022) }
4.2根據(jù) Wrapper,查詢一條記錄
返回一條記錄(實(shí)體類保存)
@Test public void test6() { ? ? ?QueryWrapper queryWrapper=new QueryWrapper(); ? ? ?queryWrapper.eq("name","張飛"); ? ? ?// queryWrapper.last("LIMIT 1") //如果是多個(gè)會(huì)拋出異 常加上限制條件 ? ? ?System.out.println(testService.getOne(queryWrapper)); ? ? ? }
4.3返回一條記錄(map 保存)
@Test public void test7() { ? ? QueryWrapper<User> queryWrapper=new QueryWrapper(); ? ? queryWrapper.ne("age",5) ? ? ? ? ? ? ? ?.eq("email","1314@qq.com"); ? ?Map map=testService.getMap(queryWrapper); ? ? System.out.println(map); }
5.獲取條數(shù)
5.1獲取所有數(shù)據(jù)條數(shù) 也就是條件為null
@Test public void test8() { ? ? System.out.println(testService.count(null)); ?// 21 }
5.2 根據(jù)條件返回記錄數(shù)
@Test public void test9() { ? ? QueryWrapper<User> queryWrapper=new QueryWrapper<>(); ? ? queryWrapper.eq("name","張飛"); ? ? System.out.println(testService.count(queryWrapper)); // ?7 }
6.返回多條記錄
// 查詢所有 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);
6.1無條件查詢所有數(shù)據(jù)
@Test public void test10() { ? ? System.out.println(testService.list(null)); ? }
結(jié)果:
[User(id=1495690228859723778, age=5, name=貓, email=2424496907@qq.com, deleted=0, createTime=null, updateTime=null), User(id=1495933979356090370, age=25, name=貓, email=2424496907@qq.com, deleted=0, createTime=null, updateTime=null), User(id=1495934171253850114, age=25, name=貓飛, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296262, age=38, name=王k松, email=2423435907@qq.com, deleted=0, createTime=Tue Feb 22 13:44:24 CST 2022, updateTime=Tue Feb 22 13:44:24 CST 2022), User(id=1495950143763296263, age=25, name=劉備, email=1314@qq.com, deleted=0, createTime=Tue createTime=Thu Feb 24 14:58:07 CST 2022, updateTime=Thu Feb 24 14:58:07 CST 2022)]
6.2按條件查詢數(shù)據(jù)
@Test public void test11() { ? ? QueryWrapper<User> queryWrapper=new QueryWrapper<User>(); ? ? queryWrapper.eq("name","張飛") ? ? ? ? ? ? ? ?.ge("age",25); ? ? System.out.println(testService.list(queryWrapper)); }
結(jié)果:
[User(id=1495935752888176642, age=32, name=張飛, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495937693445828610, age=39, name=張飛, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296265, age=45, name=張飛, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:33:53 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296266, age=25, name=張飛, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:38:22 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296268, age=50, name=張飛, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:57:17 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296269, age=25, name=張飛, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:59:50 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022)]
6.3 返回為map集合
調(diào)用 BaseMapper 的 selectMaps 方法,查詢所有記錄(返回 map 集合)。
@Test public void test12() { ? ? QueryWrapper<User> queryWrapper=new QueryWrapper<User>(); ? ? queryWrapper.eq("name","張飛") ? ? ? ? ? ? .ge("age",25); ? ? System.out.println(testService.listMaps(queryWrapper)); }
結(jié)果:
[{update_time=2022-04-24T17:06:12, deleted=0, name=張飛, id=1495935752888176642, age=32, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, name=張飛, id=1495937693445828610, age=39, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:33:53, name=張飛, id=1495950143763296265, age=45, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:38:22, name=張飛, id=1495950143763296266, age=25, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:57:17, name=張飛, id=1495950143763296268, age=50, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:59:50, name=張飛, id=1495950143763296269, age=25, email=1314@qq.com}]
get
用于返回一條記錄。list
用于返回多條記錄。count
用于返回記錄總數(shù)。page
用于分頁查詢。
【添加數(shù)據(jù)】
default boolean save(T entity); // 調(diào)用 BaseMapper 的 insert 方法,用于添加一條數(shù)據(jù)。 boolean saveBatch(Collection<T> entityList, int batchSize); // 批量插入數(shù)據(jù)
注:
entityList
表示實(shí)體對(duì)象集合batchSize
表示一次批量插入的數(shù)據(jù)量,默認(rèn)為 1000
【添加或修改數(shù)據(jù):(增或改)】
boolean saveOrUpdate(T entity); // id 若存在,則修改, id 不存在則新增數(shù)據(jù) default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 先根據(jù)條件嘗試更新,然后再執(zhí)行 saveOrUpdate 操作 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize); // 批量插入并修改數(shù)據(jù)
【刪除數(shù)據(jù):(刪)】
default boolean removeById(Serializable id); // 調(diào)用 BaseMapper 的 deleteById 方法,根據(jù) id 刪除數(shù)據(jù)。 default boolean removeByMap(Map<String, Object> columnMap); // 調(diào)用 BaseMapper 的 deleteByMap 方法,根據(jù) map 定義字段的條件刪除 default boolean remove(Wrapper<T> queryWrapper); // 調(diào)用 BaseMapper 的 delete 方法,根據(jù)實(shí)體類定義的 條件刪除對(duì)象。 default boolean removeByIds(Collection<? extends Serializable> idList); // 用 BaseMapper 的 deleteBatchIds 方法, 進(jìn)行批量刪除。
【修改數(shù)據(jù):(改)】
default boolean updateById(T entity); // 調(diào)用 BaseMapper 的 updateById 方法,根據(jù) ID 選擇修改。 default boolean update(T entity, Wrapper<T> updateWrapper); // 調(diào)用 BaseMapper 的 update 方法,根據(jù) updateWrapper 條件修改實(shí)體對(duì)象。 boolean updateBatchById(Collection<T> entityList, int batchSize); // 批量更新數(shù)據(jù)
【查找數(shù)據(jù):(查)】
default T getById(Serializable id); // 調(diào)用 BaseMapper 的 selectById 方法,根據(jù) 主鍵 ID 返回?cái)?shù)據(jù)。 default List<T> listByIds(Collection<? extends Serializable> idList); // 調(diào)用 BaseMapper 的 selectBatchIds 方法,批量查詢數(shù)據(jù)。 default List<T> listByMap(Map<String, Object> columnMap); // 調(diào)用 BaseMapper 的 selectByMap 方法,根據(jù)表字段條件查詢 default T getOne(Wrapper<T> queryWrapper); // 返回一條記錄(實(shí)體類保存)。 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 返回一條記錄(map 保存)。 default int count(Wrapper<T> queryWrapper); // 根據(jù)條件返回 記錄數(shù)。 default List<T> list(); // 返回所有數(shù)據(jù)。 default List<T> list(Wrapper<T> queryWrapper); // 調(diào)用 BaseMapper 的 selectList 方法,查詢所有記錄(返回 entity 集合)。 default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 調(diào)用 BaseMapper 的 selectMaps 方法,查詢所有記錄(返回 map 集合)。 default List<Object> listObjs(); // 返回全部記錄,但只返回第一個(gè)字段的值。 default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper); // 調(diào)用 BaseMapper 的 selectPage 方法,分頁查詢 default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper); // 調(diào)用 BaseMapper 的 selectMapsPage 方法,分頁查詢
【鏈?zhǔn)秸{(diào)用:】
default QueryChainWrapper<T> query(); // 普通鏈?zhǔn)讲樵? default LambdaQueryChainWrapper<T> lambdaQuery(); // 支持 Lambda 表達(dá)式的修改 default UpdateChainWrapper<T> update(); // 普通鏈?zhǔn)叫薷? default LambdaUpdateChainWrapper<T> lambdaUpdate(); // 支持 Lambda 表達(dá)式的修改
注:
query
表示查詢update
表示修改Lambda
表示內(nèi)部支持 Lambda 寫法。
形如:
query().eq("column", value).one(); lambdaQuery().eq(Entity::getId, value).list(); update().eq("column", value).remove(); lambdaUpdate().eq(Entity::getId, value).update(entity);
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Mybatis-plus中IService接口的基本使用步驟
- MyBatis-Plus插件機(jī)制及通用Service新功能
- Mybatis-Plus接口BaseMapper與Services使用詳解
- Mybatis-Plus實(shí)體類注解方法與mapper層和service層的CRUD方法
- 詳解關(guān)于mybatis-plus中Service和Mapper的分析
- mybatis-plus批處理IService的實(shí)現(xiàn)示例
- MyBatis-Plus 通用IService使用詳解
- mybatisplus中返回Vo的案例講解
- mybatis-plus 自定義 Service Vo接口實(shí)現(xiàn)數(shù)據(jù)庫實(shí)體與 vo 對(duì)象轉(zhuǎn)換返回功能
相關(guān)文章
Java基于HttpClient實(shí)現(xiàn)RPC的示例
HttpClient可以實(shí)現(xiàn)使用Java代碼完成標(biāo)準(zhǔn)HTTP請(qǐng)求及響應(yīng)。本文主要介紹了Java基于HttpClient實(shí)現(xiàn)RPC,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼
這篇文章主要介紹了IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Spring中的@ModelAttribute模型屬性綁定詳解
這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數(shù)或返回值綁定到Model屬性上,并公開給Web視圖,支持使用@RequestMapping注釋的Controller類,需要的朋友可以參考下2024-02-02springboot自帶線程池ThreadPoolTaskExecutor使用
本文主要介紹了springboot自帶線程池ThreadPoolTaskExecutor使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Spring Boot 集成 Kafkad的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Boot 集成 Kafkad的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下2021-04-04Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹
xxl-job?通過一個(gè)中心式的調(diào)度平臺(tái),調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會(huì)增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能2023-01-01