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'); 
随机推荐
- leetcode:1337. 方阵中战斗力最弱的 K 行
			1337. 方阵中战斗力最弱的 K 行 给你一个大小为 m * n 的方阵 mat,方阵由若干军人和平民组成,分别用 0 和 1 表示. 请你返回方阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. ... 
- 使用 Docker 部署 instantbox 轻量级 Linux 系统
			1)instantbox 介绍 GitHub:https://github.com/instantbox/instantbox instantbox 是一款非常实用的项目,它能够让你在几秒内启动一个主 ... 
- 6个高级Vue3知识技巧
			Vue 3是一个非常流行的前端框架,广泛应用于大型互联网企业和个人项目. 虽然我们已经熟悉了一些常见的 Vue 3 知识,但还有一些不太常见但实用性很强的点可以帮助我们进一步优化和提升 Vue 3 应 ... 
- 使用 Docker Compose 安装 APISIX
			1.基本概念 APISIX 是 Apache 下的一款云原生的 API 网关,支持全生命周期的 API 管理,在应用中可以作为所有 API 调用的统一入口. APISIX 有一些基础概念如下: Ups ... 
- C内存操作API的实现原理
			我们在编写C代码时,会使用两种类型的内存,一种是栈内存,另外一种是堆内存,其中栈内存的申请和释放是由编译器来隐式管理的,我们也称为自动内存,这种变量是最简单而且最常用的,然后就是堆内存,堆的申请和释放 ... 
- 《Effective C#》系列之(一)——异常处理与资源管理
			请注意,<Effective C#>中的异常处理与资源管理部分实际上是第四章的内容.以下是关于该章节的详细解释. 第四章:异常处理与资源管理 一. 了解异常处理机制 异常处理机制使程序员能 ... 
- maven报错:501 HTTPS Required
			maven报错:501 HTTPS Required 简单来说,如果报错中出现http://repo1.maven.org/maven2/的字样的话,那么大概率就是Maven仓库的设置里的地址有问题, ... 
- dotnet 使用 CsWin32 库简化 Win32 函数调用逻辑
			很多开发者,包括开发老司机们,在碰到需要调用 Win32 函数时,都有一个困扰,那就是我应该如何去调用.有两个主要的选项,第一就是自己写 PInvoke 代码,第二就是使用其他大佬给许多 Win32 ... 
- django-rest-framework框架(一)
			1.Web开发模式 # web开发模式 #前后端混合开发(前后端不分离):返回的是html的内容,需要写模板 #前后端分离:只专注于写后端接口,返回json,xml格式数据 # xml格式 <x ... 
- 电路笔记03—kcl、kvl,独立源,受控源
			电路笔记03-kcl.kvl,独立源,受控源 听起来简单,做起来需要思考.所以做作业,思考很有 必要.电路的功率守恒,4种受控源,用两类约束列方程.电路分析力最难的一部分,怎么把一个量用其它量表示,后 ... 
