【Springboot】数据层开发-集成MyBatis-Plus
Spring Boot 集成 MyBatis-Plus 是指在 Spring Boot 项目中,通过 MyBatis-Plus 官方提供的 Starter 依赖,结合 Spring Boot 约定优于配置的自动配置机制,实现 MyBatis-Plus 与 Spring Boot 生态的无缝整合。
MyBatis-Plus简介
MyBatis-Plus(简称 MP)是 MyBatis 的轻量级增强工具,遵循只做增强不做改变的核心原则,完全兼容 MyBatis 原生逻辑。
MyBatis-Plus源码及使用文档地址
官方地址:http://mp.baomidou.com
代码发布地址:
Github:https://github.com/baomidou/mybatis-plus
Gitee:https://gitee.com/baomidou/mybatis-plus
文档发布地址:https://baomidou.com/pages/24112f
MyBatis-Plus特性
无侵入式增强:仅做功能增强不修改 MyBatis 原生逻辑,引入后不会对现有工程产生任何影响,兼容所有 MyBatis 原生用法;
低性能损耗:启动时自动注入基础 CRUD 能力,性能几乎无损耗,支持直接面向对象的操作方式;
一站式 CRUD 能力:内置通用 Mapper、通用 Service 组件,仅需少量配置即可实现单表绝大部分 CRUD 操作;搭配强大的条件构造器,可满足各类复杂查询场景需求;
Lambda 表达式调用:支持基于 Lambda 的查询条件编写,依托类型推导避免字段名手写错误,提升代码健壮性;
灵活的主键生成策略:内置 4 种主键生成策略(如自增、雪花算法、UUID 等),可自由配置,完美解决主键生成问题;
ActiveRecord 模式支持:实体类只需继承 Model 基类,即可直接调用 CRUD 方法,简化数据操作代码;
全局通用操作自定义:支持全局通用方法注入,实现 “一次编写、全局复用(Write once, use anywhere)”;
内置代码生成器:支持通过代码或 Maven 插件快速生成 Mapper、Model、Service、Controller 全层代码,兼容模板引擎且支持自定义配置,大幅降低重复编码成本;
轻量化物理分页插件:基于 MyBatis 实现物理分页,配置完成后,分页查询与普通 List 查询操作一致,无需关注底层分页逻辑;
多数据库分页兼容:分页插件适配 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等主流数据库;
性能分析插件:可输出 SQL 语句及执行耗时,开发 / 测试阶段启用可快速定位慢查询,优化数据层性能;
全局拦截防护插件:智能分析并阻断全表 delete、update 等高风险操作,也可自定义拦截规则,有效预防误操作导致的数据风险。
Springboot集成MyBatis-Plus示例
创建 mybatis_plus 数据库及创建如下表
CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名 ',
`age` int(11) DEFAULT NULL COMMENT '年龄 ',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱 ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加数据
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

创建 Spring Boot 工程
引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
配置 application.yml 数据源类型和数据库信息
- 驱动类driver-class-name
spring boot 2.0 内置 jdbc5 驱动,驱动类使用 driver-class-name: com.mysql.jdbc.Driver
spring boot 2.1及以上内置 jdbc8 驱动,驱动类使用 driver-class-name: com.mysql.cj.jdbc.Driver
否则运行测试用例的时候会有 WARN 信息
- 连接地址url(取决于MySQL版本)
MySQL5.7版本的url:jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
MySQL8.0版本的url:jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
否则运行测试用例报告如下错误:java.sql.SQLException: The server time zone value’Öйú±ê׼ʱ¼ä’ is unrecognized or represents more
在 application.yml 中配置日志输出
mybatis-plus.mapper-locations 指定mapper文件路径
启动类编写
在 Spring Boot 启动类上添加 @MapperScan 注解,用于扫描 mapper 包
@SpringBootApplication
@MapperScan("com.qcby.mybatisPlus.mapper")
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args); }
}
idea中安装lombok插件
Lombok 是 Java 工具库,通过注解自动生成 getter/setter、构造器、toString() 等重复模板代码,核心是减少冗余,提高开发效率。
添加实体类,并通过 Lombok 注解简化模板代码编写
@Data //lombok注解
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
@Data 等价于同时添加 @Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor 这五个注解
@NoArgsConstructor 用于生成无参构造器,很多框架反射实例化对象时,必须依赖无参构造器
@AllArgsConstructor 用于生成全参构造器,一次性给所有字段赋值
使用 alt + 7 快捷键查看 User 类预编译后的结果

添加mapper文件
编写 UserMapper 接口继承 BaseMapper,泛型为操作的实体类型,BaseMapper 是 MyBatis-Plus 提供的模板 mapper,其中包含了基本的 CRUD 方法
//@Repository
public interface UserMapper extends BaseMapper<User> {
}
UserMapper 没有实现方法,正常情况下,Java 接口不能直接实例化,但 MyBatis-Plus 在运行时动态生成 UserMapper 的实现类,这个动态生成的实现类,会包含 BaseMapper 里所有 CRUD 方法的具体逻辑,而且会被 Spring 自动管理成Bean。
可能会在编译期有报错,由于IDEA 是编译时静态检查工具,UserMapper 没有显式的实现类,也没有加任何 Spring 能识别的 Bean 注解,IDEA 会有报错。可以在 mapper 接口上添加 @Repository 注解告诉 IDEA 这是个 Spring Bean,避免报错,但不添加注解程序也可以正常运行。
运行测试
@SpringBootTest
public class MybatisPlusDatabases {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectList(){
//selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有
userMapper.selectList(null).forEach(System.out::println);
}
}

更多推荐


所有评论(0)