MyBatis实现MySQL表字段及结构的自动增删

mybatis,mysql · 浏览次数 : 0

小编点评

**mybatis-enhance-actable**是一个基于Spring和Mybatis的Maven项目,它可以用于增强Spring Data JPA中的MyBatis的功能。 **主要功能:** * 支持配置模型注解来创建表、修改表结构和提供通用的CUDR工具。 * 支持以下操作: * 新增或删除表 * 新增或删除字段 * 新增或删除索引 * 设置唯一约束 * 支持mysql数据库类型。 **配置** 配置项目时需要添加actable的xml文件,其中包含扫描的包路径和配置属性。 **使用方法** 1. 将actable的jar文件添加到项目中。 2. 在application.yml中配置actable的配置信息。 3. 在Spring Boot应用启动类中配置扫描包路径。 **示例配置** ```yml #actable.xml ``` **注意** *actable的xml文件中的命名空间可能与项目中的命名空间不同。 *actable的xml文件中的配置属性可能与项目中的配置属性不同。

正文

前言

在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发。正好有一个现成的工具可以在springboot里面实现这个流程。

介绍

mybatis-enhance-actable

上述是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表字段及结构的自动增删相似的内容:

MyBatis实现MySQL表字段及结构的自动增删

前言 在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发。正好有一个现成的工具可以在springboot里面实现这个流程。 介绍 mybatis-enhance-actable 上述是gitee链接。这

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

好家伙,天天拖,终于写完了 代码已开源(Gitee) PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: mysql 目前实现功能: 1.注册登陆 2.游戏数据保存 3.游戏运行 (gitee

我的第一个项目(十五) :完成数据保存功能(后端,改update)

好家伙, 代码已开源(Gitee) PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: mysql 目前实现功能: 1.注册登陆 2.游戏数据保存 3.游戏运行 (gitee.com) 后端这

MyBatis实现动态SQL更新

博主记得在一个周五快下班的下午,产品找到我(为什么总感觉周五快下班就来活 😂),跟我说有几个业务列表查询需要加上时间条件过滤数据,这个条件可能会变,不保证以后不修改,这个改动涉及到多个列表查询,于是博主思考了一会想了几种实现方案, 1. 最简单,直接将时间条件写死,由 Service 层传递给 D

『手写Mybatis』实现映射器的注册和使用

前言 如何面对复杂系统的设计? 我们可以把 Spring、MyBatis、Dubbo 这样的大型框架或者一些公司内部的较核心的项目,都可以称为复杂的系统。 这样的工程也不在是初学编程手里的玩具项目,没有所谓的 CRUD,更多时候要面对的都是对系统分层的结构设计和聚合逻辑功能的实现,再通过层层转换进行

聊聊Mybatis的实现原理

### 使用示例 平时我们使用的一般是集成了Spring或是Spring Boot的Mybatis,封装了一层,看源码不直接;如下,看看原生的Mybatis使用示例 ![image](https://img2023.cnblogs.com/blog/971683/202305/971683-2023

MyBatis-Plus 实现多租户管理的实践

本文主要讲解使用Mybatis-Plus结合dynamic-datasource来实现多租户管理 在现代企业应用中,多租户(Multi-Tenant)架构已经成为一个非常重要的设计模式。多租户架构允许多个租户共享同一应用程序实例,但每个租户的数据彼此隔离。实现这一点可以大大提高资源利用率并降低运营成

mybaits-plus实现自定义字典转换

需求:字典实现类似mybatis-plus中@EnumValue的功能,假设枚举类中应用使用code,数据库存储对应的value 思路:Mybatis支持对Executor、StatementHandler、PameterHandler和ResultSetHandler进行拦截,也就是说会对这4种对

多数据源管理:掌握@DS注解的威力

大家在日常后端开发过程,不可避免的会接触到需要用到配置多个数据源的场景,在这里,小编介绍一种简单方便的,只需要简单的配置和一个@DS注解就能实现动态数据源的方式,这种动态数据源底层原理是基于Mybatis-plus来实现的。

【简写Mybatis-02】注册机的实现以及SqlSession处理

学习源码一定一定不要太关注代码的编写,而是注意代码实现思想:通过设问方式来体现代码中的思想;方法:5W+1H