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-tw/n/145303.html
微信掃一掃
支付寶掃一掃