1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 代码自动生成器code-generator

代码自动生成器code-generator

时间:2023-08-19 22:25:44

相关推荐

代码自动生成器code-generator

文章目录

前言一、搭建步骤二、使用步骤1.先搭建项目code-generator,引入maven依赖2.编写代码生成器代码3.在resources目录下创建templates目录4.在templates目录下创建entity.java.vm模板,文件名为:entity.java5.基本完成只要运行代码生成器代码,输入表名即 控制台乱码问题解决

前言

mybatis-plus使用 generator 代码生成器生成基础代码,支持Swagger2


一、搭建步骤

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

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

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

4、在templates目录下创建entity.java.vm模板

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

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

二、使用步骤

1.先搭建项目code-generator,引入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.编写代码生成器代码

代码如下:

package com.generator;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;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.*;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;import mons.lang3.StringUtils;import java.util.ArrayList;import java.util.List;import java.util.Scanner;/*** @Description : CodeGenerator自动代码生成器* @Author : 冰雪伯爵* @Date : /5/2**/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("冰雪伯爵"); // 作者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("%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.generator.module");//代码生成到哪个包下面//pc.setModuleName("com-generator"); //此处是所属模块名称// 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模板,文件名为:entity.java

代码如下:

package ${package.Entity};#foreach($pkg in ${table.importPackages})import ${pkg};#endimport io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;#if(${entityLombokModel})import lombok.Data;import lombok.EqualsAndHashCode;##import lombok.experimental.Accessors;#end/*** @Description:$!{ment}* @author ${author}* @since ${date}*/@ApiModel(value = "$!{ment}")#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}>{#elsepublic 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("$!ment"!="")@ApiModelProperty(value = "${ment}")#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})@Overrideprotected Serializable pkVal(){#if(${keyPropertyName})return this.${keyPropertyName};#elsereturn null;#end}#end#if(!${entityLombokModel})@Overridepublic 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.基本完成只要运行代码生成器代码,输入表名即

控制台乱码问题解决

运行main函数后,控制台有可能出现乱码的情况,这个时候在VM options那里输入:-Dfile.encoding=UTF-8 即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。