1.安装
ACTable依赖
<dependency>
<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
<artifactId>mybatis-enhance-actable</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
使用mybatis-plus配合使用为了避免jar包版本冲突问题可以参照以下方式引入依赖
<dependency>
<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
<artifactId>mybatis-enhance-actable</artifactId>
<version>1.5.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</exclusion>
</exclusions>
</dependency>
异常表现为:项目启动过程中报OrderBy注解ClassNotFindException异常
2.SpringBoot配置方式
1.项目的application.properties配置文件(二选一)
1.配置actable的建表模式,建表依托的model所属的包路径,以及数据库的类型,根据自己的情况配置。
2.配置actable所使用的xml配置到mybatis的mapperlocations中,这一项的值是固定的:classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/l
代码示例如下:
# actable的配置信息
actable.table.auto=update
actable.model.pack=com.yours.model
actable.database.type=mysql
actable.index.prefix=自己定义的索引前缀#该配置项不设置默认使用actable_idx_
actable.unique.prefix=自己定义的唯一约束前缀#该配置项不设置默认使用actable_uni_
# mybatis自有的配置信息,key也可能是:mybatis.mapperLocations
mybatis.mapper-locations=classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml
PS:如果使用了mybatis-plus,需要把classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml配置到这里:mybatis-plus.mapper-locations
2.项目的application.yml配置文件(二选一)
# actable的配置信息 actable: table: # none 系统不做任何处理。 # create 系统启动后,会先将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据。 # update 系统启动后,会自动判断哪些表是新建的,哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据。 # add 系统启动后,只做新增,比如新增表/新增字段/新增索引/新增唯一约束的功能,而不会去做修改和删除的操作 (只在版本1.0.9.RELEASE及以上支持)。 auto: none model: pack: 扫描的包路径 database: type: mysql //支持的数据库,目前只支持mysql index: prefix: xxx_idx #自己定义的索引前缀#该配置项不设置默认使用actable_idx_ unique: prefix: xxx_uni #自己定义的唯一约束前缀#该配置项不设置默认使用actable_uni_
配置解析:
springboot2.0+启动类需要做如下配置(必备)
1.@ComponentScan配置,路径"com.gitee.sunchenbin.mybatis.actable.manager.*"
2.@MapperScan配置,路径"com.gitee.sunchenbin.mybatis.actable.dao.*"
代码示例如下:
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableFeignClients
@MapperScan("com.gitee.sunchenbin.mybatis.actable.dao.*")
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
public class OrderApiApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApiApplication.class, args);
}
}
springboot3.0+启动类需要做如下配置(必备),自动执行建表失效需要springboot初始化之后,代码主动触发执行。
1.@ComponentScan配置,路径"com.gitee.sunchenbin.mybatis.actable.manager.*"
2.@MapperScan配置,路径"com.gitee.sunchenbin.mybatis.actable.dao.*"
代码示例如下:
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableFeignClients
@MapperScan("com.gitee.sunchenbin.mybatis.actable.dao.*")
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
public class OrderApiApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(OrderApiApplication.class, args);
// 容器中获取actable的核心处理类
StartUpHandler bean =run.getBean(StartUpHandler.class, args);
// 手动执行actable的建表方法
bean.startHandler();
}
}
3.常用注解
1.@Table
描述:表名注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
name | String | 否 | "" | 不填默认根据驼峰转换法转换表名,例如ProductLabel,自动转为product_label |
value | ||||
comment | String | 否 | "" | 表注释,也可以使用@TableComment注解代替 |
charset | MySqlCharsetConstant | 否 | MySqlCharsetConstant.DEFAULT | 表字符集,也可以使用@TableCharset注解代替,默认值代表不填,以数据库自有的默认值为准 |
engine | MySqlEngineConstant | 否 | MySqlEngineConstant.DEFAULT | 表存储引擎,也可以使用@TableEngine注解代替,默认值代表不填,以数据库自有默认值为准 |
isSimple | boolean | 否 | false | 是否开启simple模式配置,默认不开启,开启后Field不写注解@Column也可以采用默认的驼峰转换法创建字段 |
excludeFields | String[] | 否 | "serialVersionUID" | 需要排除的属性名,排除掉的属性不参与建表 |
2.@IgnoreTable
描述:忽略当前实体建表逻辑,设置在实体类上,如果设置了那么该实体不参与建表更新表
3.@TableComment
描述:表注释注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 是 | 表注释,同@Table.comment()属性 |
3.@Column
描述:字段注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 否 | "" | 字段名 |
name | ||||
type | MySqlTypeConstant | 否 | MySqlTypeConstant.DEFAULT | 字段类型,也可以使用@ColumnType替代,默认值标识不填,使用ACTable自动类型转换规则 |
length | int | 否 | 255 | 字段的默认长度,默认255时,会去读取该类型实际的默认长度 |
decimalLength | int | 否 | 0 | 小数点保留位数,默认为0时,会去读取该类型实际的小说点默认长度 |
isNull | boolean | 否 | true | 是否为可以为null,true是可以,false是不可以,默认为true,也可以使用@IsNotNull来替代 |
isKey | boolean | 否 | false | 是否是主键,默认false,也可以使用@IsKey来代替 |
isAutoIncrement | boolean | 否 | false | 是否自动递增,默认false,也可以使用@IsAutoIncrement来替代 |
defaultValue | String | 否 | ColumnUtils.DEFAULTVALUE | 默认值,默认为DEFAULT,表示不填,默认为null,可用@DefaultValue替代 只有String和Boolean采用字符串传参的方式使用的是'#{}',其他类型均使用原生方式拼接sql使用的是'${}' 时间戳字段类型必须用:MySqlTypeConstant.TIMESTAMP 创建时间时间戳可以用 defaultValue="CURRENT_TIMESTAMP" 更新时间时间戳可以用 defaultValue="NULL ON UPDATE CURRENT_TIMESTAMP" |
comment | String | 否 | "" | 数据表字段备注,也可用@ColumnComment替代 |
4.@IgnoreUpdate
描述:标注当前字段参与创建不参与更新,解决使用@DefaultValue("NULL ON UPDATE CURRENT_TIMESTAMP")时当前字段每次重启项目都会进行更新操作的问题
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 是 | 是否忽略对当前字段的更新操作 |
MySqlTypeConstant
字段类型可选枚举值列表 | 描述 |
DEFAULT | 默认值标识不填,使用ACTable自动类型转换规则 |
INT | int类型,默认长度11,没有小数点长度 |
VARCHAR | varchar类型,默认长度255,没有小数点长度 |
DECIMAL | decimal类型,默认长度10,小数点默认长度2 |
TEXT | text类型,不需要设置长度 |
........ | 太多不一一列举,自行查看代码,枚举中lengthCount表示需要几个长度(0:不需要设置长度,1:需要设置一个长度,2:需要设置小数点长度),lengthDefault表示默认长度,decimalLengthDefault表示小数点默认长度 |
ACTable自动类型转换规则
Java数据类型 | 对应Mysql数据类型 |
java.lang.String | MySqlTypeConstant.VARCHAR |
java.lang.Long | MySqlTypeConstant.BIGINT |
java.lang.Integer | MySqlTypeConstant.INT |
java.lang.Boolean | MySqlTypeConstant.BIT |
java.math.BigInteger | MySqlTypeConstant.BIGINT |
java.lang.Float | MySqlTypeConstant.FLOAT |
java.lang.Double | MySqlTypeConstant.DOUBLE |
java.lang.Short | MySqlTypeConstant.SMALLINT |
java.math.BigDecimal | MySqlTypeConstant.DECIMAL |
java.sql.Date | MySqlTypeConstant.DATE |
java.util.Date | MySqlTypeConstant.DATE |
java.sql.Timestamp | MySqlTypeConstant.DATETIME |
java.sql.Time | MySqlTypeConstant.TIME |
long | MySqlTypeConstant.BIGINT |
int | MySqlTypeConstant.INT |
boolean | MySqlTypeConstant.BIT |
float | MySqlTypeConstant.FLOAT |
double | MySqlTypeConstant.DOUBLE |
short | MySqlTypeConstant.SMALLINT |
char | MySqlTypeConstant.VARCHAR |
5.@ColumnComment
描述:字段备注注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 是 | 字段备注,同@Column.comment()属性 |
6.@DefaultValue
描述:字段默认值注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 是 | 字段默认值,同@Column.defaultValue()属性 创建时间时间戳可以用 @ColumnType(MySqlTypeConstant.TIMESTAMP) @DefaultValue("CURRENT_TIMESTAMP") 更新时间时间戳可以用 @ColumnType(MySqlTypeConstant.TIMESTAMP) |
7.@IsAutoIncrement
描述:字段自增的注解,同@Column.isAutoIncrement
8.@IsKey
描述:字段是主键的注解,同@Column.isKey
9.@IsNotNull
描述:字段不为空的注解,同@Column.isNull()=false
10.@ColumnType
描述:字段类型注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | MySqlTypeConstant | 否 | MySqlTypeConstant.DEFAULT | 字段类型,也可以使用@Column.type替代,默认值标识不填,使用ACTable自动类型转换规则 |
length | int | 否 | 255 | 字段的默认长度,默认255时,会去读取该类型实际的默认长度 |
decimalLength | int | 否 | 0 | 小数点保留位数,默认为0时,会去读取该类型实际的小说点默认长度 |
11.@Index
描述:字段设置为索引的注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 否 | "" | 索引的名字,不设置默认为{actable_idx_当前标记字段名@Column的name},如果设置了名字例如union_name,系统会默认在名字前加actable_idx_前缀,也就是actable_idx_union_name |
columns | String[] | 否 | {} | 要建立索引的字段名,不设置默认为当前标记字段名@Column的name,可设置多个建立联合索引{"login_mobile","login_name"} |
12.@Unique
描述:字段设置唯一约束的注解
属性 | 类型 | 是否必填 | 默认值 | 描述 |
value | String | 否 | "" | 唯一约束的名字,不设置默认为{actable_uni_当前标记字段名@Column的name},如果设置了名字例如union_name,系统会默认在名字前加actable_uni_前缀,也就是actable_uni_union_name |
columns | String[] | 否 | {} | 唯一约束的字段名,不设置默认为当前标记字段名@Column的name,可设置多个建立联合唯一{"login_mobile","login_name"} |
4.兼容框架配置
mybatis-plus配置方式
对于springboot架构的项目,如需使用mybatis-plus只要多依赖一下如下配置即可:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
将mybatis.mapper-locations配置的内容换到mybatis-plus.mapper-locations配置中。