自动建表注解

只有小部分注解,进行了轻微改动,基本所有注解均是通用的,详细教程可以直接参考A.CTable官方。

@Table

  1. 新增primary属性,对应@TablePrimary
  2. isNull属性为了一致性改为了isNotNull属性默认false
  3. 新增dsName属性,对应@DsName

@TableCharset

@TableComment

@TableEngine

@TablePrimary

新增注解,等同@Table中的primary属性,在多个Entity映射一张表的情况下,确定主Entity是哪个,数据表生成的时候根据主表来生成。

@DsName

新增注解,等同@Table中的dsName属性,在多数据源场景下,指定某个表的数据源。

@IgnoreTable

@EnableTimeSuffix

@Column

@ColumnComment

@ColumnDefault

原@DefaultValue,跟本框架中的数据插入的时候指定默认值的注解重名了,因此把这里改名字了

@ColumnType

@IsAutoIncrement

@IsKey

@IsNotNull

@IsNativeDefValue

@Unique

@Index

@IgnoreUpdate


数据填充类注解

@OptionDate

描述:

自动赋值数据操作时间。需结合mybatis-plus原框架注解[@TableField](https://mybatis.plus/guide/annotation.html#tablefield) (该注解的使用请查看官方文档,懒得看的话,请往下读,有惊喜)一并使用才有效。

被标注的字段,在可允许的类型范围(StringLonglongDateLocalDateLocalDateTime)内,数据被操作的情况下,会自动被赋值上当前时间。

如果使用String的话需要同时指明**_format_**参,用以确认格式化后的样式。

字段:

属性 类型 必需 默认值 描述
format String 非必需 yyyy-MM-dd HH:mm:ss 如果字段类型为String,需要制定字符串格式
override boolean 非必需 true 若对象上存在值,是否覆盖

扩展注解:

注解 描述
@InsertOptionDate 基于@OptionDate
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据插入的时候,自动赋值数据操作时间。
@UpdateOptionDate 基于@OptionDate
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据更新注意:update(Wrapper updateWrapper)方法除外)的时候,自动赋值数据操作时间。
@InsertUpdateOptionDate 基于@OptionDate
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据插入更新注意:update(Wrapper updateWrapper)方法除外)的时候,自动赋值数据操作时间。

@OptionUser

描述:

指定实现方式,自动赋值数据操作人员信息。需结合mybatis-plus原框架注解[@TableField](https://mybatis.plus/guide/annotation.html#tablefield) (该注解的使用请查看官方文档,懒得看的话,请往下读,有惊喜)一并使用才有效。

被标注的字段,会根据@OptionUserAuditHandler的实现来返回对应的值。

通常的实现方案都是用户信息(id、name等)放入header中,全局定义函数来获取。

字段:

属性 类型 必需 默认值 描述
value Class> 必需 自定义用户信息生成方式
override boolean 非必需 true 若对象上存在值,是否覆盖

扩展注解:

注解 描述
@InsertOptionUser 基于@OptionUser
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据插入的时候,自动赋值操作人信息。
@UpdateOptionUser 基于@OptionUser
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据更新注意:update(Wrapper updateWrapper)方法除外)的时候,自动赋值操作人信息。
@InsertUpdateOptionUser 基于@OptionUser
的拓展,无需结合[@TableField](https://mybatis.plus/guide/annotation.html#tablefield)
,数据插入更新注意:update(Wrapper updateWrapper)方法除外)的时候,自动赋值操作人信息。

@DefaultValue

描述:

数据插入的时候字段的默认值,支持类型:String, Integer, int, Long, long, Boolean, boolean, Double, double, Float, float, BigDecimal, Date, LocalDate, LocalDateTime,枚举(仅支持枚举的名字作为默认值)

字段:

属性 类型 必需 默认值 描述
value String 必需 默认值
format boolean 非必需 yyyy-MM-dd HH:mm:ss 如果字段类型为时间类型(Date,LocalDateTime等),需要制定字符串格式

关联查询类注解

@BindField

描述:

绑定其他Entity的某个字段,可实现一对一、一对多的绑定查询。

注意:所有Bind注解底层均依赖相关Entity的Mapper,且Mapper必须继承MybatisPlus的BaseMapper

字段:

属性 类型 必需 默认值 描述
entity Class<?> 被关联的Entity
field String 被关联的Entity的具体字段
conditions @JoinCondition[] 关联Entity所需要的条件
customCondition String 被关联的Entity所需要的额外条件,通常指被关联的Entity自身的特殊条件,例如:enable=1 and is_deleted=0
orderBy @JoinOrderBy[] 排序条件,被关联的Entity或者字段为结果集的时候生效
last String 追加到sql最后的字符串,如:limit 1

@BindEntity

描述:

绑定其他Entity,可实现一对一、一对多的绑定查询。

注意:所有Bind注解底层均依赖相关Entity的Mapper,且Mapper必须继承MybatisPlus的BaseMapper

