mybatisplus使用(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Java 后端开发中,数据库操作是应用的核心功能之一。MyBatis 作为一款轻量级的 ORM 框架,凭借其灵活性和易用性,在开发者社区中广受欢迎。然而,随着业务复杂度的提升,开发者逐渐发现 MyBatis 的 XML 配置方式存在重复代码多、维护成本高等痛点。MyBatis-Plus 的出现,正是为了解决这些问题,它在 MyBatis 的基础上提供了增强工具,通过简化 CRUD 操作、内置通用 Mapper、提供代码生成器等功能,显著提升了开发效率。本文将从基础概念、核心功能到实战案例,系统讲解 mybatisplus使用 的关键知识点,帮助开发者快速掌握这一工具。


环境搭建与快速入门

依赖引入

使用 MyBatis-Plus 需要先在项目中引入相关依赖。以 Maven 为例,在 pom.xml 中添加以下配置:

<dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-boot-starter</artifactId>  
    <version>3.5.2</version>  
</dependency>  

核心配置

在 Spring Boot 项目中,通过 application.yml 配置数据库连接信息:

spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8  
    username: root  
    password: root  
    driver-class-name: com.mysql.cj.jdbc.Driver  

此外,需要创建一个配置类开启 MyBatis-Plus 的自动映射功能:

@Configuration  
public class MyBatisPlusConfig {  
    @Bean  
    public MybatisPlusInterceptor mybatisPlusInterceptor() {  
        return new MybatisPlusInterceptor();  
    }  
}  

核心功能详解

实体类与 Mapper 的快速定义

MyBatis-Plus 通过 @TableName@TableId 注解简化了实体类的定义。例如,定义一个 User 实体类:

@Data  
@TableName("t_user")  
public class User {  
    @TableId(value = "user_id", type = IdType.AUTO)  
    private Long userId;  
    private String name;  
    private Integer age;  
    private String email;  
}  

对应的 Mapper 接口无需编写 XML 文件,直接继承 BaseMapper<User>

public interface UserMapper extends BaseMapper<User> {  
}  

基础 CRUD 操作

MyBatis-Plus 提供了开箱即用的通用方法,例如:

// 新增用户  
User user = new User();  
user.setName("张三");  
user.setAge(25);  
userMapper.insert(user);  

// 查询用户  
User queryUser = userMapper.selectById(1L);  

// 更新用户信息  
user.setName("李四");  
userMapper.updateById(user);  

// 删除用户  
userMapper.deleteById(1L);  

比喻说明
可以将 BaseMapper 比作一个“自动化工厂”,它预置了常见的操作模板,开发者只需提供实体类和表名,即可直接调用这些功能,避免了重复编写 SQL 语句的繁琐过程。


条件构造器:灵活的查询与更新

QueryWrapper 的使用

QueryWrapper 是 MyBatis-Plus 提供的条件构造器,支持链式调用,能够动态拼接查询条件。例如:

// 查询年龄大于20且邮箱以@qq.com结尾的用户  
QueryWrapper<User> wrapper = new QueryWrapper<>();  
wrapper.gt("age", 20)  
       .likeRight("email", "@qq.com");  

List<User> users = userMapper.selectList(wrapper);  

更新操作的条件构造

UpdateWrapper 可以同时定义更新条件和更新值:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();  
updateWrapper.eq("user_id", 1L)  
             .set("age", 30);  

userMapper.update(null, updateWrapper);  

形象比喻
条件构造器就像“智能拼图”,开发者只需像搭积木一样组合条件,框架会自动将这些条件翻译成对应的 SQL 语句,既安全又高效。


高级功能与优化技巧

逻辑删除

默认情况下,MyBatis-Plus 会将删除操作转换为逻辑删除(即标记删除状态)。需在实体类中添加 @TableLogic 注解:

@TableLogic  
private Integer deleted; // 0表示未删除,1表示已删除  

此时,deleteById() 方法会自动更新 deleted 字段,而非物理删除数据。

分页查询

通过 Page 对象实现分页:

Page<User> page = new Page<>(1, 10); // 第一页,每页10条  
Page<User> result = userMapper.selectPage(page, wrapper);  

性能优化:自动填充与乐观锁

  • 自动填充:通过 MetaObjectHandler 实现字段的自动赋值(如创建时间、更新时间)。
  • 乐观锁:在实体类中添加 @Version 注解,框架会自动处理版本号的校验与更新。

代码生成器:自动化开发利器

MyBatis-Plus 提供了代码生成器 AutoGenerator,能够自动生成实体类、Mapper、Service 等代码。例如:

AutoGenerator generator = new AutoGenerator();  
generator.setGlobalConfig(...)  
          .setDataSource(...)  
          .setStrategy(...)  
          .setPackageInfo(...);  
generator.execute();  

使用场景
当需要快速搭建基础数据层时,代码生成器能显著减少重复劳动,开发者只需关注业务逻辑的编写。


常见问题与解决方案

1. 表名与实体类不一致

通过 @TableName 注解指定表名即可:

@TableName("user_table")  
public class User {}  

2. 自定义 SQL 与 MyBatis-Plus 结合

可通过 @Select 注解或 XML 文件扩展功能,例如:

@Select("SELECT * FROM t_user WHERE name = #{name}")  
List<User> selectByName(@Param("name") String name);  

3. 性能问题优化

  • 使用 select 方法指定查询字段,避免全表扫描。
  • 对高频查询字段添加索引。

结论

通过本文的讲解,读者可以掌握 mybatisplus使用 的核心方法与高级技巧。MyBatis-Plus 通过简化重复代码、提供灵活的条件构造器、内置性能优化功能,成为 Java 后端开发中不可或缺的工具。无论是快速搭建原型,还是处理复杂业务场景,开发者都能借助其强大的功能提升开发效率。建议读者在实际项目中结合代码生成器和逻辑删除等特性,进一步探索 MyBatis-Plus 的更多可能性。

最新发布