Mybatis Plus Service詳解

Mybatis Plus是一個增強版的Mybatis框架,提供了許多開發效率和代碼質量方面的改進。其中,Mybatis Plus Service層的封裝是Mybatis Plus的一個重要特性。本文將會從以下幾個方面對Mybatis Plus Service進行詳細的闡述:

一、Mybatis Plus Service層簡介

Mybatis Plus Service層是Mybatis Plus框架中的一個封裝層,主要提供了對於單表的CRUD(增刪改查)操作的封裝。在Service接口中,Mybatis Plus提供了多種方法,可以很方便地完成對於單表的操作。同時,Mybatis Plus Service層還提供了對於分頁查詢、Lambda表達式等高級功能的支持,使得開發效率更高、代碼質量更優。

二、Mybatis Plus Service層的使用

1、Mybatis Plus Service層的接口定義

在Mybatis Plus框架中,Service層接口的定義通常以 “BaseService” 的形式進行定義。其中,“Entity”代表實體類的類型。Mybatis Plus提供了多個默認實現類,比如IService、ServiceImpl等,其中IService是Mybatis Plus Service層的核心接口。IService中提供了許多方法,用於完成單表的增刪改查操作。

public interface BaseService<Entity> extends IService<Entity> {
    
    /**
     * 插入一條記錄(選擇字段,策略插入)
     *
     * @param entity 實體對象
     * @return boolean
     */
    boolean save(Entity entity);

    /**
     * 根據 ID 刪除
     *
     * @param id 主鍵ID
     * @return boolean
     */
    boolean removeById(Serializable id);

    /**
     * 根據 ID 修改
     *
     * @param entity 實體對象
     * @return boolean
     */
    boolean updateById(Entity entity);

    /**
     * 根據 ID 查詢
     *
     * @param id 主鍵ID
     * @return T
     */
    Entity getById(Serializable id);

    /**
     * 查詢多個id的記錄
     *
     * @param idList 主鍵ID列表
     * @return List<T>
     */
    List<Entity> listByIds(Collection<? extends Serializable> idList);

    /**
     * 查詢所有記錄
     *
     * @return List<T>
     */
    List<Entity> listAll();

}

2、Mybatis Plus Service層的實現

在使用Mybatis Plus Service層的時候,需要定義一個繼承了IService的接口,並且實現對應的方法。Mybatis Plus提供了默認實現類,我們可以直接使用這些默認實現類來實現對應的Service層接口。比如ISchoolService的定義如下:

public interface ISchoolService extends IService<School> {
}

我們可以直接使用ServiceImpl作為ISchoolService的實現類。具體的實現方法如下:

@Service
public class SchoolServiceImpl extends ServiceImpl<SchoolMapper, School> implements ISchoolService {
}

需要注意的是,在使用ServiceImpl作為Service層接口的實現類的時候,需要傳遞一個Mapper對象作為參數。我們可以通過@Autowired註解來注入對應的Mapper對象。

3、Mybatis Plus Service層的使用示例

假設我們有一個Student實體類,其對應的Mapper為StudentMapper。我們可以定義一個IStudentService服務層接口,實現對應的增刪改查方法。其中,我們使用ServiceImpl作為IStudentService的實現類。具體的定義如下:

public interface IStudentService extends IService<Student> {

    /**
     * 根據學號查詢學生信息
     * @param studentNo 學號
     * @return 學生信息
     */
    Student getByStudentNo(String studentNo);

}

實現類StudentServiceImpl如下:

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {

    /**
     * 根據學號查詢學生信息
     * @param studentNo 學號
     * @return 學生信息
     */
    public Student getByStudentNo(String studentNo) {
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(Student::getStudentNo, studentNo);
        return this.getOne(queryWrapper);
    }

}

在Service層接口中,我們定義了一個根據學號查詢學生信息的方法。在實現類中,我們使用了Mybatis Plus提供的Lambda表達式進行條件查詢,並使用getOne方法查詢結果。

三、Mybatis Plus Service層的高級功能

1、分頁查詢

Mybatis Plus Service層提供了對於分頁查詢的支持。我們可以使用Page對象來進行分頁查詢。在Service層中,我們可以使用Service的list(Page page, Wrapper wrapper)方法來完成分頁查詢。其中,page對象代表當前分頁的信息,wrapper對象代表查詢條件(可以使用QueryWrapper或LambdaQueryWrapper進行組裝)。具體的使用方法如下:

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {

    /**
     * 分頁查詢所有學生
     * @param pageNo 當前頁碼
     * @param pageSize 每頁數量
     * @return 分頁信息
     */
    public Page<Student> listAllByPage(int pageNo, int pageSize) {
        Page<Student> page = new Page<>(pageNo, pageSize);
        QueryWrapper<Student> wrapper = new QueryWrapper<>();
        return this.list(page, wrapper);
    }

}

2、Lambda表達式

Mybatis Plus Service層還提供了對於Lambda表達式的支持。我們可以使用LambdaQueryWrapper代替QueryWrapper進行條件查詢,使得我們的代碼更加簡潔。使用Lambda表達式,我們可以在編譯期就進行語法檢查,減少語法錯誤的出現。具體的使用方法如下:

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {

    /**
     * 根據姓名和年齡查詢學生信息
     * @param name 姓名
     * @param age 年齡
     * @return 學生信息
     */
    public List<Student> listByCondition(String name, int age) {
        LambdaQueryWrapper<Student> wrapper = new LambdaQueryWrapper<>()
                .eq(StringUtils.isNotBlank(name), Student::getName, name)
                .eq(age != 0, Student::getAge, age);
        return this.list(wrapper);
    }

}

四、總結

Mybatis Plus的Service層封裝是其特有的一個重要特性。在使用Mybatis Plus進行開發的時候,我們可以很方便地使用Service層接口進行單表的CRUD操作。同時,Service層還提供了對於分頁查詢、Lambda表達式等高級功能的支持,使得我們的開發效率更高、代碼質量更優。

原創文章,作者:DEDK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/145303.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DEDK的頭像DEDK
上一篇 2024-10-27 23:48
下一篇 2024-10-27 23:48

相關推薦

  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論