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

MybatisPlus IService接口功能介紹

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

一、介紹

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

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

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

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

用法:

 public interface UserService extends IService<User> {}
  • ServiceImpl 類是 IService 接口的默認實現(xiàn)類,提供了基本的增刪改查操作的實現(xiàn)細節(jié)。
  • 它使用了泛型參數(shù)來規(guī)范實體類和主鍵類型,并實現(xiàn)了 IService 接口中定義的方法。
  • 用戶可以繼承 ServiceImpl 類,并在自己的實現(xiàn)類中添加或重寫更具體的業(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);

可以開啟 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é)果集如果是多個會拋出異常,隨機取一條加上限制條件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);

// 根據(jù) Wrapper,查詢一條記錄,這個是方法返回結(jié)果不止一條則會拋出異常,如果想默認取第一條結(jié)果,可以給這方法傳第二個參數(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é)果中的每個對象轉(zhuǎn)換為指定的對象類型。
<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é)果中的每個對象轉(zhuǎn)換為指定的對象類型。
<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);

分頁:Page

// 無條件分頁查詢
IPage<T> page(IPage<T> page);

// 條件分頁查詢
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);

// 無條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page);

// 條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

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

  • size (每頁顯示條數(shù)):此參數(shù)通常由前端傳給我們,然后再封裝到Page對象中進行分頁查詢;
  • current (要展示哪一頁數(shù)據(jù)):此參數(shù)通常由前端傳給我們,然后再封裝到Page對象中進行分頁查詢;
  • orders(排序規(guī)則集合):按照哪些字段進行排序?可以為多個,例如希望通過時間進行排序,如果時間相同就根據(jù)用戶ID降序排序,可以添加多個字段;
  • total (總記錄數(shù)):指查詢完畢后返回的數(shù)據(jù)庫中總記錄數(shù),注意不包含已被邏輯刪除的數(shù)據(jù);
  • records(查詢到的分頁結(jié)果集數(shù)據(jù)):分頁查詢得到的多條數(shù)據(jù)會存儲在 records 中,可以看出該對象是一個集合,可以傳遞一個泛型,泛型就是查詢到的數(shù)據(jù)對應(yīng)的實體泛型;
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對象使用演示:

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

鏈式

鏈式查詢演示:

// 鏈式查詢 普通
QueryChainWrapper<T> query();

// 鏈式查詢 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();

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

鏈式更新演示:

// 鏈式更改 普通
UpdateChainWrapper<T> update();

// 鏈式更改 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();

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

總結(jié)

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

您可能感興趣的文章:

相關(guān)文章

  • Java在算法題中的輸入問題實例詳解

    Java在算法題中的輸入問題實例詳解

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

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

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

    Spring測試 其實很簡單

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了java?Object轉(zhuǎn)Integer實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    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)

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

最新評論