Hello,大家好,我是Feri,一枚十多年的程序员,同时也是一名在读研究生,关注我,且看一个平凡的程序员如何在自我成长,CodingSir是我想打造一个编程社区,只为各位小伙伴提供编程相关干货知识,希望在自我蜕变的路上,我们一起努力,努力什么时候开始都不晚,我,从现在开始做起!
一、前言
Hello,终于过完十一假期了,也是2024年的最后一个假期,假期断更啦,今天重新出发,珍惜2024余下的时光,让我们一起逆袭吧!
我看最近也有小伙伴私聊我,想让搞一篇SpringBoot3版本整合最新版Mybatis-plus的教程方便自己日常无缝迁移,那么来了,本篇教程就是基于SpringBoot3.3.4整合最新版的Mybatis-plus的3.5.7的SpringBoot3专属版本,希望大家可以和之前的Mybatis做一下对比,俗话说,没有对比,就没有伤害!其实人生亦是如此,不要去对比太多,每一个人都是与众不同的,我们每一个人都是这个世界的闪光点,废话不多说,来,干货走起来!
二、实现
2.1 Mybatis-plus概述
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。核心特性,如下所示:
1.润物无声
只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
2.效率至上
只需简单配置,即可快速进行单表 CRUD 操作,从而节省大量时间。
3.丰富功能
代码生成、自动分页、逻辑删除、自动填充、拦截器等功能一应俱全。
4.广泛认可
连续 5 年获得开源中国年度最佳开源项目殊荣,Github 累计 16K Star。
2.2 Mybatis-plus核心功能
日常开发中,特别是中小型企业,使用Mybatis-plus平替Mybatis绝对好用,比如我自己接私活,都喜欢用它,简单省事,那么在开发中,我们主要使用Mybatis-plus的哪些功能呢,来解密一下:
1.自带的单表的CRUD
这样我们就不需要自己动手写单表的CRUD操作了,只需要简单的注解配合BaseMapper<T>接口即可实现丰富的CRUD操作,贼好使!
2.分页插件
Mybatis-plus自带了分页插件,相对于PageHelper还是差不多,配合Mybatis-plus好用的很,MyBatis-Plus 的分页插件 PaginationInnerInterceptor
提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。关键支持很多数据库哈
3.条件构造器
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。谁用谁知道,好用的一批!
4.代码生成器
MyBatis-Plus 代码生成器,通过 builder 模式可以快速生成你想要的代码,快速且优雅。不过一般不一定使用哈,主要是目前代码生成器太多啦,一般选择自己习惯的即可
5.流式查询
MyBatis-Plus 从 3.5.4
版本开始支持流式查询,这是 MyBatis 的原生功能,通过 ResultHandler
接口实现结果集的流式查询。这种查询方式适用于数据跑批或处理大数据的业务场景。
在 BaseMapper
中,新增了多个重载方法,包括 selectList
, selectByMap
, selectBatchIds
, selectMaps
, selectObjs
,这些方法可以与流式查询结合使用。
6.批量操作
批量操作是一种高效处理大量数据的技术,它允许开发者一次性执行多个数据库操作,从而减少与数据库的交互次数,提高数据处理的效率和性能。在MyBatis-Plus中,批量操作主要用于以下几个方面:
- 数据插入(Insert):批量插入是批量操作中最常见的应用场景之一。通过一次性插入多条记录,可以显著减少SQL语句的执行次数,加快数据写入速度。这在数据迁移、初始化数据等场景中尤为有用。
- 数据更新(Update):批量更新允许同时修改多条记录的特定字段,适用于需要对大量数据进行统一变更的情况,如批量修改用户状态、更新产品价格等。
- 数据删除(Delete):批量删除操作可以快速移除数据库中的多条记录,常用于数据清理、用户注销等场景。
7.……
还有其他不少功能,这里不展开细说,如有需要可以私信我,后续可以继续给大家展开来聊
2.3 SpringBoot3整合mybatis-plus实操
我们使用SpringBoot3.3.4版本整合Mybatis-plus3.5.7的SpringBoot3版本,Mybatis-plus有2套,版本号一样,但是一个是针对SpringBoot2的,另一个是针对SpringBoot3的,千万注意不要使用错误啦!
0.准备数据库的表
直接使用官网提供的SQL语句:
CREATE TABLE `user`
(
id BIGINT NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
INSERT INTO `user` (id, name, age, email) VALUES
(1, 'CodingSir', 18, 'test1@baomidou.com'),
(2, 'Feri', 20, 'test2@baomidou.com'),
(3, '邢先生', 28, 'test3@baomidou.com'),
(4, '邢帅帅', 21, 'test4@baomidou.com'),
(5, '逆袭先生', 24, 'test5@baomidou.com');
2.创建SpringBoot项目,务必选择SpringBoot3的版本
3.pom.xml依赖jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.23</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
4.基于EasyCode生成源代码
5.修改生成的代码
主要修改实体类,和新增R类和ApiController
6.实现配置
在application.yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///db_codingsir
username: root
password: xing1688
type: com.alibaba.druid.pool.DruidDataSource
在开关类中实现配置(其实应该单独配置,懒省事啦)
@SpringBootApplication
@MapperScan(basePackages = "com.feri.springbootmybatisplus.dao")
public class SpringBootMybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisplusApplication.class, args);
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
}
7.运行测试
2.4 Mybatis-plus重点归纳
来,代码写完了,梳理一下,刚刚代码中的重点:
1.实体类
针对entity层,可以使用如下三个注解
序号 | 注解名称 | 范围 | 作用 |
1 | @TableName | 修饰类 | 标记类名和表名不一致 |
2 | @TableId | 修饰属性 | 标记主键,设置自增的ID |
3 | @TableField | 修饰属性 | 设置属性对应的数据库字段信息 |
@Data
@TableName("user")
public class User{
//主键ID
private Long id;
//姓名
private String name;
//年龄
private Integer age;
//邮箱
private String email;
}
2.持久层
Mybatis-plus针对持久层提供了接口:BaseMapper
BaseMapper 是 Mybatis-Plus 提供的一个通用 Mapper 接口,它封装了一系列常用的数据库操作方法,包括增、删、改、查等。通过继承 BaseMapper,开发者可以快速地对数据库进行操作,而无需编写繁琐的 SQL 语句。
public interface UserDao extends BaseMapper<User> {
}
3.业务接口层
IService 是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询和分页等。通过继承 IService 接口,可以快速实现对数据库的基本操作,同时保持代码的简洁性和可维护性。
IService 接口中的方法命名遵循了一定的规范,如 get 用于查询单行,remove 用于删除,list 用于查询集合,page 用于分页查询,这样可以避免与 Mapper 层的方法混淆。
public interface UserService extends IService<User> {
}
4.业务实现层
还有配套的ServiceImpl<Dao, Entity>是对IService的实现,这样我们就无需实现即可使用
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
}
5.分页插件
分页插件的使用,必须进行配置,不然不会生效哈
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
三、总结
这个就是使用SpringBoot3.3.4版本整合的最新版本的Mybatis-plus的简单使用,其实你会发现和之前SpringBoot2的时候差不多,在使用上没有什么改变。具体在项目开发的时候进行技术选型的时候,还是需要团队自己评估使用Mybatis还是Myabtis-plus。如果你还有什么想继续学习的,欢迎随时联系我,持续给大家带来干货,助力我们快乐工作,幸福生活!
源码地址给大家,有需要的自取:SpringBootMybatisplus: SpringBoot3.3.4整合最新版Mybatis-plus,欢迎使用
好啦,今天这篇就打这啦,有任何问题可以随时进行评论交流,如果你有什么想要Feri更新的,请关注CodingSir查看更新的内容,也可以随时关注,私信我哟,成长的路上,有你们相伴,真是人生一大幸事!