引言
在開發 Java Web 應用程序時,我們經常需要進行大量的數據庫操作,如創建、讀取、更新和刪除(CRUD)。MyBatis-Plus 作為一個強大的 MyBatis 增強工具,為我們提供了通用 Service 接口,極大地簡化了這些操作。本文將詳細介紹 MyBatis-Plus 通用 Service 的使用,結合具體代碼示例,幫助大家更好地理解和應用。
1. 通用 Service 概述
MyBatis-Plus 的通用 Service CRUD 封裝了IService
接口,通過采用get
查詢單行、remove
刪除、list
查詢集合、page
分頁等前綴命名方式,進一步封裝了 CRUD 操作,避免了 Mapper 層的混淆。同時,泛型T
可以是任意實體對象,使得該接口具有很高的通用性。
如果我們在項目中可能存在自定義通用 Service 方法的需求,建議創建自己的IBaseService
繼承 MyBatis-Plus 提供的基類。官方文檔地址為:[https://baomidou.com/pages/49cc81/#service-crud-接口](https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%?A3)
2. 項目環境搭建
在開始之前,我們需要確保項目中已經引入了 MyBatis-Plus 的依賴。以 Maven 為例,在pom.xml
中添加以下依賴:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本號</version>
</dependency>
?
3. 代碼示例
3.1 定義實體類
首先,我們需要定義一個實體類User
,用于表示數據庫中的用戶表。
package com.qcby.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {private Long id;private String name;private Integer age;private String email;
}
?
?
3.2 定義 Service 接口
接下來,我們定義一個UserService
接口,繼承自IService<User>
。
?
package com.qcby.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.qcby.entity.User;public interface UserService extends IService<User> {
}
3.3 實現 Service 接口
然后,我們實現UserService
接口。
package com.qcby.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qcby.entity.User;
import com.qcby.mapper.UserMapper;
import com.qcby.service.UserService;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
?
3.4 測試 Service 方法
為了驗證通用 Service 的功能,我們編寫一些測試用例。
package com.qcby;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.entity.User;
import com.qcby.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@SpringBootTest
public class MybatisPlusServiceTest {@Autowiredprivate UserService userService;/*** 保存單個用戶*/@Testpublic void savetest(){User user = new User();user.setName("xiaoming");userService.save(user);System.out.println(user.getId());}/*** 批量保存用戶*/@Testpublic void saveBatchTest(){List<User> userList = new ArrayList<>();User user1 = new User();user1.setName("xiaobai");userList.add(user1);User user2 = new User();user2.setName("xiaoli");userList.add(user2);userService.saveBatch(userList);System.out.println(userList.size());}/*** 根據ID刪除用戶*/@Testpublic void removeById(){userService.removeById(1949020695920902146L);}/*** 根據條件刪除用戶*/@Testpublic void remove(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("id",6l);userService.remove(queryWrapper);}/*** 根據ID更新用戶信息*/@Testpublic void updateById(){User user = new User();user.setId(1949019913414877186l);user.setName("xiaoming");user.setEmail("xiongda@qcby.com");user.setAge(18);userService.updateById(user);}/*** 根據ID查詢用戶信息*/@Testpublic void getById(){userService.getById(1949020696017371138L);}/*** 查詢用戶列表*/@Testpublic void list(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("id",5l);List<User> list = userService.list(queryWrapper);System.out.println(list);}/*** 分頁查詢用戶信息*/@Testpublic void pageNavigation() {// 創建分頁對象,查詢第1頁,每頁5條Page<User> page = new Page<>(1, 5);// 執行分頁查詢Page<User> resultPage = userService.page(page);// 打印分頁信息System.out.println("當前頁: " + resultPage.getCurrent());System.out.println("每頁大小: " + resultPage.getSize());System.out.println("總記錄數: " + resultPage.getTotal());System.out.println("總頁數: " + resultPage.getPages());System.out.println("當前頁數據: " + resultPage.getRecords());int i = 2;while(resultPage.hasNext()){System.out.println("\n=== 查詢下一頁 ===");page.setCurrent(i); // 設置為第i頁Page<User> nextPage = userService.page(page);System.out.println("當前頁: " + nextPage.getCurrent());System.out.println("當前頁數據: " + nextPage.getRecords());i++;}}
}
4. 代碼解釋
4.1 保存操作
save
方法用于保存單個實體對象。saveBatch
方法用于批量保存實體對象。
4.2 刪除操作
removeById
方法根據 ID 刪除實體對象。remove
方法根據條件刪除實體對象。
4.3 更新操作
updateById
方法根據 ID 更新實體對象的信息。
4.4 查詢操作
getById
方法根據 ID 查詢單個實體對象。list
方法根據條件查詢實體對象列表。page
方法用于分頁查詢實體對象。