SpringBoot与MyBatis-Plus的高效集成方式

 更新时间:2024年11月21日 09:16:39   作者:真心喜欢你吖  
本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括环境准备、实体类与Mapper接口定义、CRUD操作、条件构造器、事务管理、安全性考虑、性能优化、版本兼容性与迁移、实际应用场景和监控与日志等内容,通过这些步骤,读者可以掌握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);
}

总结与学习成果

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

  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 的学习之路上更进一步。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud中的分布式锁用法示例详解(Java+Redis SETNX命令)

    SpringCloud中的分布式锁用法示例详解(Java+Redis SETNX命令)

    在Spring Cloud项目中,使用Java和Redis结合实现的分布式锁可以确保订单的一致性和并发控制,分布式锁的使用能够在多个实例同时提交订单时,仅有一个实例可以成功进行操作,本文给大家介绍Spring,Cloud中的分布式锁用法详解(Java+Redis SETNX命令),感兴趣的朋友一起看看吧
    2023-10-10
  • 深入理解java中的null“类型”

    深入理解java中的null“类型”

    这篇文章主要介绍了深入理解java中的null“类型”,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 浅谈@PostConstruct不被调用的原因

    浅谈@PostConstruct不被调用的原因

    这篇文章主要介绍了浅谈@PostConstruct不被调用的原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot接口防抖(防重复提交)的实现方法

    SpringBoot接口防抖(防重复提交)的实现方法

    SpringBoot接口防抖主要通过前端和后端两种方式实现,前端通过JavaScript控制用户操作,后端通过拦截器、过滤器等机制控制请求频率,文中介绍的非常详细,感兴趣的可以了解一下
    2024-11-11
  • Java内存溢出和内存泄露

    Java内存溢出和内存泄露

    这篇文章主要介绍了Java内存溢出和内存泄露的相关资料,需要的朋友可以参考下
    2017-10-10
  • MyBatis项目的创建和增删查改操作详解

    MyBatis项目的创建和增删查改操作详解

    这篇文章主要介绍了MyBatis项目的创建和增删查改操作,文中通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-11-11
  • java获取机器码简单实现demo

    java获取机器码简单实现demo

    这篇文章主要为大家介绍了java获取机器码的简单实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java中的JetCache 实战

    Java中的JetCache 实战

    这篇文章主要介绍了Java中的JetCache实战,JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用,下文更多相关资料需要的小伙伴可以参考一下
    2022-04-04
  • java数据库批量插入数据的实现

    java数据库批量插入数据的实现

    本文主要介绍了java数据库批量插入数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • SpringBoot加载不出来application.yml文件的解决方法

    SpringBoot加载不出来application.yml文件的解决方法

    这篇文章主要介绍了SpringBoot加载不出来application.yml文件的解决方法,文中通过示例代码讲解的非常详细,对大家的学习或者工作有一定的帮助,需要的朋友跟着小编来一起来学习吧
    2023-12-12

最新评论