字段:

属性 类型 必需 默认值 描述
entity Class<?> 字段声明类型 被关联的Entity,不再需要显示的指明,默认取字段上的声明类型
conditions @JoinCondition[] 关联Entity所需要的条件
customCondition String 被关联的Entity所需要的额外条件,通常指被关联的Entity自身的特殊条件,例如:enable=1 and is_deleted=0
orderBy @JoinOrderBy[] 排序条件,被关联的Entity或者字段为结果集的时候生效
last String 追加到sql最后的字符串,如:limit 1
deepBind boolean false 深度绑定,列表数据的情况下会产生性能问题。(不熟悉的,不建议使用)

@JoinCondition

描述:

绑定条件

字段:

属性 类型 必需 默认值 描述
selfField String 关联Entity所需的自身字段
joinField String “id” 被关联Entity的关联字段,默认为关联Entity的id

@JoinOrderBy

描述:

绑定结果的排序

字段:

属性 类型 必需 默认值 描述
field String 被关联的Entity中结果集排序字段
isAsc boolean false 排序,true:正序,false:倒序

@BindFieldByMid

描述:

通过中间关系Entity的形式绑定其他Entity的某个字段,可实现一对一、一对多、多对多的绑定查询。

注意:所有Bind注解底层均依赖相关Entity的Mapper,且Mapper必须继承MybatisPlus的BaseMapper

字段:

属性 类型 必需 默认值 描述
entity Class<?> 被关联的Entity
field String 被关联的Entity的具体字段
conditions @MidCondition 中间表关联条件
customCondition String 被关联的Entity所需要的额外条件,通常指被关联的Entity自身的特殊条件,例如:enable=1 and is_deleted=0
orderBy @JoinOrderBy[] 排序条件,被关联的Entity或者字段为结果集的时候生效
last String 追加到sql最后的字符串,如:limit 1

@BindEntityByMid

描述:

通过中间关系Entity的形式绑定其他Entity,可实现一对一、一对多、多对多的绑定查询。

注意:所有Bind注解底层均依赖相关Entity的Mapper,且Mapper必须继承MybatisPlus的BaseMapper

字段:

属性 类型 必需 默认值 描述
entity Class<?> 被关联的Entity
conditions @MidCondition 中间表关联条件
customCondition String 被关联的Entity所需要的额外条件,通常指被关联的Entity自身的特殊条件,例如:enable=1 and is_deleted=0
orderBy @JoinOrderBy[] 排序条件,被关联的Entity或者字段为结果集的时候生效
last String 追加到sql最后的字符串,如:limit 1
deepBind boolean false 深度绑定,列表数据的情况下会产生性能问题。(不熟悉的,不建议使用)

@MidCondition

描述:

中间表条件描述

字段:

属性 类型 必需 默认值 描述
midEntity Class<?> 中间表Entity,需要对应创建其Mapper
selfField String “Id” 关联Entity所需的自身字段
selfMidField String 关联Entity所需的自身字段,中间表字段名
joinField String “id” 被关联Entity的关联字段
joinMidField String 被关联Entity的关联字段,中间表字段名

数据同步注解

@DataSource

描述:

通过注解指定数据来源,底层框架自动通过Spring中的事件机制监听EntityUpdateEvent事件,完成数据自动更新。在BaseRepository的基类中,默认实现了updateById、updateBatchById两个方法自动发布EntityUpdateEvent事件,所以只要对应Entity的Repository继承了BaseRepository便具备了通过ID更新数据的自动同步数据的功能。

拓展:分布式情况下如何同步其他服务的数据_?不妨先想一想。其实sourceName属性就是为此情况预留的,引入外部MQ,监听Spring下的EntityUpdateEvent事件,然后推送至MQ,另一边消费MQ中的事件,再还原出EntityUpdateEvent事件广播到各个系统即可,这其中还需要考虑和解决时序和事务的问题。

字段:

属性 类型 必需 默认值 描述
source Class<?> 否,与sourceName
二选一
Void.class 数据来源的Entity class
sourceName String 否,与source
二选一
“” 数据来源的Entity class 的全路径名称(包名.类名)
field String 数据来源的Entity对应的属性
conditions Condition[] 被关联的Entity所需要的条件

@Condition

描述:

数据来源的关联条件

字段:

属性 类型 必需 默认值 描述
selfField String 关联数据来源Entity所需的自身字段
sourceField String “id” 数据来源的Entity的字段,默认为id

动态条件注解

@DynamicCondition

描述:

适用场景:数据筛选,比如根据不同权限获取不同数据,用户只能看到自己的数据,管理员能看到所有人的数据。

具体demo移步快速开始的例子。

字段:

属性 类型 必需 默认值 描述
value Class<? extends IDynamicConditionHandler> IDynamicConditionHandler接口有两个方法,enable()决定了该条件是否生效,values()是条件匹配的值。