SpringBoot與MyBatis-Plus的高效集成方式
引言
在現(xiàn)代 Java 開發(fā)中,MyBatis-Plus 作為 MyBatis 的增強(qiáng)工具,以其簡(jiǎn)化 CRUD 操作和無(wú)需編寫 XML 映射文件的特點(diǎn),受到了開發(fā)者的青睞。
本篇文章將帶你一步步整合 Spring Boot 與 MyBatis-Plus,并展示其在實(shí)際開發(fā)中的應(yīng)用,包括事務(wù)管理、安全性考慮、性能優(yōu)化等高級(jí)特性。
環(huán)境準(zhǔ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ù)庫(kù)連接和 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.entity
1.3 IUser 實(shí)體類
定義 IUser 實(shí)體類,映射數(shù)據(jù)庫(kù)中的用戶表:
@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)項(xiàng)").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", "項(xiàng)羽").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
注解來(lái)確保操作的原子性。
@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 通過(guò)預(yù)編譯的語(yǔ)句防止 SQL 注入。
數(shù)據(jù)加密
在應(yīng)用層對(duì)敏感數(shù)據(jù)進(jìn)行加密,比如用戶密碼的存儲(chǔ)和驗(yàn)證。
public class SecurityUtils { public static String encryptPassword(String password) { // 加密密碼邏輯 } public static boolean checkPassword(String rawPassword, String encryptedPassword) { // 驗(yàn)證密碼邏輯 } }
代碼生成器
3.1 準(zhǔn)備項(xiàng)目和數(shù)據(jù)庫(kù)表
準(zhǔn)備一個(gè) Spring Boot 空項(xiàng)目,并創(chuàng)建數(shù)據(jù)庫(kù)表:
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ù)庫(kù)連接:
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.Driver
3.4 測(cè)試工具類
創(chuàng)建一個(gè)測(cè)試工具類,用于自動(dò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)
運(yùn)行上述測(cè)試工具類,生成項(xiàng)目的目錄結(jié)構(gòu)。
3.6 調(diào)整和測(cè)試
調(diào)整生成的 Mapper XML 文件位置,并在 Mapper 接口上添加 @Mapper 注解。
在啟動(dòng)類上添加 @MapperScan 注解。然后進(jìn)行測(cè)試,例如新增一個(gè)用戶:
@Autowired private TUserMapper userMapper; @Test public void testInsertUser() { TUser user = new TUser(); user.setUserName("王中王"); user.setPassWord("wzw123456"); userMapper.insert(user); }
總結(jié)與學(xué)習(xí)成果
本篇文章,您將能夠獲得以下知識(shí)和技能:
- 環(huán)境搭建:您將學(xué)會(huì)如何在 Spring Boot 項(xiàng)目中引入 MyBatis-Plus,并配置必要的依賴和數(shù)據(jù)庫(kù)連接。
- 實(shí)體類與Mapper接口:您將了解如何創(chuàng)建實(shí)體類來(lái)映射數(shù)據(jù)庫(kù)表,以及如何定義 Mapper 接口來(lái)操作數(shù)據(jù)庫(kù)。
- CRUD操作:您將掌握使用 MyBatis-Plus 進(jìn)行基礎(chǔ)的增刪改查操作,包括單條記錄和批量操作的處理。
- 條件構(gòu)造器:您將學(xué)會(huì)使用 QueryWrapper 和 UpdateWrapper 來(lái)構(gòu)建復(fù)雜的查詢和更新條件,提高代碼的可讀性和維護(hù)性。
- 事務(wù)管理:您將了解如何在服務(wù)層方法上使用
@Transactional
注解來(lái)確保數(shù)據(jù)庫(kù)操作的原子性。 - 安全性實(shí)踐:您將學(xué)到如何防止 SQL 注入攻擊,并對(duì)敏感數(shù)據(jù)進(jìn)行加密處理,增強(qiáng)應(yīng)用的安全性。
- 性能優(yōu)化:您將探索查詢優(yōu)化技巧和緩存策略,以提高數(shù)據(jù)庫(kù)操作的性能。
- 版本兼容性與遷移:您將了解不同版本的 MyBatis-Plus 之間的差異,并學(xué)會(huì)如何將舊版本遷移到新版本。
- 實(shí)際應(yīng)用場(chǎng)景:您將通過(guò)實(shí)際案例分析,了解 MyBatis-Plus 在解決實(shí)際問(wèn)題中的應(yīng)用。
- 監(jiān)控與日志:您將學(xué)會(huì)如何配置和使用 MyBatis-Plus 的日志記錄功能,以及如何監(jiān)控?cái)?shù)據(jù)庫(kù)操作的性能。
- 代碼生成器:您將掌握如何使用 MyBatis-Plus 提供的代碼生成器來(lái)快速生成項(xiàng)目代碼,提高開發(fā)效率。
通過(guò)這些內(nèi)容,您不僅能夠深入了解 MyBatis-Plus 的強(qiáng)大功能,還能夠?qū)⑦@些知識(shí)應(yīng)用到實(shí)際項(xiàng)目中,提升您的開發(fā)能力和項(xiàng)目質(zhì)量。希望這篇文章能夠幫助您在 Spring Boot 和 MyBatis-Plus 的學(xué)習(xí)之路上更進(jìn)一步。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)
在Spring Cloud項(xiàng)目中,使用Java和Redis結(jié)合實(shí)現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,分布式鎖的使用能夠在多個(gè)實(shí)例同時(shí)提交訂單時(shí),僅有一個(gè)實(shí)例可以成功進(jìn)行操作,本文給大家介紹Spring,Cloud中的分布式鎖用法詳解(Java+Redis SETNX命令),感興趣的朋友一起看看吧2023-10-10SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法
SpringBoot接口防抖主要通過(guò)前端和后端兩種方式實(shí)現(xiàn),前端通過(guò)JavaScript控制用戶操作,后端通過(guò)攔截器、過(guò)濾器等機(jī)制控制請(qǐng)求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下2024-11-11MyBatis項(xiàng)目的創(chuàng)建和增刪查改操作詳解
這篇文章主要介紹了MyBatis項(xiàng)目的創(chuàng)建和增刪查改操作,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-11-11java獲取機(jī)器碼簡(jiǎn)單實(shí)現(xiàn)demo
這篇文章主要為大家介紹了java獲取機(jī)器碼的簡(jiǎn)單實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11java數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了java數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05SpringBoot加載不出來(lái)application.yml文件的解決方法
這篇文章主要介紹了SpringBoot加載不出來(lái)application.yml文件的解決方法,文中通過(guò)示例代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作有一定的幫助,需要的朋友跟著小編來(lái)一起來(lái)學(xué)習(xí)吧2023-12-12