MyBatis-Plus
简介
continew-starter-data-mp
是 ContiNew Starter 数据访问模块针对 MyBatis-Plus 框架的增强实现,提供了一系列便捷功能,简化数据访问层开发,提高开发效率。
MyBatis Plus
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
主要特性
- 默认配置优化:增加样板化配置,并预配置常用组件,包括:
- 分页插件(启用溢出处理)
- 防全表更新与删除插件
- MyBatis 默认配置(自动驼峰命名规则、日志配置)
- SQL 打印及性能分析配置(p6spy)
- 简化 Mapper 扫描:只需在配置文件中指定 Mapper 接口扫描包路径
- 通用查询注解:通过一个注解即可完成繁琐的 QueryWrapper 拼接
- 插件自动注入:Spring 容器中的插件会自动注入到 MyBatis Plus 拦截器中
- 提供 IService 及其实现:优化 MP 默认提供的 IService 接口及其实现类
- 扩展 BaseMapper:提供更丰富的基础方法,满足常见业务需求
- 提供 ID 生成器:集成 COSID 提供分布式 ID 生成器
- BaseEnum 支持:支持 BaseEnum 枚举字段转换
快速开始
引入依赖
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-data-mp</artifactId>
</dependency>
添加配置
配置示例
配置详情请查看:top.continew.starter.data.autoconfigure.MyBatisPlusExtensionProperties
。
yaml
--- ### MyBatis Plus 配置
mybatis-plus:
# Mapper XML 文件目录配置
mapper-locations: classpath*:/mapper/**/*Mapper.xml
# 类型别名扫描包配置
type-aliases-package: ${application.base-package}.**.model
## MyBatis 配置
configuration:
# MyBatis 自动映射策略
# NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射
auto-mapping-behavior: PARTIAL
## 全局配置
global-config:
banner: true
db-config:
# 主键类型(默认 assign_id,表示自行赋值)
# auto 代表使用数据库自增策略(需要在表中设置好自增约束)
id-type: ASSIGN_ID
## 扩展配置
extension:
enabled: true
# Mapper 接口扫描包配置
mapper-package: ${application.base-package}.**.mapper
# ID 生成器配置
id-generator:
type: COSID
# 分页插件配置
pagination:
enabled: true
db-type: MYSQL
已提供样板化配置,如需修改,直接覆盖即可。
yaml
--- ### MyBatis Plus 配置(https://baomidou.com/pages/56bac0/#%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE)
mybatis-plus:
# 启动时是否检查 MyBatis XML 文件的存在(默认:false 不检查)
check-config-location: true
## MyBatis 原生支持配置
configuration:
# 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名)到经典 Java 属性名 aColumn(驼峰命名)的类似映射
# 此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body,如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
map-underscore-to-camel-case: true
# MyBatis 自动映射时未知列或未知属性处理策略,通过该配置可指定 MyBatis 在自动映射过程中遇到未知列或者未知属性时如何处理
# NONE:不做任何处理 (默认值);WARNING:以日志的形式打印相关警告信息;FAILING:当作映射失败处理,并抛出异常和详细信息
auto-mapping-unknown-column-behavior: NONE
# 日志配置
# 默认:org.apache.ibatis.logging.slf4j.Slf4jImpl
# 更详细(会有性能损耗):org.apache.ibatis.logging.stdout.StdOutImpl
# 关闭(可单纯使用 p6spy 分析):org.apache.ibatis.logging.nologging.NoLoggingImpl
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
通用查询注解
通过 @Query
注解可以快速构建查询条件,避免繁琐的 QueryWrapper 拼接。
java
@Data
@Schema(description = "部门查询条件")
public class DeptQuery implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门名称
*/
@Schema(description = "部门名称", example = "测试部")
private String name;
/**
* 状态
*/
@Schema(description = "状态(1:启用;2:禁用)", example = "1")
private Integer status;
}
// 构建 QueryWrapper
LambdaQueryWrapper<DeptDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(query.getName()), DeptDO::getName, query.getName());
queryWrapper.eq(null != query.getStatus(), DeptDO::getStatus, query.getStatus());
java
@Data
@Schema(description = "部门查询条件")
public class DeptQuery implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门名称
*/
@Schema(description = "部门名称", example = "测试部")
@Query(type = QueryType.LIKE)
private String name;
/**
* 状态
*/
@Schema(description = "状态(1:启用;2:禁用)", example = "1")
@Query
private Integer status;
}
// 构建 QueryWrapper
QueryWrapper<DeptDO> queryWrapper = QueryWrapperHelper.build(query);
查询类型枚举类:top.continew.starter.data.enums.QueryType
类型 | 描述 |
---|---|
EQ | 等于 =,例如:WHERE age = 18 |
NE | 不等于 !=,例如:WHERE age != 18 |
GT | 大于 >,例如:WHERE age > 18 |
GE | 大于等于 >=,例如:WHERE age >= 18 |
LT | 小于 <,例如:WHERE age < 18 |
LE | 小于等于 <=,例如:WHERE age <= 18 |
BETWEEN | 范围查询,例如:WHERE age BETWEEN 10 AND 18 |
LIKE | 模糊查询,例如:WHERE nickname LIKE '%s%' |
LIKE_LEFT | 左模糊查询,例如:WHERE nickname LIKE '%s' |
LIKE_RIGHT | 右模糊查询,例如:WHERE nickname LIKE 's%' |
IN | 包含查询,例如:WHERE age IN (10, 20, 30) |
NOT_IN | 不包含查询,例如:WHERE age NOT IN (20, 30) |
IS_NULL | 空值查询,例如:WHERE email IS NULL |
IS_NOT_NULL | 非空查询,例如:WHERE email IS NOT NULL |
核心依赖
依赖 | 描述 |
---|---|
top.continew.starter:continew-starter-data-core | 数据访问模块 - 核心模块 |
cn.hutool:hutool-db | Hutool 数据库模块(在 JDBC 基础上封装的数据库操作工具类,通过包装,使用 ActiveRecord 思想操作数据库) |
com.baomidou:mybatis-plus-spring-boot3-starter | MyBatis Plus(MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率) |
com.baomidou:mybatis-plus-jsqlparser | MyBatis Plus jsqlparser 适配(包含原扩展模块内容) |
p6spy:p6spy | P6Spy(SQL 性能分析组件) |
me.ahoo.cosid:cosid-spring-boot-starter(optional) | CosId(通用、灵活、高性能的分布式 ID 生成器) |
参考资料
- MyBatis Plus 官方文档:https://baomidou.com/