Mybatis-Plus
Mybatis-Plus
组件名称:blade-data-mybatis-plus-spring-boot-starter
这里针对基于Mybatis-plus的ORM框架进行了一些封装和声明,主要是为了解决一些常见的问题,例如:分页插件、自动填充、逻辑删除、乐观锁等的公共自动配置,方便上层直接使用。
具体的使用方式可以参考Mybatis-plus官方文档,这里不再赘述。
主要功能
- 公共字段实体定义
- 默认字段自动填充配置
- 乐观锁插件打开
- 分页插件打开
- 数据库方言配置
- 提供一个BaseRepository仓库层,提供一些常用的方法
- 数据权限
引入依赖
implementation("team.aikero.blade:blade-mybatis-plus-spring-boot-starter:${latestVersion}")<dependency>
<groupId>team.aikero.blade</groupId>
<artifactId>blade-mybatis-plus-spring-boot-starter</artifactId>
<version>${latestVersion}</version>
</dependency>使用
无需任何配置,引入依赖即可。
公共实体
我们公共的表字段有:deleted、creator_id、creator_name、created_time、reviser_id、reviser_name、revised_time 鉴于某一表不一定全部需要所有的字段,默认提供了几组公共实体,开发者可以根据自己的需要选择继承。
- 基础实体,包含字段:
deleted、creator_id、created_time注意在createdTime是val类型,初始化后不可修改
查看代码(点击展开)
abstract class BaseEntity {
/**
* 是否删除:0否 1 是
*/
@TableField(value = "deleted", fill = FieldFill.INSERT)
var deleted: Int? = null
/**
* 创建人id
*/
@TableField(value = "creator_id", fill = FieldFill.INSERT)
var creatorId: Long? = null
/**
* 创建时间
*/
@TableField(value = "created_time", fill = FieldFill.INSERT)
val createdTime: LocalDateTime? = null
}- 包含创建人名称的基础实体,包含字段:
deleted、creator_id、created_time、creator_name
查看代码(点击展开)
open class BaseEntityWithNamed : BaseEntity() {
/**
* 创建人名称
*/
@TableField(value = "creator_name", fill = FieldFill.INSERT)
var creatorName: String? = null
}- 包含修改人的基础实体
查看代码(点击展开)
open class BaseEntityWithNamedAndReviser : BaseEntityWithNamed() {
/**
* 修改人id
*/
@TableField(value = "reviser_id", fill = FieldFill.INSERT_UPDATE)
var reviserId: Long? = null
/**
* 修改人名称
*/
@TableField(value = "reviser_name", fill = FieldFill.INSERT)
var reviserName: String? = null
/**
* 更新时间
*/
@TableField(value = "revised_time", fill = FieldFill.INSERT_UPDATE)
var revisedTime: LocalDateTime? = null
}- 包含修改人的基础实体
查看代码(点击展开)
open class BaseEntityWithReviser : BaseEntity() {
/**
* 修改人id
*/
@TableField(value = "reviser_id", fill = FieldFill.INSERT_UPDATE)
var reviserId: Long? = null
/**
* 更新时间
*/
@TableField(value = "revised_time", fill = FieldFill.INSERT_UPDATE)
var revisedTime: LocalDateTime? = null
}审计字段填充
利用Mybatis-Plus的MetaObjectHandler实现公共字段的填充
- 插入
填充字段:deleted、creator_id、creator_name、created_time、reviser_id、reviser_name、revised_time 填充规则:字段设置填充策略INSERT或者INSERT_UPDATE,字段对应的值为空才进行填充
- 更新
填充字段:reviser_id、reviser_name、revised_time 填充规则:字段设置填充策略为UPDATE或者INSERT_UPDATE,字段对应的值不为空也会填充进行覆盖
乐观锁
默认已经配置
/**
* 乐观锁插件
*/
@Bean
@ConditionalOnMissingBean
fun optimisticLockerInnerInterceptor(): OptimisticLockerInnerInterceptor = OptimisticLockerInnerInterceptor()如何使用参考官网文档:乐观锁
分页插件
如何使用参考官网文档:分页插件
数据权限
多租户
Blade提供的多租户功能是基于表维度隔离,即通过在表中使用TenantID来区分租户的数据模式。Mybatis-plus原生支持这一功能。
在Blade中,增删改查方法会自动添加租户ID字段,无需手动处理,即可实现通过租户ID进行数据过滤的效果。
使用
- 目标表添加租户字段
create table demo_table(
id bigint not null comment 'id' primary key,
name bigint null comment '名称',
tenant_id bigint null comment '租户id'
)- 添加租户表配置
blade:
tenant:
# 启用租户功能
enabled: true
# mybatisplus 按需添加
mybatis-plus:
column: tenant_id
tables:
- demo_table
- test_table
# jimmer 按需添加
jimmer:
column: tenant_id
tables:
- demo_table
- test_table前端请求时携带Token请求头(包含租户id)
后端curd操作时,无须手动添加租户字段,blade会自动添加租户字段。
DemoTable data = demoTableMapper.selectById(1);
// 生成的sql:select * from demo_table where id = ? and tenant_id=1