MySql逆向工程(自定义实现MySql逆向生成Java实体类,包含Lombok注解,Swagger注解,Javax注解)

很多开发者用的 MySql逆向工程应该都是框架自带的(MyBatis),但他的效果可能达不到我们想要的效果,然后生成完代码之后,又要手动去去修修改改,甚是麻烦。


这边说明下,我做的这个MySql逆向工程,仅有以下依赖,他是一个单独的模板。

  • mysql-connector-java mysql 连接。
  • fastjson 数据库查询的数据,转换成Java类型。
  • lombok 懒得写 get/set。

生成的Java实体类有什么功能?

  • Lombok注解,需要开启。如果没有开启,则生成 get/set/toString。
  • Javax注解,需要开启。@Entity,@Table,@Id,@GeneratedValue,@Column。
  • Swagger注解,需要开启。@ApiModel,ApiModelProperty。
  • set链式,需要开启
  • 实体类上有数据表的注释/描述。
  • 字段上有数据表字段的注释/描述。
  • 可以配置排除数据表的 前缀 后缀
  • 可以配置生成实体类增加 前缀 后缀
  • 可以配置数据表的实体类在生成在哪个包下
  • 可以配置排除数据表字段的 前缀
  • 可以单表多表全表生成实体类。

源码下载地址 MySql 逆向工程.zip


如何使用?

使用的话,非常简单,只需要少量的代码,加上一些配置,就可以了。so easy

public static void main(String[] args) {
        // 生成实体类的配置
        EntityConfig entityConfig = EntityConfig.builder()
                // 必选
                .path("F:/liuqi-project-framework-boot/jar/mysql-generation-tool/src/main/java/com/liuqi/test/entity")
                .packageName("com.liuqi.test.entity") // 指定包名 可不填写 会自动识别  (可选)
                .prefix("my")            // 实体类前缀         默认 ""               (可选)
                .suffix("entity")        // 实体类后缀         默认 ""               (可选)
                .excludePrefix("t_")     // 排除 数据表前缀     默认 ""               (可选)
                .excludeSuffix("_tb")    // 排除数据表后缀      默认 ""               (可选)
                .enableJavax(true)       // 启用 Javax 注解    默认 false            (可选)
                .enableLombok(true)      // 启用 Lombok 注解   默认 false            (可选)
                .enableSwagger(true)     // 启用 Swagger 注解  默认 false            (可选)
                .enableSetChain(true)    // 启用 set 链式功能   默认 false            (可选)
                // (可选的) 数据表 配置拓展  指定包名   user 所在包名是 packageName + u.s.e
                .appendTablePackage(new EntityConfig.TableExtend(
                        "t_user_tb",   // 数据表名称
                        "u.s.e",    // 指定包名 com.liuqi.test.entity.u.s.e
                        "is_")       // 排除字段的前缀  比如字段是  is_del 那么实体类字段是  del
                )
                // 这是可以多选的
                .appendTablePackage(new EntityConfig.TableExtend(
                        "employee",   // 数据表名称
                        "emp",    // 指定包名 com.liuqi.test.entity.emp
                        "is_")     // 排除字段的前缀  比如字段是  is_del 那么实体类字段是  del
                )
                .build();

        // MySql 逆向生成代码的配置
        MySqlGenerateConfig generateConfig = MySqlGenerateConfig.builder()
                .url("jdbc:mysql://127.0.0.1:3306/test?useSSL=true")  // MySql 连接地址
                .username("root")         // 数据库用户名
                .password("123456")       // 数据库密码
                .tableSchema("test")      // 指定库
                .tableNames("*")          // 指定生成的表 (多个表用英文逗号隔开) (* 号表示全部的表)
                .entityInfo(entityConfig) // 生成实体类的配置
                .build();

        // 创建 MySql生成代码处理器
        MySqlGenerated mySqlGenerated = new MySqlGenerated(generateConfig);

        // 生成代码
        mySqlGenerated.generate();
    }

生成的实体类:

package com.liuqi.test.entity.u.s.e;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;


@Setter
@Getter
@ToString
@Accessors(chain = true)
@ApiModel(value = "用户表")
@Entity
@Table(name = "t_user_tb")
public class MyUserEntity implements Serializable {
	private static final long serialVersionUID =  6240958744060737969L;

	@ApiModelProperty(value = "用户id 自增", example = "1")
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "`user_id`", nullable = false)
	private Long userId;

	@ApiModelProperty(value = "用户名")
	@Column(name = "`username`", unique = true, nullable = false, length = 20)
	private String username;

	@ApiModelProperty(value = "用户昵称")
	@Column(name = "`nickname`", length = 22)
	private String nickname;

	@ApiModelProperty(value = "年龄", example = "1")
	@Column(name = "`age`")
	private Integer age;

	@ApiModelProperty(value = "性别")
	@Column(name = "`sex`", length = 1)
	private String sex;

	@ApiModelProperty(value = "手机号")
	@Column(name = "`phone`", unique = true, nullable = false, length = 11)
	private String phone;

	@ApiModelProperty(value = "是否删除")
	@Column(name = "`is_del`")
	private Boolean del;

	@ApiModelProperty(value = "注册时间")
	@Column(name = "`create_time`")
	private Date createTime;

	@ApiModelProperty(value = "修改时间")
	@Column(name = "`update_time`")
	private Date updateTime;

}

设计与实现思路:

  1. MySql查询数据库下所有的表。当然也可以直接指定表名。
  2. 查询数据表的所有字段信息。
  3. 遍历所有字段,生成实体类。

1:查询数据表信息:

SELECT * FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = 'test'  AND TABLE_NAME = 'user'

2:查询数据表的所有字段信息:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'user'

以上两条Sql就是查询数据表信息,字段信息。如果不懂可自行百度查阅。


源代码项目结构:代码非常少,也非常简单。

MySql逆向工程(自定义实现MySql逆向生成Java实体类,包含Lombok注解,Swagger注解,Javax注解)_第1张图片
config

  1. EntityConfig 生成实体类的配置项。
  2. MySqlGenerateConfig mysql 逆向工程的配置项。

handle

  1. GenerateEntityCodeHandler生成实体类代码的处理器,实现了MySqlTableGenerateCodeHandler接口。
  2. MySqlTableGenerateCodeHandler 为数据表生成代码的处理器接口,如果需要生成其他的Java代码(Mapper/Dao/Service)可实现该接口进行拓展。

info

  1. ColumnInfo 数据表栏目(字段)的描述信息。
  2. TableInfo 数据表的描述信息。

util

  1. FileUtil 写Java文件,写入Java代码。
  2. MySqlUtil 获取MySql连接,查询 数据表/数据表字段 的信息。
  3. StringUtil下划线转驼峰,首字母大写。
  4. TypeConverterUtil mysql数据类型 转换成 Java数据类型。

MySqlGenerated

MySql逆向生成代码的执行器,提供一个 generate()方法生成代码。
也提供了一个addMySqlTableGenerateCodeHandler方法,对生生成代码进行拓展。


该逆向生成代码的项目,仅支持MySql数据库,版本在5.7上开发,目前只能生成实体类。


如果需要生成 Mapper接口,Mapper.xml文件,或者 Dao接口呢?

可以实现MySqlTableGenerateCodeHandler接口,进行拓展。
MySql逆向工程(自定义实现MySql逆向生成Java实体类,包含Lombok注解,Swagger注解,Javax注解)_第2张图片

在生成代码前,添加一个自定义的代码生成器。

MySql逆向工程(自定义实现MySql逆向生成Java实体类,包含Lombok注解,Swagger注解,Javax注解)_第3张图片


源码下载地址 MySql 逆向工程.zip

  • mysql-generation-tool 源码,可直接导入 IDEA。
  • TestMsqlGenerate.java 测试案例。

在这里插入图片描述

你可能感兴趣的:(源码,笔记,mysql,java,逆向工程)