目录

1.准备工作

2.导入依赖

3.新建包名称为generator,创建MyGenerator类

3.运行代码生成器

数据库配置(DataSourceConfig)

#基础配置

#可选配置

#全局配置(GlobalConfig)

#包配置(PackageConfig)

#模板配置(TemplateConfig)

#注入配置(InjectionConfig)

#策略配置(StrategyConfig)

#Entity 策略配置

#Controller 策略配置

#Service 策略配置

#Mapper 策略配置


AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

1.准备工作

创建springboot工程,这里省略。

2.导入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- mybatisplus依赖,注意不用引入mybatis依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <!-- mysql依赖可换成对应版本 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!-- mybatis-plus代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!-- 自动生成代码的模板引擎,mybatis-plus默认的-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!-- 由于生成的controller会用到web的注解-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

3.新建包名称为generator,创建MyGenerator类

需要对
1.数据源配置,(自己数据库对应的url,username,password等)
2.全局配置, (作者信息,输出目录等)
3.包配置, (Entity、Mapper、Mapper XML、Service、Controller 等各个模块的包命名等)
4.策略配置, (配置生成那些表,怎么生成等)

5.模板配置

6.注入配置

注意以下路径需要修改为实制项目路径,要生成的数据库表名需要修改为实制的,数据库源url修改为对应的数据源

package com.ming.admin.generator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

import java.util.Collections;
/**
 * 自动生成类
 *
 * @author jMz
 * @date 2022/1/12 0012
 * @description
 */
public class MyGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create(
                //数据源配置,url需要修改
                new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/cloud_user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai","root","mysql123")
                        .dbQuery(new MySqlQuery())
                        .schema("cloud_user")
                        .typeConvert(new MySqlTypeConvert())
                        .keyWordsHandler(new MySqlKeyWordsHandler())
        )

                //全局配置
                .globalConfig(builder -> {
                    builder.author("ming") // 设置作者
                            .disableOpenDir()//禁止打开输出目录
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(System.getProperty("user.dir")+"/generator/src/main/java"); // 指定输出目录
                })

                //包配置
                .packageConfig(builder -> {
                    builder.parent("com.ming.admin") // 设置父包名,根据实制项目路径修改
                            .moduleName("sys")      // 父包名路径下再新建的文件夹
                            .entity("pojo")         // 后面这些是sys文件夹里新建的各分类文件夹
                            .service("service")
                            .serviceImpl("service.impl")
                            .mapper("mapper")
                            .xml("mapper.xml")
                            .controller("controller")
                            //.other("other")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/generator/src/main/resources/mapper")); // 存放mapper.xml路径
                })

                //策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("tb_user") // 设置需要生成的表名
                            //.addTablePrefix("tb_", "c_") // 设置过滤表前缀
                            .entityBuilder() //实体类配置
                            .enableLombok() //使用lombok
                            .enableTableFieldAnnotation()//实体类字段注解
                            .controllerBuilder()//controller配置
                            .enableRestStyle()//开启restcontroller
                            .mapperBuilder()
                            .enableMapperAnnotation()//开启mapper注解
                            .enableBaseResultMap()//启用 BaseResultMap 生成
                            .enableBaseColumnList();//启用 BaseColumnList
                })
                //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();

    }
}

3.运行代码生成器

点击运行上面的main方法就能自动生成了

生成的效果图:

springboot mybatis自动生成 getID_数据库

这样代码生成器就写好了,如果需要其他格式模板可以自行参考下面的配置,自行DIY。 

数据库配置(DataSourceConfig)

基础配置

属性

说明

示例

url

jdbc 路径

jdbc:mysql://127.0.0.1:3306/mybatis-plus

username

数据库账号

root

password

数据库密码

123456

new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .build();

可选配置

方法

说明

示例

dbQuery(IDbQuery)

数据库查询

new MySqlQuery()

schema(String)

数据库 schema(部分数据库适用)

mybatis-plus

typeConvert(ITypeConvert)

数据库类型转换器

new MySqlTypeConvert()

keyWordsHandler(IKeyWordsHandler)

数据库关键字处理器

new MySqlKeyWordsHandler()

new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .dbQuery(new MySqlQuery())
    .schema("mybatis-plus")
    .typeConvert(new MySqlTypeConvert())
    .keyWordsHandler(new MySqlKeyWordsHandler())
    .build();

全局配置(GlobalConfig)

方法

说明

示例

fileOverride

覆盖已生成文件

默认值:false

disableOpenDir

禁止打开输出目录

默认值:true

outputDir(String)

指定输出目录

/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp

author(String)

作者名

baomidou 默认值:作者

enableKotlin

开启 kotlin 模式

默认值:false

enableSwagger

开启 swagger 模式

