作者:传说中的黑桃A

blog.csdn.net/sj13074480550/article/details/102976146

mybatis-plus使用generator代码生成器生成实体类支持Swagger2

  1. 先搭建项目,引入maven依赖

  2. 编写代码生成器代码(有说明)

  3. 在resources目录下创建templates目录

  4. 在templates目录下创建entity.java.vm模板(代码如下)

  5. 基本完成只要运行代码生成器代码,输入表名即可

使用自定义模板生成支持Swagger2的实体类,生成的@ApiModelProperty中的value值都是数据库表字段的注释,所有生成之前数据表一定要先注释好

1.先搭建项目,引入maven依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.9.RELEASE</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.1</version></dependency><!-- swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- Velocity模板引擎 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.1</version></dependency>
</dependencies>

2.编写代码生成器代码(有说明)

/*** @Description: 代码生成器* @author liangshaolian*/
public class CodeGenerator {/*** <p>* 读取控制台内容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);AutoGenerator generator = new AutoGenerator();// 全局变量配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir"); //当前项目gc.setOutputDir(projectPath+"/src/main/java"); // 输出路径gc.setFileOverride(true); // 默认 false ,是否覆盖已生成文件gc.setOpen(false); //默认true ,是否打开输出目录gc.setEnableCache(false); // 默认false,是否开启二级缓存gc.setAuthor("liangshaolian"); // 作者gc.setSwagger2(true); //默认falsegc.setBaseResultMap(true); // 默认falsegc.setDateType(DateType.TIME_PACK); // 时间策略 默认TIME_PACKgc.setBaseColumnList(true); //默认false  和basemodel相似gc.setEntityName("%s");gc.setControllerName("%sController");gc.setServiceName("I%sService");gc.setServiceImplName("%sServiceImpl");gc.setMapperName("I%sMapper");gc.setXmlName("%sMapper");gc.setIdType(IdType.AUTO); // 指定生成的主键类型generator.setGlobalConfig(gc);// 数据源配置DataSourceConfig dc = new DataSourceConfig();dc.setDbQuery(new MySqlQuery()); // 数据库信息查询 //默认mysqldc.setDbType(DbType.MYSQL);// 数据库类型dc.setTypeConvert(new MySqlTypeConvert()); //类型转换 默认mysqldc.setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false");dc.setDriverName("com.mysql.cj.jdbc.Driver");dc.setUsername("root");dc.setPassword("密码");generator.setDataSource(dc);// 包配置PackageConfig pc = new PackageConfig();pc.setParent("com.liang.module");//代码生成到哪个包下面
//        pc.setModuleName(""); //此处是所属模块名称
//        pc.setEntity("entity"); //默认entity,controller,service,service.impl,mapper,mapper.xmlgenerator.setPackageInfo(pc);// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};/*** 将xml生成到resource下面*/String templatePath = "/templates/mapper.xml.vm"; // Velocity模板// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!return projectPath + "/src/main/resources/mapper/"
//                        + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);generator.setCfg(cfg);// 配置模板TemplateConfig tc = new TemplateConfig();// templates/entity.java 模板路径配置,默认在templates目录下,.vm 后缀不用加tc.setEntity("templates/entity.java");//使用自定义模板生成实体类tc.setXml("");generator.setTemplate(tc);// 数据库表配置StrategyConfig sc = new StrategyConfig();sc.setCapitalMode(false); //是否大写命名 默认falsesc.setSkipView(true); //是否跳过试图 默认falsesc.setNaming(NamingStrategy.underline_to_camel);// 表映射 驼峰命名sc.setColumnNaming(NamingStrategy.underline_to_camel); // 字段映射 驼峰sc.setEntityLombokModel(true); //是否使用lombak 默认为falsesc.setRestControllerStyle(true); // 默认falsesc.setEntitySerialVersionUID(true); //默认truesc.setEntityColumnConstant(true); //默认false 将mysql字段名生成静态变量sc.setInclude(scanner("表名,多个英文逗号分割").split(",")); //表名,用,隔开  需要生产//     sc.setExclude(""); //                 不需要生成  二选一sc.setEntityTableFieldAnnotationEnable(true); // 默认false 注释sc.setControllerMappingHyphenStyle(false); //默认falsesc.setLogicDeleteFieldName("status"); // 逻辑删除字段名称generator.setStrategy(sc);// 模板引擎generator.setTemplateEngine(new VelocityTemplateEngine());generator.execute();}
}

