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 的更多可能性。