您的当前位置:首页正文

MyBatis Plus 代码生成器

2024-11-09 来源:个人技术集锦

一、引入POM依赖

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.3.1</version>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-generator</artifactId>
     <version>3.5.3.1</version>
 </dependency>
 <dependency>
     <groupId>org.apache.velocity</groupId>
     <artifactId>velocity-engine-core</artifactId>
     <version>2.3</version>
 </dependency>
 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <scope>runtime</scope>
     <version>8.0.30</version>
 </dependency>

二、编写代码

2.1、官方文档

2.2、编写代码

提供直接可以的代码,额外需要增加配置参考官方文档即可

package com.xx;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.xx.common.BaseEntity;

import java.util.Collections;

/**
 * @author aqi
 */
public class CodeGenerator {

    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator(dataSourceConfig());
        generator
                .global(globalConfig())
                .packageInfo(packageConfig())
                .strategy(strategyConfig()).execute();
    }

    private static DataSourceConfig dataSourceConfig() {
        return new DataSourceConfig
                .Builder("jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=GMT%2b8&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false","root","root")
                .dbQuery(new MySqlQuery())
                .build();
    }

    /**
     * 全局配置
     *
     * @return GlobalConfig
     */
    private static GlobalConfig globalConfig() {
        return new GlobalConfig.Builder()
                // 指定输出目录
                .outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
                // 作者名
                .author("aqi")
                // 开启 swagger 模式
                .enableSwagger()
                // 禁止打开目录
                .disableOpenDir()
                .build();
    }

    /**
     * 包配置
     *
     * @return PackageConfig
     */
    private static PackageConfig packageConfig() {
        return new PackageConfig.Builder()
                .parent("com.xx.demo")
//                .moduleName("demo")
                .entity("entity")
                .service("service")
                .serviceImpl("service.impl")
                .mapper("mapper")
                .xml("mapper.xml")
                .controller("controller")
                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))
                .build();
    }

    /**
     * 策略配置
     *
     * @return StrategyConfig
     */
    private static StrategyConfig strategyConfig() {
        return new StrategyConfig.Builder()
                .disableSqlFilter()
                .addInclude("airlines_info")

                // entity文件策略
                .entityBuilder()
                // 设置父类
                .superClass(BaseEntity.class)
                // 开启 lombok 模型
                .enableLombok()
                // 添加父类公共字段(这些字段将不在实体中生成)
                .addSuperEntityColumns("create_time", "update_time")
                // 全局主键类型
                .idType(IdType.AUTO)
                // 添加表字段填充
//                .addTableFills(new Column("create_time", FieldFill.INSERT))
//                .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                // 逻辑删除字段名(数据库)
                .logicDeleteColumnName("deleted")

                // controller文件策略
                .controllerBuilder()
                .enableRestStyle()

                // service文件策略
                .serviceBuilder()
                .formatServiceFileName("%sService")
                .build();
    }
}

三、使用MybatisX生成代码

3.1、安装MybatisX插件

3.2、使用idea配置Database

3.3、使用生成代码

3.3.1、选择需要生成代码的表

3.3.2、配置代码生成路径、包名

配置项说明
module path代码生成模块
base package包路径
encoding文件编码格式
superClass生成实体类集成的父类
base path根路径,默认不需要修改
ignore field prefix忽略的字段前缀
ignore table prefix忽略的表前缀
relative package实体类所在包的名称
ignore field suffix忽略的字段后缀
ignore table suffix忽略的表后缀
extra class suffix增加实体类后缀
class name strategy类名生成测类额,camel:驼峰,same as tablename:和表名一样,默认为camel就可以
tableName带生成代码的表名
className生成的类名,可以直接修改
3.3.3、配置代码生成使用的模板

配置项说明
none不使用mybatis plus的模板
Mybatis-Plus 3使用Mybatis plus 3版本的模板
Mybatis-Plus 2使用Mybatis plus 2版本的模板
JPAJPA模板
Comment增加表和字段注释,增加主键注解,建议勾选
toString/hashCode/equals生成toString/hashCode/equals方法,不推荐开启,直接使用Lombok即可
Lombok使用Lombok注解
Actual Column实体名称和表字段名称保持一致
Actual Column Annotation上面勾选了Mybatis-Plus 3这项配置没有作用
JSR310:Date API使用新的时间类,不开启datetime实体类映射为Date,开启之后映射为LocalDateTime
Model是否生成实体类
custom-model-swagger生成swagger模板的字段注释,并且还会按照字段长度生成jsr303的字段校验注解
default-all不使用mybatis plus的模板, 生成mybatis的模板
default-empty只生成类,没有模板代码
mybatis-plus2使用Mybatis plus 2版本的模板
mybatis-plus3使用Mybatis plus 3版本的模板

四、总结

两种方式都可以生成代码,使用代码的方式更加灵活一些,代码也更加方便管理,使用插件更加快捷一点,也可以自定义修改插件模板,但是不方便团队维护

Top