Spring Boot与MyBatis-Plus的高效集成

devtools/2024/11/26 1:18:20/

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=Trueusername: rootpassword: 123456
mybatis-plus:mapper-locations: mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: truetype-aliases-package: com.example.demo.entity

1.3 IUser 实体类

定义 IUser 实体类,映射数据库中的用户表:

java">@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:

java">@Mapper
public interface IUserMapper extends BaseMapper<IUser> {}

使用

2.1 基础增删改查

新增一条 User 数据
java">@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
java">@Test
public void deleteUserById() {userMapper.deleteById(1001);
}

2.2 批量操作

批量新增
java">@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 构造查询条件:

java">@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 构造更新条件:

java">@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 注解来确保操作的原子性。

java">@Service
public class UserService {@Autowiredprivate IUserMapper userMapper;@Transactionalpublic 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 注入。

数据加密

在应用层对敏感数据进行加密,比如用户密码的存储和验证。

java">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=Trueusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

3.4 测试工具类

创建一个测试工具类,用于自动生成代码:

java">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 注解。然后进行测试,例如新增一个用户:

java">@Autowired
private TUserMapper userMapper;@Test
public void testInsertUser() {TUser user = new TUser();user.setUserName("王中王");user.setPassWord("wzw123456");userMapper.insert(user);
}

总结与学习成果

本篇文章,您将能够获得以下知识和技能:

  1. 环境搭建:您将学会如何在 Spring Boot 项目中引入 MyBatis-Plus,并配置必要的依赖和数据库连接。

  2. 实体类与Mapper接口:您将了解如何创建实体类来映射数据库表,以及如何定义 Mapper 接口来操作数据库。

  3. CRUD操作:您将掌握使用 MyBatis-Plus 进行基础的增删改查操作,包括单条记录和批量操作的处理。

  4. 条件构造器:您将学会使用 QueryWrapper 和 UpdateWrapper 来构建复杂的查询和更新条件,提高代码的可读性和维护性。

  5. 事务管理:您将了解如何在服务层方法上使用 @Transactional 注解来确保数据库操作的原子性。

  6. 安全性实践:您将学到如何防止 SQL 注入攻击,并对敏感数据进行加密处理,增强应用的安全性。

  7. 性能优化:您将探索查询优化技巧和缓存策略,以提高数据库操作的性能。

  8. 版本兼容性与迁移:您将了解不同版本的 MyBatis-Plus 之间的差异,并学会如何将旧版本迁移到新版本。

  9. 实际应用场景:您将通过实际案例分析,了解 MyBatis-Plus 在解决实际问题中的应用。

  10. 监控与日志:您将学会如何配置和使用 MyBatis-Plus 的日志记录功能,以及如何监控数据库操作的性能。

  11. 代码生成器:您将掌握如何使用 MyBatis-Plus 提供的代码生成器来快速生成项目代码,提高开发效率。

通过这些内容,您不仅能够深入了解 MyBatis-Plus 的强大功能,还能够将这些知识应用到实际项目中,提升您的开发能力和项目质量。希望这篇文章能够帮助您在 Spring Boot 和 MyBatis-Plus 的学习之路上更进一步。

你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!


http://www.ppmy.cn/devtools/136987.html

相关文章

ubuntu增加swap交换空间

论坛_开发者_技术论坛_鲲鹏_昇腾_华为 先关闭 &#xff0c;否则报错 fallocate: fallocate 失败: 文本文件忙 sudo swapoff /swapfile sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo vim /etc/fstab 添加…

城电科技|太阳能折叠灯:点亮你的便捷之光

朋友们&#xff0c;今天要给你们介绍一款能让生活变得更加美好的神器 —— 太阳能折叠灯&#xff01; 【超便捷折叠设计】 它就像一个百变精灵&#xff0c;轻松折叠起来后小巧玲珑。可以随意塞进背包的缝隙&#xff0c;或者放在车载储物箱里&#xff0c;完全不占地方&#xff…

Elasticsearch面试内容整理-安全与权限管理

在 Elasticsearch 中,安全与权限管理至关重要,特别是当系统处理敏感数据时。Elasticsearch 提供了一套全面的安全机制来确保数据的机密性、完整性和可用性。以下是 Elasticsearch 安全与权限管理的详细介绍。 安全组件概述 Elasticsearch 的安全功能由 Elastic Stack 提供的一…

【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D

文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…

什么是Sass,有什么特点

Sass 概述 什么是 Sass&#xff1f; Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;是一种 CSS 预处理器&#xff0c;它扩展了 CSS 的功能&#xff0c;使其更加强大和灵活。Sass 允许开发者使用变量、嵌套规则、混合宏、继承等高级特性&#xff0c;从而编写…

输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目&#xff1a;输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后…

10大核心应用场景,解锁AI检测系统的智能安全之道

随着工业化和自动化的快速推进&#xff0c;高风险作业场景的安全管理需求日益增加。思通数科AI检测系统以深度学习、计算机视觉和多模态数据融合技术为基础&#xff0c;通过智能化监控和实时反馈&#xff0c;为企业提供全面的作业安全和流程管理解决方案。本文将详细解读该系统…

Python+7z:将文件和目录压缩为ZIP文件

在这个教程中&#xff0c;我们将学习如何使用Python脚本将文件和目录压缩为ZIP文件。我们将使用subprocess模块来调用外部命令行工具7z&#xff0c;这是一个功能强大的文件压缩工具。以下是详细的步骤和代码解析。 1. 准备工作 在开始之前&#xff0c;请确保你的系统中已经安…