自动建表注解
只有小部分注解,进行了轻微改动,基本所有注解均是通用的,详细教程可以直接参考A.CTable官方。
@Table
- 新增primary属性,对应@TablePrimary
- isNull属性为了一致性改为了isNotNull属性默认false
- 新增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)
(该注解的使用请查看官方文档,懒得看的话,请往下读,有惊喜)一并使用才有效。被标注的字段,在可允许的类型范围(
String
、Long
、long
、Date
、LocalDate
、LocalDateTime
)内,数据被操作的情况下,会自动被赋值上当前时间。如果使用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)
(该注解的使用请查看官方文档,懒得看的话,请往下读,有惊喜)一并使用才有效。被标注的字段,会根据
@OptionUser
中AuditHandler
的实现来返回对应的值。通常的实现方案都是用户信息(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()是条件匹配的值。 |