MyBatis实现MySQL表字段及结构的自动增删
前言
在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发。正好有一个现成的工具可以在springboot里面实现这个流程。
介绍
上述是gitee链接。这个工具是mybatis-enhance-actable,引用作者的介绍:A.CTable是一个基于Spring和Mybatis的Maven项目,mybatis-enhance-actable支持springboot,增强了Mybatis的功能,通过配置model注解的方式来创建表,修改表结构,提供通用的单表CUDR工具,实现了mybatis自动建表的能力,目前支持Mysql。
使用
pom导包
<dependency>
<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
<artifactId>mybatis-enhance-actable</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
配置application.yml
#自动建表设置
mybatis:
table:
#create系统启动后,会将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据;
#update系统会自动判断哪些表是新建的.哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据;
#add新增表/新增字段/新增索引新增唯一约束的功能,不做做修改和删除(只在版本1.0.9.RELEASE及以上支持);
#none系统不做任何处理;
auto: update
model:
#扫描用于创建表的对象的包名 填入domain包路径
pack: com.xx.xx.domain
database:
#数据库类型目前只支持mysql
type: mysql
mybatis-plus: #数据库格式配置
global-config:
banner: false # 数据库启动的banner
db-config:
id-type: auto #id生成规则:mysql数据库id自增
configuration:
map-underscore-to-camel-case: true #开启驼峰,处理数据库“_"的字段
auto-mapping-behavior: full #自动映射任何复杂的结果
# 注意下面,一定要添加前面actable的xml
mapper-locations: com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml,classpath*:mapper/*.xml
SpringBootApplication启动类配置
@SpringBootApplication
@EnableScheduling
@EnableCaching
@MapperScan({"com.gitee.sunchenbin.mybatis.actable.dao.*", "com.*.*.mapper"})
@ComponentScan({"com.gitee.sunchenbin.mybatis.actable.manager.*", "com.*.*.*"})
public class ReceiveCardTestSystemApplication {
public static void main(String[] args) {
SpringApplication.run(ReceiveCardTestSystemApplication.class, args);
}
}
关键是这两行
@MapperScan({"com.gitee.sunchenbin.mybatis.actable.dao.*", "com.*.*.mapper"})
@ComponentScan({"com.gitee.sunchenbin.mybatis.actable.manager.*", "com.*.*.*"}) //扫描所有的包 最后一个是*,中间两个*换成实际路径
要增加上actable的扫包路径。
Domain类的配置
@Getter
@Setter
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("users")
@Table(name = "users", isSimple = true)
public class UsersDO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
@IsKey
@IsAutoIncrement
@Column(comment = "id")
private Integer id;
@Column(name = "user_name", length = 50, comment = "用户名", isNull = true)
@Index
private String userName;
@Column(name = "password", length = 255, comment = "密码", isNull = true)
private String password;
@Column(name = "employee_id", length = 50, comment = "工号", isNull = true)
@Unique
private String employeeId;
@Column(name = "role", comment = "0->管理员,1->测试员", isNull = true)
private Integer role;
@Column(name = "create_time", type = MySqlTypeConstant.DATETIME, isNull = true, comment = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@Column(name = "update_time", type = MySqlTypeConstant.DATETIME, isNull = true, comment = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
注意:
@Table(name = "users", isSimple = true)
当开启isSimple后 @Column里面不写name则会默认将驼峰命名改为下划线,比如updateTime变成了update_time
普通索引使用@Index,唯一索引使用@Unique
组合索引则这样使用:@Index(columns = {"country", "province", "city"})
通过上述配置,启动系统的时候就会自动对MySQL表进行更新了。
MyBatis实现MySQL表字段及结构的自动增删的更多相关文章
- PHP通过(PDO)Mysql表字段一键生成创建sqlite的SQL
首发于:http://www.zzzzy.com/201406053158.html /** * Mysql表字段一键生成创建sqlite的SQL 2 * @author: Skiychan < ...
- MySQL 表字段操作
MySQL 表字段操作 一.增加表字段 1)mysql> alter table 二.删除表字段 三.修改表字段
- MyBatis两张表字段名相同产生的问题
MyBatis两张表字段名相同, 会导致bean属性都映射为第一个表的列, 解决方法: 通过设置别名的方式让其产生区别,如 <select id="queryBySekillId&qu ...
- 做网站-mysql表字段设计
https://mp.weixin.qq.com/s/HhdbmQqKmiw9IVnnL0Zyag VARCHAR与CHAR如何选择 使用VARCHAR理由 字段不经常更新 字段比较长,且长度不均(比 ...
- Mysql表字段命令alter add
alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...
- MyBatis:当表字段名和实体类属性名不一致
第一种解决方法:在sql中使用别名 <select id="getRoleList" resultType="com.ttpfx.domain.Role" ...
- MySQL 表字段唯一性约束设置方法unique
1. 建表时加上唯一性约束 CREATE TABLE `t_user` ( `Id` int(11) NOT NULL AUTO_INCREMENT, -- 自增 `username` varchar ...
- mysql 表字段不能使用type???
type 字段 可能跟系统内置字段有冲突吧
- C#读取MySql表字段出现System.Byte[]问题
记录下,用了多字段拼接后在程序中查询出的结果为System.Byte[],而在数据库中查正常 解决办法为:加Convert转换编码 select CONVERT((CASE background ...
- mysql 表字段部分替换
update user set `ph` = REPLACE(`ph`,'shenji.osnt.me','60.210.113.147:555');
随机推荐
- mysql 重新整理——性能下降的原因[四]
前言 什么是性能下降? 其实就是代码运行的环境变了,那么环境变化是什么? 比如cpu上升了,内存满了.有或者表中数量增加了,量变了. 其实这些是dba干的,但是呢,我们也需要去了解下,并且优化我们的c ...
- cv2在图像上画不同比例的锚框
''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...
- 论文记载:A Survey on Traffic Signal Control Methods
ABSTRACT 交通信号控制是一个重要且具有挑战性的现实问题,其目标是通过协调车辆在道路交叉口的移动来最小化车辆的行驶时间.目前使用的交通信号控制系统仍然严重依赖过于简单的信息和基于规则的方法,尽管 ...
- HL7消息结构
HL7消息用于在不同的医疗保健系统之间传输电子数据,每个消息发送相关特定事件(例如患者入院)的信息.HL7消息采用人类可读格式,本节介绍HL7消息的内容以及HL7消息的组织方式. HL7消息由一个或多 ...
- 牛客网-SQL专项训练14
①通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字:B 解析: 题目要求需要用到子查询,故排除AC选项,而D选项在where子句中使用了 ...
- HarmonyOS NEXT应用开发之异常处理案例
介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法,主要分为应用崩溃.应用卡死以及系统查杀三种. 效果图预览 使用说明: 点击构建应用崩溃事件,3s之后应用退出,然后打 ...
- 阿里云 EventBridge 事件驱动架构实践
简介:我们认为 EventBridge 是云原生时代新的计算驱动力,这些数据可以驱动云的计算能力,创造更多业务价值. 作者:周新宇 本文内容整理自 中国开源年会 演讲 首先做一个自我介绍,我是 Ro ...
- 基于Python语言的数据可视化工具
在数据分析中常用的图表可以使用使用 python语言的 matplotlib 和 seaborn 库选择要显示的可视化对象. 一.Matplotlib Matplotlib 是一个 Python 的 ...
- [FE] Canvas 转图片并下载的方式
先获取 canvas 节点,使用 toDataURL 转为 image 数据,最后使用 a 链接下载. // Trans to image const canvas = document.getEle ...
- 微信小程序支付实现流程
基本流程 用户操作流程 小程序流程 整体支付流程 代码实现 创建订单 创建订单,主要是前端将订单的信息提交到后端.但是在创建订单之前还有一些准备工作要做: 获取用户数据GetUserInfo 获取用户 ...