欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus的service通用接口解讀

 更新時(shí)間:2023年07月14日 15:15:53   作者:Sunny_yaa  
這篇文章主要介紹了Mybatis-plus的service通用接口解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java NIO深入分析

    Java NIO深入分析

    本篇技術(shù)文章主要對(duì)Java新api(New IO)做了詳細(xì)深入的講解,有助于程序?qū)IO有更加深入的理解。
    2017-12-12
  • Java異常處理深入理解

    Java異常處理深入理解

    這篇文章主要介紹了java項(xiàng)目常用異常處理匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java基于HttpClient實(shí)現(xiàn)RPC的示例

    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-10
  • IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    這篇文章主要介紹了IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring中的@ModelAttribute模型屬性綁定詳解

    Spring中的@ModelAttribute模型屬性綁定詳解

    這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數(shù)或返回值綁定到Model屬性上,并公開給Web視圖,支持使用@RequestMapping注釋的Controller類,需要的朋友可以參考下
    2024-02-02
  • springboot自帶線程池ThreadPoolTaskExecutor使用

    springboot自帶線程池ThreadPoolTaskExecutor使用

    本文主要介紹了springboot自帶線程池ThreadPoolTaskExecutor使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java中List移除元素的四種方式

    java中List移除元素的四種方式

    本文主要介紹了java中List移除元素的四種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Java中Stream?API的使用示例詳解

    Java中Stream?API的使用示例詳解

    Java?在?Java?8?中提供了一個(gè)新的附加包,稱為?java.util.stream,該包由類、接口和枚舉組成,允許對(duì)元素進(jìn)行函數(shù)式操作,?本文主要介紹了Java中Stream?API的具體使用,感興趣的小伙伴可以了解下
    2023-11-11
  • Spring Boot 集成 Kafkad的實(shí)現(xiàn)示例

    Spring Boot 集成 Kafkad的實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring Boot 集成 Kafkad的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下
    2021-04-04
  • Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹

    Java?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

最新評(píng)論