亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MybatisPlus IService接口功能介紹

 更新時(shí)間:2024年09月22日 09:41:25   作者:游王子og  
MybatisPlus中的IService接口為開(kāi)發(fā)者提供了一系列基礎(chǔ)數(shù)據(jù)庫(kù)操作方法,如增刪改查等,通過(guò)泛型支持不同類型的實(shí)體和主鍵,IService的默認(rèn)實(shí)現(xiàn)類為ServiceImpl,它實(shí)現(xiàn)了接口中的基本方法,用戶可通過(guò)繼承ServiceImpl來(lái)擴(kuò)展自定義的業(yè)務(wù)邏輯

一、介紹

在MybatisPlus框架中,IService接口扮演著重要的角色。

作為一個(gè)通用的服務(wù)接口,IService定義了一系列方法,包括查詢、插入、更新、刪除等。

這些方法的定義使得在服務(wù)層進(jìn)行數(shù)據(jù)庫(kù)操作變得更為便捷和高效。

  • IService 接口是一個(gè)泛型接口,定義了一組通用的基礎(chǔ)方法,包括常見(jiàn)的增刪改查操作。
  • 例如,它提供了插入數(shù)據(jù)、根據(jù)主鍵更新數(shù)據(jù)、根據(jù)主鍵刪除數(shù)據(jù)、根據(jù)主鍵查詢數(shù)據(jù)等方法的簽名。
  • 用戶可以根據(jù)自己的需求和業(yè)務(wù)邏輯在自定義的服務(wù)接口中繼承 IService 接口,并實(shí)現(xiàn)其中的方法。

用法:

 public interface UserService extends IService<User> {}
  • ServiceImpl 類是 IService 接口的默認(rèn)實(shí)現(xiàn)類,提供了基本的增刪改查操作的實(shí)現(xiàn)細(xì)節(jié)。
  • 它使用了泛型參數(shù)來(lái)規(guī)范實(shí)體類和主鍵類型,并實(shí)現(xiàn)了 IService 接口中定義的方法。
  • 用戶可以繼承 ServiceImpl 類,并在自己的實(shí)現(xiàn)類中添加或重寫(xiě)更具體的業(yè)務(wù)邏輯。

用法:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}

二、IService用法

1、添加數(shù)據(jù)

// 插入一條記錄(選擇字段,策略插入)
boolean save(T entity);

// 插入(批量)
boolean saveBatch(Collection<T> entityList);

// 插入(批量,限制數(shù)量)
boolean saveBatch(Collection<T> entityList, int batchSize);

// 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);

可以開(kāi)啟 rewriteBatchedStatements=true 參數(shù),提高批處理的執(zhí)行效率。

2、刪除數(shù)據(jù)

// 根據(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);

3、修改數(shù)據(jù)

// 根據(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);

4、查詢數(shù)據(jù)

查詢一條數(shù)據(jù)

// 根據(jù) ID 查詢
T getById(Serializable id);

// 根據(jù) Wrapper,查詢一條記錄。結(jié)果集如果是多個(gè)會(huì)拋出異常,隨機(jī)取一條加上限制條件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);

// 根據(jù) Wrapper,查詢一條記錄,這個(gè)是方法返回結(jié)果不止一條則會(huì)拋出異常,如果想默認(rèn)取第一條結(jié)果,可以給這方法傳第二個(gè)參數(shù)為false。
T getOne(Wrapper<T> queryWrapper, boolean throwEx);

// 根據(jù) Wrapper,查詢一條記錄
Map<String, Object> getMap(Wrapper<T> queryWrapper);

// 根據(jù) Wrapper,查詢一條記錄
// mapper:轉(zhuǎn)換函數(shù),用于將查詢結(jié)果中的每個(gè)對(duì)象轉(zhuǎn)換為指定的對(duì)象類型。
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

查詢多條數(shù)據(jù)

// 查詢所有
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)坑涗?
// mapper:轉(zhuǎn)換函數(shù),用于將查詢結(jié)果中的每個(gè)對(duì)象轉(zhuǎn)換為指定的對(duì)象類型。
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

查詢記錄數(shù) count()

// 查詢總記錄數(shù)
int count();

// 根據(jù) Wrapper 條件,查詢總記錄數(shù)
int count(Wrapper<T> queryWrapper);

分頁(yè):Page

// 無(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);