默认值:false

dateType(DateType)

时间策略

DateType.ONLY_DATE 默认值: DateType.TIME_PACK

commentDate(String)

注释日期

默认值: yyyy-MM-dd

new GlobalConfig.Builder()
    .fileOverride()
    .outputDir("/opt/baomidou")
    .author("baomidou")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();

包配置(PackageConfig)

方法

说明

示例

parent(String)

父包名

默认值:com.baomidou

moduleName(String)

父包模块名

默认值:无

entity(String)

Entity 包名

默认值:entity

service(String)

Service 包名

默认值:service

serviceImpl(String)

Service Impl 包名

默认值:service.impl

mapper(String)

Mapper 包名

默认值:mapper

mapperXml(String)

Mapper XML 包名

默认值:mapper.xml

controller(String)

Controller 包名

默认值:controller

other(String)

自定义文件包名

输出自定义文件时所用到的包名

pathInfo(Map<OutputFile, String>)

路径配置信息

Collections.singletonMap(OutputFile.mapperXml, "D://")

new PackageConfig.Builder()
    .parent("com.baomidou.mybatisplus.samples.generator")
    .moduleName("sys")
    .entity("po")
    .service("service")
    .serviceImpl("service.impl")
    .mapper("mapper")
    .mapperXml("mapper.xml")
    .controller("controller")
    .other("other")
    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
    .build();

模板配置(TemplateConfig)

方法

说明

示例

disable

禁用所有模板

disable(TemplateType...)

禁用模板

TemplateType.ENTITY

entity(String)

设置实体模板路径(JAVA)

/templates/entity.java

entityKt(String)

设置实体模板路径(kotlin)

/templates/entity.java

service(String)

设置 service 模板路径

/templates/service.java

serviceImpl(String)

设置 serviceImpl 模板路径

/templates/serviceImpl.java

mapper(String)

设置 mapper 模板路径

/templates/mapper.java

mapperXml(String)

设置 mapperXml 模板路径

/templates/mapper.xml

controller(String)

设置 controller 模板路径

/templates/controller.java

new TemplateConfig.Builder()
    .disable(TemplateType.ENTITY)
    .entity("/templates/entity.java")
    .service("/templates/service.java")
    .serviceImpl("/templates/serviceImpl.java")
    .mapper("/templates/mapper.java")
    .mapperXml("/templates/mapper.xml")
    .controller("/templates/controller.java")
    .build();

注入配置(InjectionConfig)

方法

说明

示例

beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>)

输出文件之前消费者

customMap(Map<String, Object>)

自定义配置 Map 对象

Collections.singletonMap("test", "baomidou")

customFile(Map<String, String>)

自定义配置模板文件

Collections.singletonMap("test.txt", "/templates/test.vm")

new InjectionConfig.Builder()
    .beforeOutputFile((tableInfo, objectMap) -> {
        System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
    })
    .customMap(Collections.singletonMap("test", "baomidou"))
    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    .build();

策略配置(StrategyConfig)

方法

说明

示例

enableCapitalMode

开启大写命名

默认值:false

enableSkipView

开启跳过视图

默认值:false

disableSqlFilter

禁用 sql 过滤

默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关

enableSchema

启用 schema

默认值:false,多 schema 场景的时候打开

likeTable(LikeTable)

模糊表匹配(sql 过滤)

likeTable 与 notLikeTable 只能配置一项

notLikeTable(LikeTable)

模糊表排除(sql 过滤)

likeTable 与 notLikeTable 只能配置一项

addInclude(String...)

增加表匹配(内存过滤)

include 与 exclude 只能配置一项

addExclude(String...)

增加表排除匹配(内存过滤)

include 与 exclude 只能配置一项

addTablePrefix(String...)

增加过滤表前缀

addTableSuffix(String...)

增加过滤表后缀

addFieldPrefix(String...)

增加过滤字段前缀

addFieldSuffix(String...)

增加过滤字段后缀

entityBuilder

实体策略配置

controllerBuilder

controller 策略配置

mapperBuilder

mapper 策略配置

serviceBuilder

service 策略配置

new StrategyConfig.Builder()
    .enableCapitalMode()
    .enableSkipView()
    .disableSqlFilter()
    .likeTable(new LikeTable("USER"))
    .addInclude("t_simple")
    .addTablePrefix("t_", "c_")
    .addFieldSuffix("_flag")
    .build();

Entity 策略配置

方法

说明

示例

nameConvert(INameConvert)

名称转换实现

superClass(Class<?>)

设置父类

BaseEntity.class

superClass(String)

设置父类

com.baomidou.global.BaseEntity

disableSerialVersionUID

禁用生成 serialVersionUID

默认值:true

enableColumnConstant