3.在resources目录下创建templates目录

4.在templates目录下创建entity.java.vm模板(代码如下)

package ${package.Entity};#foreach($pkg in ${table.importPackages})
import ${pkg};
#end
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#if(${entityLombokModel})
import lombok.Data;
import lombok.EqualsAndHashCode;
##import lombok.experimental.Accessors;
#end/*** @Description:$!{table.comment}* @author ${author}* @since ${date}*/
@ApiModel(value ="$!{table.comment}")
#if(${entityLombokModel})
@Data
#if(${superEntityClass})
@EqualsAndHashCode(callSuper = true)
#else
@EqualsAndHashCode(callSuper = false)
#end
##@Accessors(chain = true)
#end
#if(${table.convert})
@TableName("${table.name}")
#end
#if(${superEntityClass})
public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
#elseif(${activeRecord})
public class ${entity} extends Model<${entity}> {
#else
public class ${entity} implements Serializable {
#endprivate static final long serialVersionUID = 1L;## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})#if(${field.keyFlag})#set($keyPropertyName=${field.propertyName})#end#if("$!field.comment" != "")@ApiModelProperty(value = "${field.comment}")#end#if(${field.keyFlag})## 主键s
#if(${field.keyIdentityFlag})
@TableId(value = "${field.name}", type = IdType.AUTO)
#elseif(!$null.isNull(${idType}) && "$!idType" != "")
@TableId(value = "${field.name}", type = IdType.${idType})
#elseif(${field.convert})
@TableId("${field.name}")
#end## 普通字段#elseif(${field.fill})## -----   存在字段填充设置   -----#if(${field.convert})@TableField(value = "${field.name}", fill = FieldFill.${field.fill})#else@TableField(fill = FieldFill.${field.fill})#end#elseif(${field.convert})@TableField("${field.name}")#end
## 乐观锁注解#if(${versionFieldName}==${field.name})@Version#end
## 逻辑删除注解#if(${logicDeleteFieldName}==${field.name})@TableLogic#endprivate ${field.propertyType} ${field.propertyName};
#end
## ----------  END 字段循环遍历  ----------#if(!${entityLombokModel})#foreach($field in ${table.fields})#if(${field.propertyType.equals("boolean")})#set($getprefix="is")#else#set($getprefix="get")#endpublic ${field.propertyType} ${getprefix}${field.capitalName}() {return ${field.propertyName};}#if(${entityBuilderModel})public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {#elsepublic void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {#endthis.${field.propertyName} = ${field.propertyName};#if(${entityBuilderModel})return this;#end}#end
#end#if(${entityColumnConstant})#foreach($field in ${table.fields})public static final String ${field.name.toUpperCase()} = "${field.name}";#end
#end
#if(${activeRecord})
@Override
protected Serializable pkVal() {#if(${keyPropertyName})return this.${keyPropertyName};#elsereturn null;#end}
#end
#if(!${entityLombokModel})
@Override
public String toString() {return "${entity}{" +#foreach($field in ${table.fields})#if($!{velocityCount}==1)"${field.propertyName}=" + ${field.propertyName} +#else", ${field.propertyName}=" + ${field.propertyName} +#end#end"}";}
#end
}

5.基本完成只要运行代码生成器代码,输入表名即可

生成的实体类效果如下:

/*** @Description:汽车品牌表* @author liangshaolian*/
@ApiModel(value ="汽车品牌表")
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tn_pur_brand")
public class TnPurBrand implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "主键")@TableId(value = "id", type = IdType.AUTO)private Long id;@ApiModelProperty(value = "首字母")@TableField("initials")private String initials;@ApiModelProperty(value = "汽车品牌")@TableField("brand_name")private String brandName;@ApiModelProperty(value = "品牌LOGO")@TableField("logo")private String logo;public static final String ID = "id";public static final String INITIALS = "initials";public static final String BRAND_NAME = "brand_name";public static final String LOGO = "logo";}

END

推荐好文

>>【练手项目】基于SpringBoot的ERP系统,自带进销存+财务+生产功能>>分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
>>能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2相关推荐

