MyBatis-Plus 入门教程之一
大纲
- MyBatis-Plus 入门教程之一
- MyBatis-Plus 入门教程之二
- MyBatis-Plus 入门教程之三
- MyBatis-Plus 入门教程之四
- MyBatis-Plus 入门教程之五
- MyBatis-Plus 入门教程之六
- MyBatis-Plus 入门教程之七
前言
相关资源
版本说明
本文的教程内容是基于 MyBatis-Plus 3.5.2
版本编写的,若你使用的是 2.x
或其他版本,可能会有部分知识点、案例代码不兼容,一切以 MyBatis-Plus 官方文档为准。
MyBatis-Plus 介绍
MyBatis-Plus 是一款非常强大的 MyBatis 增强工具包,只做增强不做改变,为简化开发、提高效率而生。在不用编写任何 SQL 语句的情况下,可以极其方便地实现单一、批量、分页等操作。
MyBatis-Plus 特性
特色功能:
无侵入
:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小
:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作
:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用
:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成
:支持多达 4 种主键策略(内置分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题支持 ActiveRecord 模式
:支持 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
支持数据库:
- MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb
- 达梦数据库,虚谷数据库,人大金仓数据库,南大通用 (华库) 数据库,南大通用数据库,神通数据库,瀚高数据库
MyBatis-Plus 架构
MyBatis-Plus 生态
- MybatisX - 一款全免费且强大的 IDEA 插件,支持跳转、自动补全生成 SQL、代码生成。
- Mybatis-Mate - MyBatis-Plus 的企业级模块,支持分库分表、数据审计、字段加密、数据绑定、数据权限、表结构自动生成 SQL 维护等高级特性。
- Dynamic-Datasource - 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。
- Shaun - 基于 Pac4J-JWT 的 WEB 安全组件,快速集成。
- Lock4j - 基于 SpringBoot 且同时支持 RedisTemplate、Redission、Zookeeper 的分布式锁组件。
- Kaptcha - 基于 SpringBoot 和 Google Kaptcha 的简单验证码组件。
MyBatis-Plus 学习路线
Spring 快速启动案例
这里主要介绍 Spring 如何快速整合 MyBatis 与 MyBatis-Plus。本节所需的案例代码,可以直接从 GitHub 下载对应章节 mybatis-plus-lesson-01
。
软件版本说明
名称 | 版本 |
---|---|
Druid | 1.2.11 |
Spring | 5.3.2 |
Logback | 1.2.3 |
MyBatis-Plus | 3.5.2 |
初始化数据库
1 | CREATE DATABASE `mybatis_plus_lesson` DEFAULT CHARACTER SET utf8mb4; |
引入 Maven 依赖
值得注意的是,这里不需要单独引入 MyBatis 与 MyBatis-Spring 的依赖,否则会引起版本冲突,这是因为 MyBatis-Plus 会自动维护它们的版本。
1 | <properties> |
创建项目配置文件
数据库配置文件
在 /src/main/resources
目录下创建 db.properties
配置文件,其中的配置内容如下:
1 | root = |
Logback 配置文件
在 /src/main/resources
目录下创建 logback.xml
配置文件,其中的配置内容如下:
1 |
|
MyBatis 配置文件
在 /src/main/resources
目录下创建 mybatis-config.xml
配置文件,用于存放 MyBatis 的全局核心配置信息,其中的配置内容如下:
1 |
|
Spring 配置文件
在 /src/main/resources
目录下创建 application.xml
配置文件,Spring 整合 MyBatis + MyBatis-Plus 的核心配置信息就写在里面(也就是定义 SqlSessionFactoryBean
的 Bean),其中的配置内容如下:
MyBatis-Plus 2.x 版本配置
提示
MyBatis-Plus 2.x 的 Spring 详细配置参数可看 这里。
当使用的 MyBatis-Plus 为 2.x
版本时(如 2.3.3
版本),具体的配置内容如下:
1 |
|
提示
若不希望在项目中单独创建 MyBatis 的全局配置文件,可以使用 MybatisConfiguration
定义 MyBatis 的原生配置内容,这样就不再需要创建并指定 MyBatis 的全局配置文件了,配置示例如下:
1 | <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"> |
MyBatis-Plus 3.x 版本配置
提示
MyBatis-Plus 3.x 的 Spring 详细配置参数可看 这里。
当使用的 MyBatis-Plus 为 3.5
版本时(如 3.5.2
版本),具体的配置内容如下:
1 |
|
提示
若不希望在项目中单独创建 MyBatis 的全局配置文件,可以使用 MybatisConfiguration
定义 MyBatis 的原生配置内容,这样就不再需要创建并指定 MyBatis 的全局配置文件了,配置示例如下:
1 | <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"> |
通用 CRUD 代码
在项目开发中,使用 MyBatis 与 MyBatis-Plus 编写 CRUD 代码的区别:
基于 Mybatis 的方式
- 需要编写 Mapper 接口,并手动编写 CRUD 方法
- 提供 SQL 映射文件,并手动编写每个 CRUD 方法对应的 SQL 语句
基于 MyBatis-Plus 的方式
- 简单的 CRUD 业务只需要创建 Mapper 接口,并继承
BaseMapper
接口,这就是使用 MyBatis-Plus 所需要的操作,甚至可以不创建 SQL 映射文件
- 简单的 CRUD 业务只需要创建 Mapper 接口,并继承
JavaBean 类
1 | public class Employee { |
Mapper 接口
1 | public interface EmployeeMapper extends BaseMapper<Employee> { |
SQL 映射文件
1 |
|
Junit 单元测试类
- 方式一:通过 IOC 容器测试
1 | public class IocContainerTest { |
- 方式二:通过 Spring + Junit 测试
1 |
|
执行上述的单元测试代码后,若控制台输出下面类似的日志信息,则说明 Spring 与 MyBatis-Plus 正常工作。
1 | 2022-09-01 21:10:50.534 [main] DEBUG com.clay.mybatis.dao.EmployeeMapper.selectById - ==> Preparing: SELECT id,last_name,gender,email,age FROM t_employee WHERE id=? |
SpringBoot 快速启动案例
这里主要介绍 SpringBoot 如何快速整合 MyBatis 与 MyBatis-Plus,本节所需的案例代码,可以直接从 GitHub 下载对应章节 mybatis-plus-lesson-02
。
软件版本说明
名称 | 版本 |
---|---|
Druid | 1.2.11 |
SpringBoot | 2.7.3 |
MyBatis-Plus | 3.5.2 |
初始化数据库
1 | CREATE DATABASE `mybatis_plus_lesson` DEFAULT CHARACTER SET utf8mb4; |
引入 Maven 依赖
值得注意的是,这里不需要单独引入 MyBatis 与 MyBatis-Spring 的依赖,否则会引起版本冲突,这是因为 MyBatis-Plus 会自动维护它们的版本。
1 | <properties> |
SpringBoot 配置文件
提示
- SpringBoot 2.0(内置
jdbc5
驱动),驱动类使用的是driver-class-name: com.mysql.jdbc.Driver
- SpringBoot 2.1 及以上(内置
jdbc8
驱动),驱动类使用的是driver-class-name: com.mysql.cj.jdbc.Driver
- MySQL 5.7 版本的 URL 为
jdbc:mysql://127.0.0.1:3306/mybatis_plus_lesson?characterEncoding=utf-8&useSSL=false
- MySQL 8.0 版本的 URL 为
jdbc:mysql://127.0.0.1:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
,若不指定serverTimezone=GMT%2B8
会导致连接 MySQL 时抛出异常
MyBatis-Plus 2.x 版本配置
提示
- MyBatis-Plus 2.x 的 SpringBoot 详细配置参数可看 这里。
当使用的 MyBatis-Plus 为 2.x
版本时(如 2.3.3
版本),具体的配置内容如下:
1 | spring: |
若项目中有全局的 MyBatis 配置文件(XML),可以将其路径配置到 MyBatis-Plus 的 confifigLocation
中,如下所示:
1 | mybatis-plus: |
MyBatis-Plus 3.x 版本配置
提示
MyBatis-Plus 3.x 的 SpringBoot 详细配置参数可看 这里。
当使用的 MyBatis-Plus 为 3.5
版本时(如 3.5.2
版本),具体的配置内容如下:
1 | spring: |
若项目中有全局的 MyBatis 配置文件(XML),可以将其路径配置到 MyBatis-Plus 的 confifigLocation
中,如下所示:
1 | mybatis-plus: |
通用 CRUD 代码
在项目开发中,使用 MyBatis 与 MyBatis-Plus 编写 CRUD 代码的区别:
基于 Mybatis 的方式
- 需要编写 Mapper 接口,并手动编写 CRUD 方法
- 提供 SQL 映射文件,并手动编写每个 CRUD 方法对应的 SQL 语句
基于 MyBatis-Plus 的方式
- 简单的 CRUD 业务只需要创建 Mapper 接口,并继承
BaseMapper
接口,这就是使用 MyBatis-Plus 所需要的操作,甚至可以不创建 SQL 映射文件
- 简单的 CRUD 业务只需要创建 Mapper 接口,并继承
JavaBean 类
1 | public class Employee { |
Mapper 接口
1 | public interface EmployeeMapper extends BaseMapper<Employee> { |
SQL 映射文件
1 |
|
SpringBoot 启动类
通过 @MapperScan
注解来扫描 Mapper 接口。
1 |
|
Junit 单元测试类
1 |
|
执行上述的单元测试代码后,若控制台输出下面类似的日志信息,则说明 SpringBoot 与 MyBatis-Plus 正常工作。
1 | ==> Preparing: INSERT INTO t_employee ( last_name, gender, email, age ) VALUES ( ?, ?, ?, ? ) |