开启生成字段常量

默认值:false

enableChainModel

开启链式模型

默认值:false

enableLombok

开启 lombok 模型

默认值:false

enableRemoveIsPrefix

开启 Boolean 类型字段移除 is 前缀

默认值:false

enableTableFieldAnnotation

开启生成实体时生成字段注解

默认值:false

enableActiveRecord

开启 ActiveRecord 模型

默认值:false

versionColumnName(String)

乐观锁字段名(数据库)

versionPropertyName(String)

乐观锁属性名(实体)

logicDeleteColumnName(String)

逻辑删除字段名(数据库)

logicDeletePropertyName(String)

逻辑删除属性名(实体)

naming

数据库表映射到实体的命名策略

默认下划线转驼峰命名:NamingStrategy.underline_to_camel

columnNaming

数据库表字段映射到实体的命名策略

默认为 null,未指定按照 naming 执行

addSuperEntityColumns(String...)

添加父类公共字段

addIgnoreColumns(String...)

添加忽略字段

addTableFills(IFill...)

添加表字段填充

addTableFills(List<IFill>)

添加表字段填充

idType(IdType)

全局主键类型

convertFileName(ConverterFileName)

转换文件名称

formatFileName(String)

格式化文件名称

new StrategyConfig.Builder()
    .entityBuilder()
    .superClass(BaseEntity.class)
    .disableSerialVersionUID()
    .enableChainModel()
    .enableLombok()
    .enableRemoveIsPrefix()
    .enableTableFieldAnnotation()
    .enableActiveRecord()
    .versionColumnName("version")
    .versionPropertyName("version")
    .logicDeleteColumnName("deleted")
    .logicDeletePropertyName("deleteFlag")
    .naming(NamingStrategy.no_change)
    .columnNaming(NamingStrategy.underline_to_camel)
    .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
    .addIgnoreColumns("age")
    .addTableFills(new Column("create_time", FieldFill.INSERT))
    .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
    .idType(IdType.AUTO)
    .formatFileName("%sEntity")
    .build();

Controller 策略配置

方法

说明

示例

superClass(Class<?>)

设置父类

BaseController.class

superClass(String)

设置父类

com.baomidou.global.BaseController

enableHyphenStyle

开启驼峰转连字符

默认值:false

enableRestStyle

开启生成@RestController 控制器

默认值:false

convertFileName(ConverterFileName)

转换文件名称

formatFileName(String)

格式化文件名称

new StrategyConfig.Builder()
    .controllerBuilder()
    .superClass(BaseController.class)
    .enableHyphenStyle()
    .enableRestStyle()
    .formatFileName("%sAction")
    .build();

Service 策略配置

方法

说明

示例

superServiceClass(Class<?>)

设置 service 接口父类

BaseService.class

superServiceClass(String)

设置 service 接口父类

com.baomidou.global.BaseService

superServiceImplClass(Class<?>)

设置 service 实现类父类

BaseServiceImpl.class

superServiceImplClass(String)

设置 service 实现类父类

com.baomidou.global.BaseServiceImpl

convertServiceFileName(ConverterFileName)

转换 service 接口文件名称

convertServiceImplFileName(ConverterFileName)

转换 service 实现类文件名称

formatServiceFileName(String)

格式化 service 接口文件名称

formatServiceImplFileName(String)

格式化 service 实现类文件名称

new StrategyConfig.Builder()
    .serviceBuilder()
    .superServiceClass(BaseService.class)
    .superServiceImplClass(BaseServiceImpl.class)
    .formatServiceFileName("%sService")
    .formatServiceImplFileName("%sServiceImp")
    .build();

Mapper 策略配置

方法

说明

示例

superClass(Class<?>)

设置父类

BaseMapper.class

superClass(String)

设置父类

com.baomidou.global.BaseMapper

enableMapperAnnotation

开启 @Mapper 注解

默认值:false

enableBaseResultMap

启用 BaseResultMap 生成

默认值:false

enableBaseColumnList

启用 BaseColumnList

默认值:false

cache(Class<? extends Cache>)

设置缓存实现类

MyMapperCache.class

convertMapperFileName(ConverterFileName)

转换 mapper 类文件名称

convertXmlFileName(ConverterFileName)

转换 xml 文件名称

formatMapperFileName(String)

格式化 mapper 文件名称

formatXmlFileName(String)

格式化 xml 实现类文件名称

new StrategyConfig.Builder()
    .mapperBuilder()
    .superClass(BaseMapper.class)
    .enableMapperAnnotation()
    .enableBaseResultMap()
    .enableBaseColumnList()
    .cache(MyMapperCache.class)
    .formatMapperFileName("%sDao")
    .formatXmlFileName("%sXml")
    .build();