代码生成器
一、相关依赖
下面的依赖组合主要用于 MyBatis-Plus 代码生成器、数据源配置以及模板渲染。 如果只是单独使用代码生成器,可以按实际情况裁剪,不一定需要全部引入。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql的依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!--springboot mybatis依赖包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<!-- mybatis plus 代码生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1</version>
</dependency>
<!-- 代码生成器模板 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
<!-- swaggerUI2 主要依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swaggerUI2 原生可视化视图 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swaggerUI2 可视化插件视图 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>二、代码生成器模板
这一节主要整理生成器使用到的模板文件。常见做法是按 entity、mapper、service、controller 等维度拆分模板,方便后续按项目规范定制输出结果。
三、entity模板
entity.java.ftl
package ${package.Entity};
<#list table.importPackages as pkg>
import ${pkg};
</#list>
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
<#if entityLombokModel>
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
</#if>
/**
* @Description ${table.comment}
* @Author ${author}
* @Date ${date}
*/
@ApiModel(value ="${table.comment}")
<#if entityLombokModel>
@Data
@EqualsAndHashCode(callSuper = false)
@Builder(toBuilder = true)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
</#if>
<#if table.convert>
@TableName("${table.name}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#else>
public class ${entity} implements Serializable {
</#if>
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
<#if field.keyFlag>
<#assign keyPropertyName="${field.propertyName}"/>
</#if>
<#if field.keyFlag>
<#assign keyPropertyName="${field.propertyName}"/>
</#if>
<#if field.comment != "">
@ApiModelProperty(value = "${field.comment}")
</#if>
<#-- ---------- 主键 ---------->
<#if field.keyFlag>
<#if field.keyIdentityFlag>
@TableId(value = "${field.name}", type = IdType.AUTO)
<#elseif idType?? && idType!= "">
@TableId(value = "${field.name}", type = IdType.${idType})
<#elseif field.convert>
@TableId("${field.name}")
</#if>
<#-- ---------- 普通字段 ---------->
<#elseif field.fill??>
<#-- ---------- 存在字段填充设置 ---------->
<#if field.convert>
@TableField(value = "${field.name}", fill = FieldFill.${field.fill})
<#else>
@TableField(fill = FieldFill.${field.fill})
</#if>
<#else>
@TableField("${field.name}")
</#if>
<#-- ---------- 乐观锁注解 ---------->
<#if versionFieldName?? && versionFieldName == field.name>
@Version
</#if>
<#-- ---------- 逻辑删除注解 ---------->
<#if logicDeleteFieldName?? && logicDeleteFieldName == field.name>
@TableLogic
</#if>
private ${field.propertyType} ${field.propertyName};
</#list>
<#-- ---------- END 字段循环遍历 ---------->
<#if !entityLombokModel>
<#list table.fields as field>
<#if field.propertyType.equals("boolean")>
<#assign getprefix="is"/>
<#else>
<#assign getprefix="get"/>
</#if>
public ${field.propertyType} ${getprefix}${field.capitalName}() {
return ${field.propertyName};
}
<#if entityBuilderModel>
public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
<#else>
public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
</#if>
this.${field.propertyName} = ${field.propertyName};
<#if entityBuilderModel>
return this;
</#if>
}
</#list>
</#if>
<#if activeRecord>
@Override
protected Serializable pkVal() {
<#if keyPropertyName??>
return this.${keyPropertyName};
<#else>
return null;
</#if>
}
</#if>
<#if !entityLombokModel>
@Override
public String toString() {
return "${entity}{" +
<#list table.fields as feild>
<#if velocityCount ==1>
"${field.propertyName}=" + ${field.propertyName} +
<#else>
", ${field.propertyName}=" + ${field.propertyName} +
</#if>
</#list>
"}";
}
</#if>
}四、Mapper 的 Java 模板
mapper.java.ftl
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
/**
* @Description ${table.comment} Mapper接口
* @Author ${author}
* @Date ${date}
*/
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}五、mapper的xml模板
mapper.xml.ftl ---默认不配置好
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="${entity}Map" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag><#--生成主键排在第一位-->
<id column="${field.name}" property="${field.propertyName}"/>
</#if>
</#list>
<#list table.commonFields as field><#--生成公共字段 -->
<result column="${field.name}" property="${field.propertyName}"/>
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<result column="${field.name}" property="${field.propertyName}"/>
</#if>
</#list>
</resultMap>
</#if>
<#if baseColumnList>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
<#list table.commonFields as field>
<#if field.name == field.propertyName >
${field.name}#else${field.name} AS ${field.propertyName}
</#if>
</#list >
${table.fieldNames}
</sql>
<!-- 通用条件列 -->
<sql id="${entity}ByCondition">
<#list table.commonFields as field><#--生成公共字段-->
<if test="${field.propertyName}!=null and ${field.propertyName}!=''">
AND ${field.name} = ${r"#{"}${field.propertyName}${r"}"}
</if>
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<if test="${field.propertyName}!=null and ${field.propertyName}!=''">
AND ${field.name} = ${r"#{"}${field.propertyName}${r"}"}
</if>
</#if>
</#list>
</sql>
<!-- 通用设置列 -->
<sql id="${entity}SetColumns">
<#list table.commonFields as field><#--生成公共字段-->
<if test="${field.propertyName}!=null and ${field.propertyName}!=''">
${field.name} = ${r"#{"}${field.propertyName}${r"}"},
</if>
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<if test="${field.propertyName}!=null and ${field.propertyName}!=''">
${field.name} = ${r"#{"}${field.propertyName}${r"}"},
</if>
</#if>
</#list>
</sql>
</#if>
</mapper>六、service模板
service.java.ftl
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* @Description ${table.comment} 服务类接口
* @Author ${author}
* @Date ${date}
*/
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}七、serviceImpl模板
serviceImpl.java.ftl
package ${package.ServiceImpl};
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import org.springframework.stereotype.Service;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @Description ${table.comment}服务类实现
* @Author ${author}
* @Date ${date}
*/
@Service
@AllArgsConstructor
@Slf4j
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName}{
}八、controller模板
controller.java.ftl
package ${package.Controller};
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.lcy.study.base.response.Result;
import com.lcy.study.base.util.ResultUtil;
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @Description ${table.comment}Controller
* @Author ${author}
* @Date ${date}
*/
@RestController
@RequestMapping("/${table.entityPath}")
@Api(tags = {"${table.comment}服务入口"})
@AllArgsConstructor
@Slf4j
public class ${table.controllerName} {
private final ${table.serviceName} ${table.entityPath}Service;
/**
* 新增
* @param ${table.entityPath} 添加信息
* @return Result
* @Author ${author}
* @date ${date}
**/
@PostMapping("/add.do")
@ApiOperation(value = "新增")
public Result<Object> save(${entity} ${table.entityPath}){
${table.entityPath}Service.save(${table.entityPath});
return ResultUtil.success();
}
/**
* 修改
* @param ${table.entityPath} 修改信息
* @return Result
* @Author ${author}
* @date ${date}
**/
@PostMapping("/update.do")
@ApiOperation(value = "修改")
public Result<Object> update(${entity} ${table.entityPath}){
${table.entityPath}Service.updateById(${table.entityPath});
return ResultUtil.success();
}
}九、代码生成类
直接启动配置。有两个类,一个是按照默认格式生成,如下第一个,第二个按照模板生成
package com.lcy.study.mybatis.generator;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
/**
* @Description 生成器main方法
* @Author lcy
* @Date 2021/04/13 09:00
*/
public class GeneratorApplication {
public static void main(String[] args){
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
System.out.println(gc);
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
// TODO 设置用户名
gc.setAuthor("lcy");
gc.setOpen(true);
// service 命名方式
gc.setServiceName("%sService");
// service impl 命名方式
gc.setServiceImplName("%sServiceImpl");
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setFileOverride(true);
//开启swaggerUI
gc.setSwagger2(true);
gc.setActiveRecord(true);
// XML 二级缓存
gc.setEnableCache(false);
// XML ResultMap
gc.setBaseResultMap(true);
// XML columList
gc.setBaseColumnList(true);
//设置日期格式
gc.setDateType(DateType.TIME_PACK);
//设置id自动生成方式
gc.setIdType(IdType.ASSIGN_ID);
mpg.setGlobalConfig(gc);
// TODO 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://106.53.90.108:3306/permission?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("lichaoyu0517");
mpg.setDataSource(dsc);
// TODO 包配置
PackageConfig pc = new PackageConfig();
//pc.setModuleName(scanner("模块名"));
pc.setParent("com.lcy.study.project");
pc.setEntity("domain.redPackage");
pc.setService("service.redPackage");
pc.setServiceImpl("service.redPackage.impl");
mpg.setPackageInfo(pc);
// 自定义需要填充的字段
List<TableFill> tableFillList = new ArrayList<>();
//如 每张表都有一个创建时间、修改时间
//而且这基本上就是通用的了,新增时,创建时间和修改时间同时修改
//修改时,修改时间会修改,
//虽然像Mysql数据库有自动更新几只,但像ORACLE的数据库就没有了,
//使用公共字段填充功能,就可以实现,自动按场景更新了。
//如下是配置
TableFill createField = new TableFill("CREATE_TIME", FieldFill.INSERT);
TableFill modifiedField = new TableFill("LAST_UPDATE_TIME", FieldFill.INSERT_UPDATE);
tableFillList.add(createField);
tableFillList.add(modifiedField);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap(){
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo){
// 自定义输入文件名称
return projectPath + "/src/main/resources/mapper/"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTableFillList(tableFillList);
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
// 设置逻辑删除键
strategy.setLogicDeleteFieldName("deleted");
// 指定生成的bean的数据库表名
strategy.setInclude("red_package_record","red_package_info");
//strategy.setSuperEntityColumns("id");
// 驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
// 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}模板生成。模板的路径和文件命名按照格式,如controller的模板,放在resources下的/vm/controller.java.vm
package com;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
/**
* @Description TODO
* @Author lcy
* @Date 2020/6/29 9:43
*/
public class TemplateApplication {
public static void main(String[] args){
AutoGenerator generator = new AutoGenerator();
// 全局变量配置
GlobalConfig gc = new GlobalConfig();
//当前路径
String projectPath = System.getProperty("user.dir");
//设置是否继承Model
gc.setActiveRecord(true);
// 输出路径
gc.setOutputDir(projectPath + "/src/main/java");
// 默认 false ,是否覆盖已生成文件
gc.setFileOverride(true);
//默认true ,是否打开输出目录
gc.setOpen(true);
// 默认false,是否开启二级缓存
gc.setEnableCache(false);
// 作者
gc.setAuthor("lcy");
//swagger注解 默认false
gc.setSwagger2(true);
// 默认false
gc.setBaseResultMap(true);
// 时间策略 默认TIME_PACK
gc.setDateType(DateType.TIME_PACK);
//默认false 和basemodel相似
gc.setBaseColumnList(true);
gc.setEntityName("%s");
gc.setControllerName("%sController");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
// 指定生成的主键类型
gc.setIdType(IdType.AUTO);
generator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dc = new DataSourceConfig();
// 数据库信息查询 //默认mysql
dc.setDbQuery(new MySqlQuery());
// 数据库类型
dc.setDbType(DbType.MYSQL);
//类型转换 默认mysql
dc.setTypeConvert(new MySqlTypeConvert());
//数据库配置
dc.setUrl("jdbc:mysql:///blog?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false");
dc.setDriverName("com.mysql.jdbc.Driver");
dc.setUsername("root");
dc.setPassword("root");
generator.setDataSource(dc);
// 包配置
PackageConfig pc = new PackageConfig();
//代码生成到哪个包下面
pc.setParent("com.lcy.project");
pc.setEntity("entity.permission");
pc.setService("service.permission");
pc.setServiceImpl("service.permission.impl");
generator.setPackageInfo(pc);
// 自定义配置
/**
* 将xml生成到resource下面
*/
// Velocity模板
//String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
// 自定义配置会被优先输出
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return projectPath + "/src/main/resources/mapper/"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
// 配置模板
TemplateConfig tc = new TemplateConfig();
// vm/entity.java 模板路径配置,默认在vm目录下,.vm 后缀不用加
//使用自定义模板生成代码
tc.setController("/vm/controller.java.vm");
tc.setService("/vm/service.java.vm");
tc.setServiceImpl("/vm/serviceImpl.java.vm");
tc.setEntity("/vm/entity.java.vm");
tc.setMapper("/vm/mapper.java.vm");
tc.setXml(null);
generator.setTemplate(tc);
// 数据库表配置
StrategyConfig sc = new StrategyConfig();
//是否大写命名 默认false
sc.setCapitalMode(false);
//是否跳过试图 默认false
sc.setSkipView(true);
// 表映射 驼峰命名
sc.setNaming(NamingStrategy.underline_to_camel);
// 字段映射 驼峰
sc.setColumnNaming(NamingStrategy.underline_to_camel);
//是否使用lombak 默认为false
sc.setEntityLombokModel(true);
// 默认false
sc.setRestControllerStyle(true);
//默认true
sc.setEntitySerialVersionUID(true);
//默认false 将mysql字段名生成静态变量
sc.setEntityColumnConstant(false);
//表名,用,隔开
sc.setInclude("user_info","role_info");
// sc.setExclude(""); // 不需要生成 二选一
// 默认false 注释
sc.setEntityTableFieldAnnotationEnable(true);
//默认false
sc.setControllerMappingHyphenStyle(false);
// 逻辑删除字段名称
sc.setLogicDeleteFieldName("status");
sc.setEntityLombokModel(true);
generator.setStrategy(sc);
// 模板引擎
generator.setTemplateEngine(new VelocityTemplateEngine());
generator.execute();
}
}模板参数
{
"date": "2018-10-30",
"superServiceImplClassPackage": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl",
"baseResultMap": true,
"superMapperClass": "BaseMapper",
"activeRecord": true,
"superServiceClass": "IService",
"superServiceImplClass": "ServiceImpl",
"table": {
"comment": "查询指定城市所有测点的空气质量实况每小时更新",
"commonFields": [],
"controllerName": "AirStatLiveDataController",
"convert": false,
"entityName": "AirStatLiveData",
"entityPath": "airStatLiveData",
"fieldNames": "table_id, citycode, cityname, createtime, time, info, devid, stationname, aqi, pm25, pm10, co, so2, no2, o3, prkey",
"fields": [
{
"capitalName": "TableId",
"columnType": "LONG",
"comment": "表单id",
"convert": false,
"keyFlag": true,
"keyIdentityFlag": true,
"name": "table_id",
"propertyName": "tableId",
"propertyType": "Long",
"type": "bigint(20)"
}
],
"importPackages": [
"com.baomidou.mybatisplus.annotation.IdType",
"com.baomidou.mybatisplus.extension.activerecord.Model",
"com.baomidou.mybatisplus.annotation.TableId",
"java.io.Serializable"
],
"mapperName": "AirStatLiveDataMapper",
"name": "air_stat_live_data",
"serviceImplName": "AirStatLiveDataServiceImpl",
"serviceName": "AirStatLiveDataService",
"xmlName": "AirStatLiveDataMapper"
},
"package": {
"Entity": "com.enso.entity",
"Mapper": "com.enso.mapper",
"Xml": "com.enso.mapper",
"ServiceImpl": "com.enso.service.impl",
"Service": "com.enso.service",
"Controller": "com.enso.controller"
},
"author": "Mr.Wang",
"swagger2": false,
"baseColumnList": false,
"kotlin": false,
"entityLombokModel": false,
"superMapperClassPackage": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
"restControllerStyle": false,
"entityBuilderModel": true,
"superServiceClassPackage": "com.baomidou.mybatisplus.extension.service.IService",
"entityBooleanColumnRemoveIsPrefix": false,
"entityColumnConstant": false,
"config": {
"globalConfig": {
"activeRecord": true,
"author": "Mr.Wang",
"baseColumnList": false,
"baseResultMap": true,
"controllerName": "%sController",
"dateType": "TIME_PACK",
"enableCache": false,
"fileOverride": false,
"kotlin": false,
"mapperName": "%sMapper",
"open": false,
"outputDir": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java",
"serviceImplName": "%sServiceImpl",
"serviceName": "%sService",
"swagger2": false,
"xmlName": "%sMapper"
},
"packageInfo": {
"$ref": "$.package"
},
"pathInfo": {
"entity_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\entity",
"controller_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\controller",
"xml_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\mapper",
"service_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\service",
"mapper_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\mapper",
"service_impl_path": "C:\\Users\\Administrator\\IdeaProjects\\nan-ning\\src\\main\\java\\com\\enso\\service\\impl"
},
"strategyConfig": {
"capitalMode": false,
"columnNaming": "underline_to_camel",
"controllerMappingHyphenStyle": false,
"entityBooleanColumnRemoveIsPrefix": false,
"entityBuilderModel": true,
"entityColumnConstant": false,
"entityLombokModel": false,
"entityTableFieldAnnotationEnable": false,
"include": [
"air_stat_live_data"
],
"naming": "underline_to_camel",
"restControllerStyle": false,
"skipView": false,
"superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
"superServiceClass": "com.baomidou.mybatisplus.extension.service.IService",
"superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
"superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
"superServiceClass": "com.baomidou.mybatisplus.extension.service.IService",
"superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl",
"tableInfoList": [
{
"$ref": "$.table"
}
],
"template": {
"controller": "/templates/controller.java",
"mapper": "/templates/mapper.java",
"service": "/templates/service.java",
"serviceImpl": "/templates/serviceImpl.java",
"xml": "/templates/mapper.xml"
}
},
"enableCache": false,
"entity": "AirStatLiveData"
}