最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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中ArrayList的removeAll方法詳解

    Java中ArrayList的removeAll方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList的removeAll方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來看看吧。
    2017-07-07
  • mybatis批量插入時(shí),有字段可能為null會(huì)報(bào)錯(cuò)問題

    mybatis批量插入時(shí),有字段可能為null會(huì)報(bào)錯(cuò)問題

    這篇文章主要介紹了mybatis批量插入時(shí),有字段可能為null會(huì)報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 淺談如何優(yōu)雅地停止Spring Boot應(yīng)用

    淺談如何優(yōu)雅地停止Spring Boot應(yīng)用

    這篇文章主要介紹了淺談如何優(yōu)雅地停止Spring Boot應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java屬性嵌套獲取值的實(shí)現(xiàn)方式

    Java屬性嵌套獲取值的實(shí)現(xiàn)方式

    本文介紹了如何使用MybatisMetaObject類和FieldUtil工具類來簡化Java類嵌套獲取屬性值的過程,通過這種方式,可以避免逐層檢查和判空操作,直接從實(shí)例對(duì)象中獲取深層嵌套的屬性值,并且在任意一層為空時(shí)自動(dòng)返回null,不會(huì)報(bào)錯(cuò)
    2025-11-11
  • Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作示例

    Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作,結(jié)合實(shí)例形式詳細(xì)分析了spring使用注解實(shí)現(xiàn)聲明式事務(wù)相關(guān)配置、接口實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2020-01-01
  • springboot實(shí)現(xiàn)excel表格導(dǎo)出幾種常見方法

    springboot實(shí)現(xiàn)excel表格導(dǎo)出幾種常見方法

    在日常的開發(fā)中避免不了操作Excel,下面這篇文章主要給大家介紹了關(guān)于springboot實(shí)現(xiàn)excel表格導(dǎo)出的幾種常見方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名

    Java操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名

    這篇文章主要為大家詳細(xì)介紹了Java如何操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名等功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-01-01
  • idea的easyCode的 MybatisPlus模板的配置詳解

    idea的easyCode的 MybatisPlus模板的配置詳解

    這篇文章主要介紹了idea的easyCode的 MybatisPlus模板的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中的@interface注解使用詳解

    Java中的@interface注解使用詳解

    這篇文章主要介紹了Java中的@interface注解使用詳解,注解@interface不是接口是注解類,在jdk1.5之后加入的功能,使用@interface自定義注解時(shí),自動(dòng)繼承了java.lang.annotation.Annotation接口,需要的朋友可以參考下
    2023-12-12
  • maven之packaging標(biāo)簽的使用

    maven之packaging標(biāo)簽的使用

    這篇文章主要介紹了maven之packaging標(biāo)簽的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

秭归县| 佳木斯市| 兴安县| 大同县| 叶城县| 宣武区| 忻城县| 津市市| 泽州县| 镇沅| 宕昌县| 会泽县| 沾化县| 平顶山市| 石台县| 文山县| 出国| 田东县| 启东市| 昭苏县| 云阳县| 财经| 苍南县| 湘潭县| 芷江| 九江市| 尉犁县| 广德县| 益阳市| 南木林县| 礼泉县| 洛浦县| 遵化市| 武邑县| 雅安市| 晴隆县| 西安市| 堆龙德庆县| 玉溪市| 岗巴县| 平果县|