Spring Boot与MyBatis-Plus的高效集成
引言
在现代 Java 开发中,MyBatis-Plus 作为 MyBatis 的增强工具,以其简化 CRUD 操作和无需编写 XML 映射文件的特点,受到了开发者的青睐。本篇文章将带你一步步整合 Spring Boot 与 MyBatis-Plus,并展示其在实际开发中的应用,包括事务管理、安全性考虑、性能优化等高级特性。
环境准备
1.1 导入依赖
在 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
中配置数据库连接和 MyBatis-Plus 参数:
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 实体类
定义 IUser 实体类,映射数据库中的用户表:
@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 接口
创建 UserMapper 接口,继承 BaseMapper:
@Mapper
public interface IUserMapper extends BaseMapper<IUser> {}
使用
2.1 基础增删改查
新增一条 User 数据
@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);
}
根据条件删除 User
@Test
public void deleteUserById() {
userMapper.deleteById(1001);
}
2.2 批量操作
批量新增
@Test
public void batchInsertUsers() {
List<IUser> users = Arrays.asList(
new IUser().setUserName("关羽").setPassWord("258"),
new IUser().setUserName("关公").setPassWord("7530"),
new IUser().setUserName("关项").setPassWord("159")
);
userMapper.insertBatch(users);
}
2.3 查询条件构造器【QueryWrapper】使用
使用 QueryWrapper 构造查询条件:
@Test
public void selectUsersByQueryWrapper() {
QueryWrapper<IUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_name", "项羽").like("email", "123@163.com");
userMapper.selectList(queryWrapper);
}
2.4 修改条件构造器【UpdateWrapper】使用
使用 UpdateWrapper 构造更新条件:
@Test
public void updateUserByUpdateWrapper() {
UpdateWrapper<IUser> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("user_name", "王小五").set("email", "wxw@qq.com");
userMapper.update(null, updateWrapper);
}
2.5 事务管理
事务的配置
在服务层方法上使用 @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);
// 发送邮件操作(示例)
sendEmailToUser(userName, newEmail);
}
private void sendEmailToUser(String userName, String email) {
// 邮件发送逻辑
}
}
事务的传播行为
Spring 支持多种事务传播行为,可以根据业务需求配置。
2.6 安全性考虑
防止 SQL 注入
MyBatis-Plus 通过预编译的语句防止 SQL 注入。
数据加密
在应用层对敏感数据进行加密,比如用户密码的存储和验证。
public class SecurityUtils {
public static String encryptPassword(String password) {
// 加密密码逻辑
}
public static boolean checkPassword(String rawPassword, String encryptedPassword) {
// 验证密码逻辑
}
}
代码生成器
3.1 准备项目和数据库表
准备一个 Spring Boot 空项目,并创建数据库表:
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
中配置数据库连接:
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 测试工具类
创建一个测试工具类,用于自动生成代码:
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 生成目录结构
运行上述测试工具类,生成项目的目录结构。
3.6 调整和测试
调整生成的 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);
}
总结与学习成果
本篇文章,您将能够获得以下知识和技能:
-
环境搭建:您将学会如何在 Spring Boot 项目中引入 MyBatis-Plus,并配置必要的依赖和数据库连接。
-
实体类与Mapper接口:您将了解如何创建实体类来映射数据库表,以及如何定义 Mapper 接口来操作数据库。
-
CRUD操作:您将掌握使用 MyBatis-Plus 进行基础的增删改查操作,包括单条记录和批量操作的处理。
-
条件构造器:您将学会使用 QueryWrapper 和 UpdateWrapper 来构建复杂的查询和更新条件,提高代码的可读性和维护性。
-
事务管理:您将了解如何在服务层方法上使用
@Transactional
注解来确保数据库操作的原子性。 -
安全性实践:您将学到如何防止 SQL 注入攻击,并对敏感数据进行加密处理,增强应用的安全性。
-
性能优化:您将探索查询优化技巧和缓存策略,以提高数据库操作的性能。
-
版本兼容性与迁移:您将了解不同版本的 MyBatis-Plus 之间的差异,并学会如何将旧版本迁移到新版本。
-
实际应用场景:您将通过实际案例分析,了解 MyBatis-Plus 在解决实际问题中的应用。
-
监控与日志:您将学会如何配置和使用 MyBatis-Plus 的日志记录功能,以及如何监控数据库操作的性能。
-
代码生成器:您将掌握如何使用 MyBatis-Plus 提供的代码生成器来快速生成项目代码,提高开发效率。
通过这些内容,您不仅能够深入了解 MyBatis-Plus 的强大功能,还能够将这些知识应用到实际项目中,提升您的开发能力和项目质量。希望这篇文章能够帮助您在 Spring Boot 和 MyBatis-Plus 的学习之路上更进一步。
你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!