  1. mybatis-plus使用generator代码生成器生成实体类支持Swagger2

    mybatis-plus使用generator代码生成器生成实体类支持Swagger2 1.先搭建项目,引入maven依赖 2.编写代码生成器代码(有说明) 3.在resources目录下创建temp ...

  2. idea 集成mybatis,利用MyBatis Generator自动生成实体类、mapper文件

    最近一个老项目集成mybatis,利用 generator自动生成实体类.mapper的时候折腾了一小时,记录一下,避免以后再折腾 很简单的三步 https://gitee.com/shunangua ...

  3. 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型

    问题描述: 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型,IDEA提示报错"Usa ...

  4. 图解 IDEA 中 springboot 项目 MyBatis Generator 逆向生成实体类及 mapper 配置文件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.准备工作: 1. 新建一个 配置文件:generatorConfig.xml . <?xm ...

  5. 你还在手写sql吗? MyBatis 逆向工程使用 使用逆向工程生成实体类,超级好用的生成实体类与mapper

    众所周知项目上的rbac在入门以后,熟悉掌握了以后,sql这些自己手动写起来是非常繁琐且无聊,那大家有没有想过用工具,只要创建表,然后使用工具告诉他一些实体类的名字跟其他信息让他自动帮我们生成这些sq ...

  6. MyBatisPlus3.x代码生成器生成实体类自定义需要填充的字段

    场景 MyBatisPlus3.x中使用代码生成器(全注释): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89518466 M ...

  7. jfinal 生成实体类

    jfinal根据Generator生成器生成实体类: package com.ysd.test; import javax.sql.DataSource;import com.jfinal.kit.P ...

  8. 如何用MyBatis-Generator自动创建代码(映射生成实体类、DAO接口和Mapping映射文件)

    如何用MyBatis自动生成实体类.DAO接口和Mapping映射文件 引言: 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBa ...

  9. 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...

    解决问题: 可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件. 测试环境准备: 新建一个mysql数据库,例如mungerzTest. 生成一张主键为自增ID的学生表: C ...

最新文章

  1. Linux那些事儿 之 戏说USB(22)设备的生命线(五)
  2. XHTML Strict和Transitional 的区别
  3. 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)
  4. mysql 中 add2_计算器中的F,4,2,0,ADD2怎么调,MU键有什么用??急急急
  5. python 一次输入10个数_python 如何一次输入3个整数
  6. Confluence 6 为空白空间编辑默认主页
  7. EPSON 任务同步 改写
  8. Java访问权限的范围
  9. CodeForces - 786BLegacy——线段树建图+最短路
  10. 贪心算法——洛谷(P1094)纪念品分组
  11. 新手篇 | K8S配置最佳实践
  12. 网络编程-Socket介绍
  13. 编程语言的发展趋势及未来方向 目录 编程语言的发展趋势及未来方向 1 第一章 一、历史回顾及趋势概述 2 第一节 首先,编程语言的发展非常缓慢。oo等等,但是远没有好上1000倍。 3 第二节 出现
  14. SpringCloud系列之服务总线(Bus)
  15. 系统业务逻辑书籍_Python框架:Django写图书管理系统(LMS)
  16. CMake | include_guard命令详解
  17. Java对象扁平化的操作
  18. 用Python写个开心消消乐小游戏!自己写的游戏就是好玩!
  19. GPRS网络组成及接口
  20. 访问和更新Orkut数据

热门文章

  1. 史上最惨创始人!250亿帝国如今8亿贱卖,还被兄弟亲手送进了监狱
  2. 苹果发布会邀请函被玩坏:神似桂林西瓜霜
  3. 5G来了 多款4G手机开始降价销售
  4. 小米手环4 NFC版将全渠道开售:垃圾分类超智能
  5. 两名黑客因发现特斯拉漏洞获Model 3一辆和3.5万美元奖金
  6. Git GUI,Git Bash,Git CMD标签之间的区别
  7. 摄像头图像分析目标物体大小位置_对智能驾驶系统三种环境传感器布局的冗余关系分析...
  8. 软考路:2021年系统架构设计师之流水账
  9. Oracle中的函数(持续更新)
  10. java比较吊的程序代码_java中 compareTo()的程序代码及用法