IPage 是MyBatis-Plus 提供的一個(gè)分頁(yè)相關(guān)的接口,它有一個(gè)實(shí)現(xiàn)類為 Page,類中定義了分頁(yè)相關(guān)的多個(gè)參數(shù)。

  • size (每頁(yè)顯示條數(shù)):此參數(shù)通常由前端傳給我們,然后再封裝到Page對(duì)象中進(jìn)行分頁(yè)查詢;
  • current (要展示哪一頁(yè)數(shù)據(jù)):此參數(shù)通常由前端傳給我們,然后再封裝到Page對(duì)象中進(jìn)行分頁(yè)查詢;
  • orders(排序規(guī)則集合):按照哪些字段進(jìn)行排序?可以為多個(gè),例如希望通過(guò)時(shí)間進(jìn)行排序,如果時(shí)間相同就根據(jù)用戶ID降序排序,可以添加多個(gè)字段;
  • total (總記錄數(shù)):指查詢完畢后返回的數(shù)據(jù)庫(kù)中總記錄數(shù),注意不包含已被邏輯刪除的數(shù)據(jù);
  • records(查詢到的分頁(yè)結(jié)果集數(shù)據(jù)):分頁(yè)查詢得到的多條數(shù)據(jù)會(huì)存儲(chǔ)在 records 中,可以看出該對(duì)象是一個(gè)集合,可以傳遞一個(gè)泛型,泛型就是查詢到的數(shù)據(jù)對(duì)應(yīng)的實(shí)體泛型;
public class Page<T> implements IPage<T> {
    private static final long serialVersionUID = 8545996863226528798L;
    protected List<T> records;
    protected long total;
    protected long size;
    protected long current;
    protected List<OrderItem> orders;
    protected boolean optimizeCountSql;
    protected boolean searchCount;
    protected boolean optimizeJoinOfCountSql;
    protected String countId;
    protected Long maxLimit;
/* 以下省略 */
}

Page對(duì)象使用演示:

@SpringBootTest
public class ProductMapperTest {
    // 自動(dòng)注入 productMapper 接口對(duì)應(yīng)的實(shí)現(xiàn)類對(duì)象
    @Autowired
    private ProductMapper productMapper;
    @Test
    public void testPageQuery(){
        // 創(chuàng)建分頁(yè)查詢相關(guān)參數(shù) page,泛型為 Product,表示查詢到的結(jié)果對(duì)應(yīng)的實(shí)體類為Product
        Page<Product> page = new Page<>();
        // 設(shè)置分頁(yè)查詢顯示第二頁(yè)的數(shù)據(jù),實(shí)際開(kāi)發(fā)過(guò)程中該參數(shù)有前端傳遞
        page.setCurrent(2);
        // 設(shè)置分頁(yè)查詢每頁(yè)顯示四條數(shù)據(jù),實(shí)際開(kāi)發(fā)過(guò)程中該參數(shù)有前端傳遞
        page.setSize(4);
        // 創(chuàng)建排序字段集合,不想排序不加即可,實(shí)際開(kāi)發(fā)過(guò)程中一般都會(huì)要求按照時(shí)間降序排序
        List<OrderItem> orders = new ArrayList<>();
        // 按照價(jià)格排序,排序方式為降序,ASC為True表示升序,false表示降序,第一個(gè)參數(shù)表示數(shù)據(jù)庫(kù)中的列名
        orders.add(new OrderItem("price",false));
        // 按照生產(chǎn)時(shí)間排序,排序方式為降序
        orders.add(new OrderItem("production_date",false));
        // 將排序?qū)ο蠹霞尤敕猪?yè)查詢對(duì)象Page中
        page.setOrders(orders);
        // 執(zhí)行分頁(yè)查詢,可以創(chuàng)建一個(gè)Page對(duì)象接受查詢結(jié)果,
        // 也可以用查詢條件參數(shù)page,但其實(shí)最后結(jié)果都是同一個(gè)
        page = productMapper.selectPage(page, null);
        // 可以新創(chuàng)建一個(gè)Page對(duì)象,就像下面這樣
        Page<Product> productPage = productMapper.selectPage(page,null);
        // 輸出分頁(yè)查詢結(jié)果顯示當(dāng)前的哪一頁(yè)
        System.out.println(page.getCurrent());
        // 輸出分頁(yè)查詢結(jié)果的總數(shù)據(jù)條數(shù)
        System.out.println(page.getTotal());
        // 輸出分頁(yè)查詢結(jié)果的數(shù)據(jù)集合
        System.out.println(page.getRecords());
        // 輸出分頁(yè)查詢結(jié)果的每頁(yè)顯示條數(shù)
        System.out.println(page.getSize());
        // 判斷剛才分頁(yè)查詢的兩個(gè)結(jié)果對(duì)象是否為同一個(gè)
        System.out.println(page == productPage);
        // 輸出第一個(gè)分頁(yè)查詢對(duì)象內(nèi)存地址
        System.out.println(page);
        // 輸出第二個(gè)分頁(yè)查詢對(duì)象內(nèi)存地址
        System.out.println(productPage);
    }
}

