Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/baomidou/generator

Any Code generator
https://github.com/baomidou/generator

codegen generator

Last synced: about 1 hour ago
JSON representation

Any Code generator

Awesome Lists containing this project

README

        

[官方文档](https://baomidou.com)

[Mybatis-Plus](https://gitee.com/baomidou/mybatis-plus)

[企业版 Mybatis-Mate 高级特性](https://gitee.com/baomidou/mybatis-mate-examples)

### 安装

``` xml

com.baomidou
mybatis-plus-generator
Latest Version

```

[generator 版本查询](https://search.maven.org/search?q=a:mybatis-plus-generator)

### 使用(以下教程仅适用 3.5.1 以上版本,对历史版本的不兼容)

#### 快速生成

```java
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
```

#### 交互式生成

```java
FastAutoGenerator.create("url", "username", "password")
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")))
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig(builder -> builder.addInclude("t_simple"))
/*
模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker 或 Enjoy
.templateEngine(new BeetlTemplateEngine())
.templateEngine(new FreemarkerTemplateEngine())
.templateEngine(new EnjoyTemplateEngine())
*/
.execute();
```

* `更多例子可查看test包下面的samples`
* [H2CodeGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/H2CodeGeneratorTest.java)
* [MySQLGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/MySQLGeneratorTest.java)
* [OracleGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/OracleGeneratorTest.java)
* [PostgreSQLGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/PostgreSQLGeneratorTest.java)
* [DMGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/DMGeneratorTest.java)
* [FastAutoGeneratorTest](https://github.com/baomidou/generator/blob/develop/mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/FastAutoGeneratorTest.java)

### 说明

#### 数据库配置(DataSourceConfig)

##### 基础配置

| 属性 | 说明 | 示例 |
| --------------- | ---------- | ------ |
| url | jdbc路径 | jdbc:mysql://127.0.0.1:3306/mybatis-plus |
| username | 数据库账号 | root |
| password | 数据库密码 | 123456 |

```java
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) | 数据库类型转换器(配合SQLQuery)| new MySqlTypeConvert() |
| keyWordsHandler(IKeyWordsHandler) | 数据库关键字处理器 | new MySqlKeyWordsHandler()|
| databaseQueryClass(IDatabaseQuery) | 数据库查询方式 | SQLQuery.class |
| typeConvertHandler(ITypeConvertHandler) | 数据库类型转换器(配合DefaultQuery) | |
| addConnectionProperty(String key, String value) | 增加数据库连接属性 | |

```java
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())
.databaseQueryClass(SQLQuery.class)
.addConnectionProperty("remarks", "true")
.build();
```

#### 全局配置(GlobalConfig)

| 方法 | 说明 | 示例 |
| ------------------- | ----------------- | ------------------------------------------------------- |
| disableOpenDir | 禁止打开输出目录 | 默认值:true |
| outputDir(String) | 指定输出目录 | /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp |
| author(String) | 作者名 | baomidou 默认值:作者 |
| enableKotlin | 开启 kotlin 模式 | 默认值:false |
| enableSwagger | 开启 swagger 模式 | 默认值:false |
| enableSpringdoc | 开启 springdoc 模式 | 默认值:false |
| dateType(DateType) | 时间策略 | DateType.ONLY_DATE 默认值: DateType.TIME_PACK |
| commentDate(String) | 注释日期 | 默认值: yyyy-MM-dd |

```java
new GlobalConfig.Builder()
.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 |
| xml(String) | Mapper XML 包名 | 默认值:mapper.xml |
| controller(String) | Controller 包名 | 默认值:controller |
| pathInfo(Map) | 路径配置信息 | Collections.singletonMap(OutputFile.xml, "D://") |

```java
new PackageConfig.Builder()
.parent("com.baomidou.mybatisplus.samples.generator")
.moduleName("sys")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.xml, "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 |
| xml(String) | 设置 mapperXml 模板路径 | /templates/mapper.xml |
| controller(String) | 设置 controller 模板路径 | /templates/controller.java |

```java
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();
```

#### 注入配置(InjectionConfig)

| 方法 | 说明 | 示例 |
| ------------------------ |-----------------------| --------------------------- |
| beforeOutputFile(BiConsumer>)| 输出文件之前消费者 | |
| customMap(Map) | 自定义配置 Map 对象 | Collections.singletonMap("test", "baomidou") |
| customFile(Map) | 自定义配置模板文件(Map) | Collections.singletonMap("DTO.java", "/templates/dto.java.vm") |
| customFile(CustomFile) | 自定义配置模板文件(CustomFile) | new CustomFile.Builder().fileName("DTO.java").templatePath("/templates/dto.java.vm").packageName("dto").build() |
| customFile(List) | 自定义配置模板文件(List) | |
| customFile(Consumer) | 自定义配置模板文件(lambda) | |

```java
new InjectionConfig.Builder()
.beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
})
.customMap(Collections.singletonMap("test", "baomidou"))
.customFile(Collections.singletonMap("DTO.java", "/templates/dto.java.vm"))
.customFile(new CustomFile.Builder().fileName("DTO.java").templatePath("/templates/dto.java.vm").packageName("dto").build())
.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 策略配置 | |

```java
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 |
| enableFileOverride | 覆盖已有文件 | 默认值: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) | 添加表字段填充 | |
| idType(IdType) | 全局主键类型 | |
| convertFileName(ConverterFileName) | 转换文件名称 | |
| formatFileName(String) | 格式化文件名称 | |

```java
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 |
| enableFileOverride | 覆盖已有文件 | 默认值:false |
| convertFileName(ConverterFileName) | 转换文件名称 | |
| formatFileName(String) | 格式化文件名称 | |

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

##### Service策略配置

| 方法 | 说明 | 示例 |
| --------------------------------------------- | ----------------------------- | ----------------------------------- |
| enableFileOverride | 覆盖已有文件 | 默认值:false |
| 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 实现类文件名称 | |

```java
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 |
| enableFileOverride | 覆盖已有文件 | 默认值:false |
| cache(Class extends Cache>) | 设置缓存实现类 | MyMapperCache.class |
| convertMapperFileName(ConverterFileName) | 转换 mapper 类文件名称 | |
| convertXmlFileName(ConverterFileName) | 转换 xml 文件名称 | |
| formatMapperFileName(String) | 格式化 mapper 文件名称 | |
| formatXmlFileName(String) | 格式化 xml 实现类文件名称 | |

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