SpringBoot與MyBatis-Plus的高效集成方式
引言
在現(xiàn)代 Java 開發(fā)中,MyBatis-Plus 作為 MyBatis 的增強工具,以其簡化 CRUD 操作和無需編寫 XML 映射文件的特點,受到了開發(fā)者的青睞。
本篇文章將帶你一步步整合 Spring Boot 與 MyBatis-Plus,并展示其在實際開發(fā)中的應(yīng)用,包括事務(wù)管理、安全性考慮、性能優(yōu)化等高級特性。

環(huán)境準備
1.1 導(dǎo)入依賴
在 pom.xml 文件中添加 MyBatis-Plus 的起步依賴:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>確保使用 Maven Helper 插件檢查依賴沖突。
1.2 修改配置文件
在 application.yml 中配置數(shù)據(jù)庫連接和 MyBatis-Plus 參數(shù):
server:
port: 8889
spring:
datasource:
url: jdbc:mysql://localhost:3306/boot_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
username: root
password: 123456
mybatis-plus:
mapper-locations: mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
type-aliases-package: com.example.demo.entity1.3 IUser 實體類
定義 IUser 實體類,映射數(shù)據(jù)庫中的用戶表:
@Data
@TableName("t_user")
public class IUser {
@TableId(value = "u_id", type = IdType.AUTO)
private Integer uId;
@TableField("user_name")
private String userName;
private String email;
private String passWord;
private Date birth;
private int gender;
}1.4 UserMapper 接口
創(chuàng)建 UserMapper 接口,繼承 BaseMapper:
@Mapper
public interface IUserMapper extends BaseMapper<IUser> {}使用
2.1 基礎(chǔ)增刪改查
新增一條 User 數(shù)據(jù)
@Autowired
private IUserMapper userMapper;
@Test
public void insertUser() {
IUser user = new IUser();
user.setUserName("曹操");
user.setPassWord("88888888");
user.setEmail("321@qin.com");
userMapper.insert(user);
}根據(jù)條件刪除 User
@Test
public void deleteUserById() {
userMapper.deleteById(1001);
}2.2 批量操作
批量新增
@Test
public void batchInsertUsers() {
List<IUser> users = Arrays.asList(
new IUser().setUserName("關(guān)羽").setPassWord("258"),
new IUser().setUserName("關(guān)公").setPassWord("7530"),
new IUser().setUserName("關(guān)項").setPassWord("159")
);
userMapper.insertBatch(users);
}2.3 查詢條件構(gòu)造器【QueryWrapper】使用
使用 QueryWrapper 構(gòu)造查詢條件:
@Test
public void selectUsersByQueryWrapper() {
QueryWrapper<IUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_name", "項羽").like("email", "123@163.com");
userMapper.selectList(queryWrapper);
}2.4 修改條件構(gòu)造器【UpdateWrapper】使用
使用 UpdateWrapper 構(gòu)造更新條件:
@Test
public void updateUserByUpdateWrapper() {
UpdateWrapper<IUser> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("user_name", "王小五").set("email", "wxw@qq.com");
userMapper.update(null, updateWrapper);
}2.5 事務(wù)管理
事務(wù)的配置
在服務(wù)層方法上使用 @Transactional 注解來確保操作的原子性。
@Service
public class UserService {
@Autowired
private IUserMapper userMapper;
@Transactional
public void updateUserAndSendEmail(String userName, String newEmail) {
// 更新用戶信息
IUser user = new IUser();
user.setUserName(userName);
user.setEmail(newEmail);
userMapper.updateById(user);
// 發(fā)送郵件操作(示例)
sendEmailToUser(userName, newEmail);
}
private void sendEmailToUser(String userName, String email) {
// 郵件發(fā)送邏輯
}
}事務(wù)的傳播行為
Spring 支持多種事務(wù)傳播行為,可以根據(jù)業(yè)務(wù)需求配置。
2.6 安全性考慮
防止 SQL 注入
MyBatis-Plus 通過預(yù)編譯的語句防止 SQL 注入。
數(shù)據(jù)加密
在應(yīng)用層對敏感數(shù)據(jù)進行加密,比如用戶密碼的存儲和驗證。
public class SecurityUtils {
public static String encryptPassword(String password) {
// 加密密碼邏輯
}
public static boolean checkPassword(String rawPassword, String encryptedPassword) {
// 驗證密碼邏輯
}
}代碼生成器