鏈?zhǔn)?/h4>

鏈?zhǔn)讲樵冄菔荆?/p>

// 鏈?zhǔn)讲樵?普通
QueryChainWrapper<T> query();

// 鏈?zhǔn)讲樵?lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();

// 示例:
// eq 指定條件
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

鏈?zhǔn)礁卵菔荆?/p>

// 鏈?zhǔn)礁?普通
UpdateChainWrapper<T> update();

// 鏈?zhǔn)礁?lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();

// 示例:
// eq 指定條件
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java在算法題中的輸入問(wèn)題實(shí)例詳解

    Java在算法題中的輸入問(wèn)題實(shí)例詳解

    在校招筆試中,有的時(shí)候我們要自己設(shè)計(jì)輸入輸出,所以下面這篇文章主要給大家介紹了關(guān)于Java在算法題中的輸入問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐

    Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐

    定時(shí)任務(wù)一般是項(xiàng)目中都需要用到的,可以用于定時(shí)處理一些特殊的任務(wù)。下面這篇文章主要給大家介紹了關(guān)于Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-05-05
  • Spring測(cè)試 其實(shí)很簡(jiǎn)單

    Spring測(cè)試 其實(shí)很簡(jiǎn)單

    這篇文章主要為大家詳細(xì)介紹了Spring測(cè)試,其實(shí)很簡(jiǎn)單,揭開(kāi)集成測(cè)試神秘的面紗,感興趣的小伙伴們可以參考一下
    2016-07-07
  • java時(shí)間戳轉(zhuǎn)換為日期格式的多種方式

    java時(shí)間戳轉(zhuǎn)換為日期格式的多種方式

    本文介紹了五種將Java時(shí)間戳轉(zhuǎn)換為日期格式的方法,包括使用Date類、LocalDateTime類、Instant類、DateUtils類以及自定義時(shí)區(qū),每種方法都有其適用場(chǎng)景,可以根據(jù)具體需求選擇合適的方法,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java設(shè)計(jì)模式之建造者模式

    Java設(shè)計(jì)模式之建造者模式

    這篇文章介紹了Java設(shè)計(jì)模式之建造者模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Java編程簡(jiǎn)單應(yīng)用

    Java編程簡(jiǎn)單應(yīng)用

    本文主要介紹了三個(gè)簡(jiǎn)單Java小程序———1、HelloWorld(HelloWorld的來(lái)源);2、輸出個(gè)人信息3、輸出特殊圖案。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 為了多次讀取ServletInputStream引發(fā)的一系列問(wèn)題

    為了多次讀取ServletInputStream引發(fā)的一系列問(wèn)題

    這篇文章主要介紹了為了多次讀取ServletInputStream引發(fā)的一系列問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java?Object轉(zhuǎn)Integer實(shí)現(xiàn)方式

    java?Object轉(zhuǎn)Integer實(shí)現(xiàn)方式

    這篇文章主要介紹了java?Object轉(zhuǎn)Integer實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中的字節(jié)流InputStream和OutputStream詳解

    Java中的字節(jié)流InputStream和OutputStream詳解

    這篇文章主要介紹了Java中的字節(jié)流InputStream和OutputStream詳解,繼承自InputStream的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)8bit,我們看到的具體的某一些管道,凡是以InputStream結(jié)尾的管道,都是以字節(jié)的形式向我們的程序輸入數(shù)據(jù),需要的朋友可以參考下
    2023-10-10
  • 解析JavaSE的繼承和多態(tài)

    解析JavaSE的繼承和多態(tài)

    這篇文章主要為大家詳細(xì)介紹了JavaSE的繼承和多態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論