MybatisPlus代码生成工具

179 阅读3分钟

MybatisPlus代码生成初稿

数据源yml配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/yourDatabase?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.cj.jdbc.Driver # 用你自己的数据库地址
    password: password # 用你自己的密码
    username: username # 用你自己的账号

maven需要的基础依赖

<!--springboot集成mybatis、mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--数据库连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-core</artifactId>
    <version>3.5.2</version>
</dependency>
<!--swagger-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>

mp字段生成代码

/**
 * @Author: hape
 * @Date: 2022/9/29 15:08
 */
public class MybatisPlusGenerator {
    /**
     * 数据库配置
     */
    private static DataSourceConfig DATA_SOURCE_CONFIG = new DataSourceConfig
            .Builder("jdbc:mysql://localhost:3306/yourDataBase?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8", "账号", "密码")
            .dbQuery(new MySqlQuery())// 数据库查询->查字段名称、类型、备注 oracle用new OracleQuery()
            .schema("mybatis-plus")// 数据库架构
            .typeConvert(new MySqlTypeConvert())// 数据类型转换器 oracle用new OracleQuery()
            .keyWordsHandler(new MySqlKeyWordsHandler())// 数据库关键字处理器 oracle用new OracleQuery()
            .build();

    /**
     * 全局配置
     */
    private static GlobalConfig GLOBAL_CONFIG = new GlobalConfig.Builder()
            .fileOverride()// 是否覆盖以生成文件,默认:true
            .outputDir("/com/ppx/user")// 指定输出目录
            .author("hape")// 创建人名称
//            .enableKotlin()// 开启kotlin模式 开启生成的文件不是java文件 .kt结尾
            .enableSwagger()// 开启swagger注释
            .dateType(DateType.TIME_PACK)// 时间策略
            .commentDate("yyyy-MM-dd HH:mm:ss")// 注释日期
            .build();

    /**
     * 包配置
     */
    private static PackageConfig PACKAGE_CONFIG = new PackageConfig.Builder()
            .parent("")// 生成地址:outputDir+parent
            .moduleName("")
            .entity("entity")// entity包名
            .service("service")// service报名
            .serviceImpl("service.impl")// service实现类包名
            .mapper("mapper")// mapper包名
            .controller("controller")
            .other("other")// 输出自定义文件时用到的包名
            .pathInfo(Collections.singletonMap(OutputFile.xml, "/com/ppx/user/mapper"))// xml文件输出路径配置信息
            .build();

    /**
     * 模板配置
     */
    private static TemplateConfig TEMPLATE_CONFIG = new TemplateConfig.Builder()
            .disable(TemplateType.ENTITY)
            .entity("/templates/entity.java")
            .service("/templates/service.java")
            .serviceImpl("/templates/serviceImpl.java")
            .mapper("/templates/mapper.java")
            .xml("/templates/mapper.xml")
            .controller("/templates/controller.java")
            .build();

    /**
     * 注入策略
     */
//    private static InjectionConfig INJECTION_CONFIG = new InjectionConfig.Builder()
//            .beforeOutputFile((tableInfo, objectMap) -> {
//                System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
//            })// 输出文件之前消费者
//            .customMap(Collections.singletonMap("test", "baomidou"))//自定义配置 Map 对象
//            .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))//自定义配置模板文件
//            .build();


    /**
     * 策略配置
     */
    private static StrategyConfig STRATEGY_CONFIG = new StrategyConfig.Builder()
            .enableCapitalMode()// 开启大写命名
            .enableSkipView()// 开启跳过视图
            .disableSqlFilter()//禁用 sql 过滤
            .likeTable(new LikeTable("USER"))//模糊表匹配(sql 过滤)   likeTable 与 notLikeTable 只能配置一项
//            .addInclude("t_simple")//增加表匹配(内存过滤) include 与 exclude 只能配置一项
            .addTablePrefix("t_", "c_")//增加过滤表前缀
//            .addFieldSuffix("_flag")//增加过滤表后缀
            .build();


    @SneakyThrows
    @Test
    public void start() {
        AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
        generator.strategy(STRATEGY_CONFIG)
                .global(GLOBAL_CONFIG)
                .packageInfo(PACKAGE_CONFIG)
                .template(TEMPLATE_CONFIG)
                .execute();
    }
}

实体类缺陷展示

 * <p>
 * 
 * </p>
 *
 * @author hape
 * @since 2022-09-29 16:29:54
 */
@ApiModel(value = "User对象", description = "")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("主键")
    private String id;

    @ApiModelProperty("名称")
    @TableField("`name`")
    private String name;

    @ApiModelProperty("密码")
    @TableField("`password`")
    private String password;

    @ApiModelProperty("身份证")
    private String idCard;

    @ApiModelProperty("手机号")
    private byte[] phoneNumber;

    @ApiModelProperty("头像")
    private String headPicture;

    @ApiModelProperty("住址")
    private String address;

    @ApiModelProperty("是否注销 0否1是")
    private String isDeleted;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public byte[] getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(byte[] phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getHeadPicture() {
        return headPicture;
    }

    public void setHeadPicture(String headPicture) {
        this.headPicture = headPicture;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getIsDeleted() {
        return isDeleted;
    }

    public void setIsDeleted(String isDeleted) {
        this.isDeleted = isDeleted;
    }

    @Override
    public String toString() {
        return "User{" +
        "id=" + id +
        ", name=" + name +
        ", password=" + password +
        ", idCard=" + idCard +
        ", phoneNumber=" + phoneNumber +
        ", headPicture=" + headPicture +
        ", address=" + address +
        ", isDeleted=" + isDeleted +
        "}";
    }
}

生成的代码还是有瑕疵的,但是基本能用了,id以及TableField需要另行处理下,getter&setter需要手动改lombok,等后续有时间再研究下怎么一次生成到位,如有懂的朋友,欢迎评论告知