3.1 準備項目和數(shù)據(jù)庫表
準備一個 Spring Boot 空項目,并創(chuàng)建數(shù)據(jù)庫表:
CREATE TABLE `t_user` (
`u_id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`user_name` varchar(10) NOT NULL COMMENT '用戶登錄名',
`email` varchar(50) DEFAULT NULL COMMENT '郵箱',
`pass_word` varchar(30) NOT NULL COMMENT '密碼',
...
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;3.2 引入依賴
在 pom.xml 中添加代碼生成器的依賴:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>3.3 配置文件
在 application.yml 中配置數(shù)據(jù)庫連接:
spring:
datasource:
url: jdbc:mysql://localhost:3306/generate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver3.4 測試工具類
創(chuàng)建一個測試工具類,用于自動生成代碼:
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
mpg.setDataSource(new DataSourceConfig.Builder()
.setUrl("jdbc:mysql://localhost:3306/generate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername("root")
.setPassword("123456")
.build());
mpg.setGlobalConfig(new GlobalConfig.Builder()
.setOutputDir(System.getProperty("user.dir") + "/src/main/java")
.setAuthor("Your Name")
.setOpen(false)
.build());
mpg.setPackageInfo(new PackageConfig.Builder()
.setParent("com.example.demo")
.setEntity("entity")
.setMapper("mapper")
.setService("service")
.setController("controller")
.build());
mpg.setStrategy(new StrategyConfig.Builder()
.setInclude("t_user")
.build());
mpg.execute();
}
}3.5 生成目錄結(jié)構(gòu)
運行上述測試工具類,生成項目的目錄結(jié)構(gòu)。
3.6 調(diào)整和測試
調(diào)整生成的 Mapper XML 文件位置,并在 Mapper 接口上添加 @Mapper 注解。
在啟動類上添加 @MapperScan 注解。然后進行測試,例如新增一個用戶:
@Autowired
private TUserMapper userMapper;
@Test
public void testInsertUser() {
TUser user = new TUser();
user.setUserName("王中王");
user.setPassWord("wzw123456");
userMapper.insert(user);
}總結(jié)與學(xué)習(xí)成果
本篇文章,您將能夠獲得以下知識和技能:
- 環(huán)境搭建:您將學(xué)會如何在 Spring Boot 項目中引入 MyBatis-Plus,并配置必要的依賴和數(shù)據(jù)庫連接。
- 實體類與Mapper接口:您將了解如何創(chuàng)建實體類來映射數(shù)據(jù)庫表,以及如何定義 Mapper 接口來操作數(shù)據(jù)庫。
- CRUD操作:您將掌握使用 MyBatis-Plus 進行基礎(chǔ)的增刪改查操作,包括單條記錄和批量操作的處理。
- 條件構(gòu)造器:您將學(xué)會使用 QueryWrapper 和 UpdateWrapper 來構(gòu)建復(fù)雜的查詢和更新條件,提高代碼的可讀性和維護性。
- 事務(wù)管理:您將了解如何在服務(wù)層方法上使用
@Transactional注解來確保數(shù)據(jù)庫操作的原子性。 - 安全性實踐:您將學(xué)到如何防止 SQL 注入攻擊,并對敏感數(shù)據(jù)進行加密處理,增強應(yīng)用的安全性。
- 性能優(yōu)化:您將探索查詢優(yōu)化技巧和緩存策略,以提高數(shù)據(jù)庫操作的性能。
- 版本兼容性與遷移:您將了解不同版本的 MyBatis-Plus 之間的差異,并學(xué)會如何將舊版本遷移到新版本。
- 實際應(yīng)用場景:您將通過實際案例分析,了解 MyBatis-Plus 在解決實際問題中的應(yīng)用。
- 監(jiān)控與日志:您將學(xué)會如何配置和使用 MyBatis-Plus 的日志記錄功能,以及如何監(jiān)控數(shù)據(jù)庫操作的性能。
- 代碼生成器:您將掌握如何使用 MyBatis-Plus 提供的代碼生成器來快速生成項目代碼,提高開發(fā)效率。
通過這些內(nèi)容,您不僅能夠深入了解 MyBatis-Plus 的強大功能,還能夠?qū)⑦@些知識應(yīng)用到實際項目中,提升您的開發(fā)能力和項目質(zhì)量。希望這篇文章能夠幫助您在 Spring Boot 和 MyBatis-Plus 的學(xué)習(xí)之路上更進一步。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)
在Spring Cloud項目中,使用Java和Redis結(jié)合實現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,分布式鎖的使用能夠在多個實例同時提交訂單時,僅有一個實例可以成功進行操作,本文給大家介紹Spring,Cloud中的分布式鎖用法詳解(Java+Redis SETNX命令),感興趣的朋友一起看看吧2023-10-10
SpringBoot接口防抖(防重復(fù)提交)的實現(xiàn)方法
SpringBoot接口防抖主要通過前端和后端兩種方式實現(xiàn),前端通過JavaScript控制用戶操作,后端通過攔截器、過濾器等機制控制請求頻率,文中介紹的非常詳細,感興趣的可以了解一下2024-11-11
java數(shù)據(jù)庫批量插入數(shù)據(jù)的實現(xiàn)
本文主要介紹了java數(shù)據(jù)庫批量插入數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
SpringBoot加載不出來application.yml文件的解決方法
這篇文章主要介紹了SpringBoot加載不出來application.yml文件的解決方法,文中通過示例代碼講解的非常詳細,對大家的學(xué)習(xí)或者工作有一定的幫助,需要的朋友跟著小編來一起來學(xué)習(xí)吧2023-12-12

