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