SpringBoot项目整合ACTable实现实体类快速生产数据库表

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: nonemodel:pack: 扫描的包路径database:type: mysql  //支持的数据库,目前只支持mysqlindex: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)
@IgnoreUpdate @DefaultValue("NULL ON UPDATE CURRENT_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配置中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LAMMPS学习】八、基础知识(1.4)多副本模拟

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

30系列显卡安装 pytorch 1.7.1 环境

1.安装torch python的版本为3.8 pip install torch1.7.1cu110 torchvision0.8.2cu110 torchaudio0.7.2 -f https://download.pytorch.org/whl/torch_stable.html 2.安装依赖库 scipy1.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simplenumpy1.21.2 -i https://pypi.tuna.ts…

FFMPEG推流到RTMP服务器命令

FFMPEG推流到RTMP服务器命令 1、将文件当作源推送到RTMP服务器 ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName 参数解释 -r 以本地帧频读数据&#xff0c;主要用于模拟捕获设备。表示ffmpeg将按照帧率发送数据&#xff0c;不会按照最高的效率发…

vue3项目学习记录<二>---Ant Design Vue组件之按需引入

一、自动按需引入插件安装 pnpm install unplugin-vue-components -D 二、配置插件 1、在vite.config.ts下添加代码&#xff0c;如下&#xff1a; import Component from unplugin-vue-components/vite import { AntDesignVueResolver } from unplugin-vue-components/reso…

每日一题 第九十一 期 洛谷 [蓝桥杯 2016 省 AB] 四平方和

[蓝桥杯 2016 省 AB] 四平方和 题目描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a; 每个正整数都可以表示为至多 4 4 4 个正整数的平方和。 如果把 0 0 0 包括进去&#xff0c;就正好可以表示为 4 4 4 个数的平方和。 比如&#xff1a; 5 0 2 0 2 1 …

Redis 高可用

redis高可用介绍 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提…

android平台下opencv的编译--包含扩展模块

由于项目需要使用安卓平台下opencv的扩展库&#xff0c;对于通用的opencv库&#xff0c; opencv官网提供了android的SDK 但未能提供扩展库&#xff0c;因此需要自己进行源码编译。本文记录android平台下opencv及其扩展库的交叉编译。 前提&#xff1a;主机已安装android-ndk交…

如何升级node.js版本

升级Node.js可以通过多种方式来完成&#xff0c;以下是四种常见的方法&#xff1a; 方法一&#xff1a;使用Node.js官方安装程序 访问Node.js的官方网站&#xff0c;下载对应你操作系统的最新版本安装程序。通常&#xff0c;你可以 https://nodejs.org/en/download 找到你需…

Java 中文官方教程 2022 版(二)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 运算符 原文&#xff1a;docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html 现在你已经学会了如何声明和初始化变量&#xff0c;你可能想知道如何对其进行操作。学习 Java 编程语言的运…

已知私钥和密文,如何用python进行RSA解密

要使用Python进行RSA解密,你可以使用pycryptodome库。下面是一个简单的示例,展示了如何使用已知的私钥和密文进行RSA解密: 首先,确保你已经安装了pycryptodome库。如果没有安装,你可以通过运行pip install pycryptodome来安装它。 然后,你可以使用以下代码进行RSA解密:…

玩美移动珠宝虚拟试戴解决方案引入glTF 2.0格式支持

领先的AIAR美妆和时尚科技解决方案提供商&#xff0c;以及"美丽AI"解决方案开发商 — 玩美移动于今日宣布&#xff0c;其AI珠宝虚拟试戴解决方案升级版本&#xff0c;性能得以显著提升。通过此次更新&#xff0c;玩美移动系统现可支持glTF 2.0&#xff08;图形库传输…

启明智显技术分享|ESP32-C3助力Model 3C芯片86盒彩屏开发板实现3MB波特率OTA程序升级和单独图片升级

在物联网快速发展的今天&#xff0c;彩屏显示作为人机交互的重要一环&#xff0c;其显示效果和升级便利性成为了衡量产品竞争力的关键指标。而Model 3C(以下简称M3C芯片&#xff09;与ESP32-C3的结合&#xff0c;无疑为物联网彩屏领域应用奠定了坚实的基石。 M3C芯片 是启明智…

随机梯度下降算法

随机梯度下降&#xff08;SGD&#xff09;是一种优化算法&#xff0c;广泛用于机器学习和深度学习领域中模型的训练。它是梯度下降算法的一个变体&#xff0c;特别适用于大规模数据集。以下是详细学习SGD的步骤&#xff0c;包括理论学习和一个简单的示例实践&#xff1a; 1. 理…

Linux C++ 032-STL之map、multimap容器

Linux C 032-STL之map、multimap容器 本节关键字&#xff1a;Linux、C、map、multimap 相关库函数&#xff1a;clear、insert、erase map基本概念 简介&#xff1a; map中所有元素都是pair pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&…

Promise的介绍及使用教程

什么是Promise&#xff1f; Promise 是ES6引入的一种异步编程解决方案&#xff0c;它代表了一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 一个 Promise 在生命周期中有三种状态&#xff1a; Pending&#xff08;进行中&#xff09;&#xff1a;初始状…

分页的实现方法索引知识

目录 一. SpringBoot项目如何实现分页功能&#xff1f; 二、java中常用的分页插件有哪些 三、pageHelper分页原理及具体实现示例代码&#xff1f; 四、在MyBatis-Plus中如何实现自定义分页查询&#xff1f; 五、自定义排序在MyBatis-Plus中应该如何实现&#xff1f; 六、…

碳视野 | 今后五年国家重点支持三类双碳项目!

一、政策背景 4月8日&#xff0c;国家发展改革委印发《节能降碳中央预算内投资专项管理办法》&#xff08;以下简称《办法》&#xff09;,明确了专项资金重点支持范围和标准&#xff0c;重点支持重点行业和重点领域节能降碳、循环经济助力降碳等方向&#xff0c;重点支持内容包…

vue开发过程中,修改了数据,但是页面不渲染,没变化!怎么办?

在做项目中遇到一个问题 对某个参数赋值成功后页面中没有改变 经过多方查阅终于解决这个问题 跟大家分享一下 希望可以帮到你 方法1&#xff08;推荐&#xff09;&#xff1a;用JSON.parse(JSON.stringify(objectOrArray)) 通常是某个渲染的数组改变了层级较深的数据导致页面…

学习ddd(一)-- 领域驱动设计相关概念

我之前一直对领域驱动设计(DDD)相关的知识有零散的认识,没有系统性地学习过。最近抽空系统地学习了一下,发现这块知识比较抽象,很难读懂。加上我自己的理解,我整理了一些知识,希望能够分享给大家 第一期先讲些了DDD的一些基础概念 充血模型 在我们以往的开发模式中,…

Seata框架实现分布式事务(一)CAP理论

1、什么是事务 事务是指一系列数据库操作&#xff0c;它们被看作是一个逻辑单元&#xff0c;并且要么全部成功地执行&#xff0c;要么全部失败地回滚到初始状态&#xff0c;以确保数据的一致性和完整性。事务具有以下四个特性&#xff0c;通常被称为 ACID 特性&#xff1a; 所…