diff --git a/renren-admin/src/main/java/io/renren/modules/security/config/JsonConfig.java b/renren-admin/src/main/java/io/renren/modules/security/config/JsonConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7f1067e6a27ec4d24fbc19a75493378034a379f4 --- /dev/null +++ b/renren-admin/src/main/java/io/renren/modules/security/config/JsonConfig.java @@ -0,0 +1,61 @@ +package io.renren.modules.security.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import io.renren.common.utils.DateUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.TimeZone; + +/** + * Jackson JSON 转换器配置 + * @author hessian + * @since 2024-06-28 + */ +@Configuration +public class JsonConfig { + @Bean + public ObjectMapper objectMapper() { + ObjectMapper mapper = new ObjectMapper(); + + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); + mapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + + //Long类型转String类型 + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + mapper.registerModule(simpleModule); + + // LocalDateTime序列化 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN))); + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DateUtils.DATE_PATTERN))); + + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateUtils.TIME_PATTERN))); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN))); + + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DateUtils.DATE_PATTERN))); + javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DateUtils.TIME_PATTERN))); + + mapper.registerModule(javaTimeModule); + + return mapper; + } +} diff --git a/renren-admin/src/main/java/io/renren/modules/security/config/WebMvcConfig.java b/renren-admin/src/main/java/io/renren/modules/security/config/WebMvcConfig.java index 02af1dafb8f054443d8d03febfa22d0b0f516b9d..b04028ba7616b4c87d4eec14c7347ac83b7c7af6 100644 --- a/renren-admin/src/main/java/io/renren/modules/security/config/WebMvcConfig.java +++ b/renren-admin/src/main/java/io/renren/modules/security/config/WebMvcConfig.java @@ -8,25 +8,16 @@ package io.renren.modules.security.config; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.renren.common.utils.DateUtils; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import java.text.SimpleDateFormat; import java.util.List; -import java.util.TimeZone; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @@ -43,31 +34,8 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List> converters) { converters.add(new ByteArrayHttpMessageConverter()); - converters.add(new StringHttpMessageConverter()); converters.add(new ResourceHttpMessageConverter()); converters.add(new AllEncompassingFormHttpMessageConverter()); converters.add(new StringHttpMessageConverter()); - converters.add(jackson2HttpMessageConverter()); } - - @Bean - public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { - MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); - ObjectMapper mapper = new ObjectMapper(); - - //日期格式转换 - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); - mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); - - //Long类型转String类型 - SimpleModule simpleModule = new SimpleModule(); - simpleModule.addSerializer(Long.class, ToStringSerializer.instance); - simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); - mapper.registerModule(simpleModule); - - converter.setObjectMapper(mapper); - return converter; - } - } \ No newline at end of file diff --git a/renren-generator/src/main/java/io/renren/controller/SysGeneratorController.java b/renren-generator/src/main/java/io/renren/controller/SysGeneratorController.java index 6eda8ea319154f8e91bd7816d91d87fd33c298de..b7524ba0c52689767cb66ad31295ca6cbecfd31c 100644 --- a/renren-generator/src/main/java/io/renren/controller/SysGeneratorController.java +++ b/renren-generator/src/main/java/io/renren/controller/SysGeneratorController.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; +import java.util.List; import java.util.Map; /** @@ -59,4 +60,15 @@ public class SysGeneratorController { IoUtil.write(response.getOutputStream(), false, data); } + + /** + * 生成代码 + */ + @ResponseBody + @RequestMapping("/code-file") + public R codeNew(String tables, HttpServletResponse response) throws IOException { + List files = sysGeneratorService.generatorCodeToFile(tables.split(",")); + + return R.ok().put("files", files); + } } diff --git a/renren-generator/src/main/java/io/renren/service/SysGeneratorService.java b/renren-generator/src/main/java/io/renren/service/SysGeneratorService.java index 0c0ef6d771250eaf52b498de65a5df2c48c43b3a..42c65e4278a096601a38aea641caac773951ce12 100644 --- a/renren-generator/src/main/java/io/renren/service/SysGeneratorService.java +++ b/renren-generator/src/main/java/io/renren/service/SysGeneratorService.java @@ -19,6 +19,7 @@ import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.stereotype.Service; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.zip.ZipOutputStream; @@ -63,4 +64,18 @@ public class SysGeneratorService { IOUtils.closeQuietly(zip); return outputStream.toByteArray(); } + + public List generatorCodeToFile(String[] tableNames) { + List files = new ArrayList<>(); + for (String tableName : tableNames) { + //查询表信息 + Map table = queryTable(tableName); + //查询列信息 + List> columns = queryColumns(tableName); + //生成代码 + files.addAll(GenUtils.generatorCodeToFile(table, columns)); + } + + return files; + } } diff --git a/renren-generator/src/main/java/io/renren/utils/GenUtils.java b/renren-generator/src/main/java/io/renren/utils/GenUtils.java index e28d61af3e398406bac6531d4084ebaa6b6a0dbb..44614377715103df4d275195b3f9e4d32271d940 100644 --- a/renren-generator/src/main/java/io/renren/utils/GenUtils.java +++ b/renren-generator/src/main/java/io/renren/utils/GenUtils.java @@ -22,6 +22,7 @@ import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.StringWriter; import java.util.*; @@ -251,4 +252,140 @@ public class GenUtils { return null; } + + public static List generatorCodeToFile(Map table, List> columns) { + //配置信息 + Configuration config = getConfig(); + boolean hasBigDecimal = false; + //表信息 + TableEntity tableEntity = new TableEntity(); + tableEntity.setTableName(table.get("tableName" )); + tableEntity.setComments(table.get("tableComment" )); + //表名转换成Java类名 + String className = tableToJava(tableEntity.getTableName(), config.getString("tablePrefix" )); + tableEntity.setClassName(className); + tableEntity.setClassname(StringUtils.uncapitalize(className)); + + String javaOutputDir = config.getString("javaOutputDir" ); + String sqlOutputDir = config.getString("sqlOutputDir" ); + String vueOutputDir = config.getString("vueOutputDir" ); + + if (StrUtil.isBlank(javaOutputDir)) { + throw new RuntimeException("javaOutputDir is not set" ); + } + + if (StrUtil.isBlank(sqlOutputDir)) { + throw new RuntimeException("sqlOutputDir is not set" ); + } + + if (StrUtil.isBlank(vueOutputDir)) { + throw new RuntimeException("vueOutputDir is not set" ); + } + + //列信息 + List columnsList = new ArrayList<>(); + for (Map column : columns) { + ColumnEntity columnEntity = new ColumnEntity(); + columnEntity.setColumnName(column.get("columnName" )); + columnEntity.setDataType(column.get("dataType" )); + columnEntity.setComments(column.get("columnComment" )); + columnEntity.setExtra(column.get("extra" )); + + //列名转换成Java属性名 + String attrName = columnToJava(columnEntity.getColumnName()); + columnEntity.setAttrName(attrName); + columnEntity.setAttrname(StringUtils.uncapitalize(attrName)); + + //列的数据类型,转换成Java类型 + String attrType = config.getString(columnEntity.getDataType(), "unknowType" ); + columnEntity.setAttrType(attrType); + if (!hasBigDecimal && attrType.equals("BigDecimal" )) { + hasBigDecimal = true; + } + //是否主键 + if ("PRI".equalsIgnoreCase(column.get("columnKey" )) && tableEntity.getPk() == null) { + tableEntity.setPk(columnEntity); + } + + columnsList.add(columnEntity); + } + tableEntity.setColumns(columnsList); + + //没主键,则第一个字段为主键 + if (tableEntity.getPk() == null) { + tableEntity.setPk(tableEntity.getColumns().get(0)); + } + + //设置velocity资源加载器 + Properties prop = new Properties(); + prop.put("file.resource.loader.class" , "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" ); + Velocity.init(prop); + + //封装模板数据 + Map map = new HashMap<>(); + map.put("tableName" , tableEntity.getTableName()); + map.put("comments" , tableEntity.getComments()); + map.put("pk" , tableEntity.getPk()); + map.put("className" , tableEntity.getClassName()); + map.put("classname" , tableEntity.getClassname()); + map.put("pathName" , tableEntity.getClassname().toLowerCase()); + map.put("columns" , tableEntity.getColumns()); + map.put("hasBigDecimal" , hasBigDecimal); + map.put("version" , config.getString("version" )); + map.put("package" , config.getString("package" )); + map.put("outputPackage" , config.getString("outputPackage" )); + map.put("moduleName" , config.getString("moduleName" )); + map.put("author" , config.getString("author" )); + map.put("email" , config.getString("email" )); + map.put("datetime" , DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN)); + map.put("date" , DateUtils.format(new Date(), DateUtils.DATE_PATTERN)); + + for (int i = 0; i <= 10; i++) { + map.put("id" + i, IdWorker.getId()); + } + + VelocityContext context = new VelocityContext(map); + + //获取模板列表 + List templates = getTemplates(); + List files = new ArrayList<>(); + for (String template : templates) { + //渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, "UTF-8" ); + tpl.merge(context, sw); + + try { + String filename = getFileName(template, tableEntity.getClassName(), config.getString("outputPackage" ), config.getString("moduleName" )); + + File outputFile; + if (filename.startsWith("main" + File.separator)) { + outputFile = new File(javaOutputDir, filename); + } else if (filename.startsWith("vue" + File.separator )) { + outputFile = new File(vueOutputDir, filename.substring(4)); + } else if (filename.endsWith(".sql" )) { + outputFile = new File(sqlOutputDir, filename); + } else { + throw new RuntimeException("unknown file type: " + filename ); + } + + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + throw new RuntimeException("failed to create directory: " + outputFile.getParentFile()); + } + } + + try (FileOutputStream fos = new FileOutputStream(outputFile)) { + IoUtil.writeUtf8(fos, false, sw.toString()); + } + + files.add(outputFile.getAbsolutePath()); + + } catch (IOException e) { + throw new RenException("渲染模板失败,表名:" + tableEntity.getTableName(), e); + } + } + + return files; + } } diff --git a/renren-generator/src/main/resources/generator.properties b/renren-generator/src/main/resources/generator.properties index d852f2bb4f15c15b0340ea24be6bd03539a9385a..89615b70b69e48bbba1694b8fd2359c69bd5eb60 100644 --- a/renren-generator/src/main/resources/generator.properties +++ b/renren-generator/src/main/resources/generator.properties @@ -1,18 +1,23 @@ -#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F +# 代码生成器,配置信息 -#\u5305\u540D +# 基础包名 package=io.renren +# 输出包名 +outputPackage=io.renren +# 模块名 ( 最终类名 = outputPackage + .modules. + moduleName + 类名 ) moduleName=demo -#\u4F5C\u8005 +# 作者 author=Mark -#Email +# Email email=sunlightcs@gmail.com -#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00) +# 表前缀(类名不会包含表前缀) tablePrefix=tb_ version=1.0.0 +javaOutputDir=D:\\workspace\\sange\\renren-security\\renren-admin\\src +sqlOutputDir=D:\\workspace\\sange\\renren-security\\renren-admin\\db\\scrm +vueOutputDir=D:\\workspace\\sange\\renren-security\\renren-ui\\src - -#\u7C7B\u578B\u8F6C\u6362\uFF0C\u914D\u7F6E\u4FE1\u606F +# 类型转换,配置信息 tinyint=Integer smallint=Integer mediumint=Integer diff --git a/renren-generator/src/main/resources/static/js/generator.js b/renren-generator/src/main/resources/static/js/generator.js index f19a8f2014f0029262e6b6e89cf5b34c408dbf57..97baeb0eb83db331a60ec9f410225930866f9b9f 100644 --- a/renren-generator/src/main/resources/static/js/generator.js +++ b/renren-generator/src/main/resources/static/js/generator.js @@ -54,6 +54,24 @@ var vm = new Vue({ return ; } location.href = "sys/generator/code?tables=" + tableNames.join(); + }, + generatorFiles: function() { + var tableNames = getSelectedRows(); + if(tableNames == null){ + return ; + } + + $.get("sys/generator/code-file?tables=" + tableNames.join(), function(response) { + if (+response.code !== 0) { + alert(response.msg); + } else { + window.layer.open({ + type: 1, + area: ['1020px', '600px'], // 宽高 + content: '
已生成文件
    ' + response.files.map(a => `
  1. ${a}
  2. `).join("\n") + '
' + }); + } + }, 'json'); } } }); diff --git a/renren-generator/src/main/resources/template/Controller.java.vm b/renren-generator/src/main/resources/template/Controller.java.vm index 4b556e7523f2cb69706fe00326bb993cbd8fbf60..3f964bbe8022eb3b1fe0d1d427772671d46acab0 100644 --- a/renren-generator/src/main/resources/template/Controller.java.vm +++ b/renren-generator/src/main/resources/template/Controller.java.vm @@ -1,4 +1,4 @@ -package ${package}.modules.${moduleName}.controller; +package ${outputPackage}.modules.${moduleName}.controller; import ${package}.common.annotation.LogOperation; import ${package}.common.constant.Constant; @@ -10,14 +10,17 @@ import ${package}.common.validator.ValidatorUtils; import ${package}.common.validator.group.AddGroup; import ${package}.common.validator.group.DefaultGroup; import ${package}.common.validator.group.UpdateGroup; -import ${package}.modules.${moduleName}.dto.${className}DTO; -import ${package}.modules.${moduleName}.excel.${className}Excel; -import ${package}.modules.${moduleName}.service.${className}Service; +import ${outputPackage}.modules.${moduleName}.dto.${className}DTO; +import ${outputPackage}.modules.${moduleName}.excel.${className}Excel; +import ${outputPackage}.modules.${moduleName}.service.${className}Service; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; diff --git a/renren-generator/src/main/resources/template/DTO.java.vm b/renren-generator/src/main/resources/template/DTO.java.vm index b05bc697224c84b69647b509ae08e932cd614df1..0d320a8b4ce247cdbef60d2a25ff8e9907e8870a 100644 --- a/renren-generator/src/main/resources/template/DTO.java.vm +++ b/renren-generator/src/main/resources/template/DTO.java.vm @@ -1,9 +1,11 @@ -package ${package}.modules.${moduleName}.dto; +package ${outputPackage}.modules.${moduleName}.dto; import lombok.Data; import java.io.Serializable; import java.util.Date; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; #if(${hasBigDecimal}) import java.math.BigDecimal; diff --git a/renren-generator/src/main/resources/template/Dao.java.vm b/renren-generator/src/main/resources/template/Dao.java.vm index 3e3554a8f7b96f68d17e7c562b078c9628b70d5a..462826d736b5f1de20b85747a9cdecfaba816cdb 100644 --- a/renren-generator/src/main/resources/template/Dao.java.vm +++ b/renren-generator/src/main/resources/template/Dao.java.vm @@ -1,7 +1,7 @@ -package ${package}.modules.${moduleName}.dao; +package ${outputPackage}.modules.${moduleName}.dao; import ${package}.common.dao.BaseDao; -import ${package}.modules.${moduleName}.entity.${className}Entity; +import ${outputPackage}.modules.${moduleName}.entity.${className}Entity; import org.apache.ibatis.annotations.Mapper; /** diff --git a/renren-generator/src/main/resources/template/Dao.xml.vm b/renren-generator/src/main/resources/template/Dao.xml.vm index 77acb479854a1acbd1f8a5f76c250a5f0ca01ed9..b9682e498bfa81e92b415ca8cdde7ea5bed2378b 100644 --- a/renren-generator/src/main/resources/template/Dao.xml.vm +++ b/renren-generator/src/main/resources/template/Dao.xml.vm @@ -1,9 +1,9 @@ - + - + #foreach($column in $columns) #end diff --git a/renren-generator/src/main/resources/template/Entity.java.vm b/renren-generator/src/main/resources/template/Entity.java.vm index ad363f6f43bd9fa1d6e0ce34c812c5231f6eb138..2369ed70a4c635d1cc00448c41e5e2ca5d279848 100644 --- a/renren-generator/src/main/resources/template/Entity.java.vm +++ b/renren-generator/src/main/resources/template/Entity.java.vm @@ -1,4 +1,4 @@ -package ${package}.modules.${moduleName}.entity; +package ${outputPackage}.modules.${moduleName}.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/renren-generator/src/main/resources/template/Excel.java.vm b/renren-generator/src/main/resources/template/Excel.java.vm index 0a3b22f0df45c97d214264227fcbe72d47b33218..a9d5616c1528fbef9bf1511af5c463513ccdc49f 100644 --- a/renren-generator/src/main/resources/template/Excel.java.vm +++ b/renren-generator/src/main/resources/template/Excel.java.vm @@ -1,4 +1,4 @@ -package ${package}.modules.${moduleName}.excel; +package ${outputPackage}.modules.${moduleName}.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; diff --git a/renren-generator/src/main/resources/template/Service.java.vm b/renren-generator/src/main/resources/template/Service.java.vm index b3ee6061de6335e22698276cba9656777476f5bf..5548aea9253c2960c7821cacb7889afb3d32416b 100644 --- a/renren-generator/src/main/resources/template/Service.java.vm +++ b/renren-generator/src/main/resources/template/Service.java.vm @@ -1,8 +1,8 @@ -package ${package}.modules.${moduleName}.service; +package ${outputPackage}.modules.${moduleName}.service; import ${package}.common.service.CrudService; -import ${package}.modules.${moduleName}.dto.${className}DTO; -import ${package}.modules.${moduleName}.entity.${className}Entity; +import ${outputPackage}.modules.${moduleName}.dto.${className}DTO; +import ${outputPackage}.modules.${moduleName}.entity.${className}Entity; /** * ${comments} diff --git a/renren-generator/src/main/resources/template/ServiceImpl.java.vm b/renren-generator/src/main/resources/template/ServiceImpl.java.vm index 52d9c60e2c3a5df8795e638be5a207812b660482..3248f373ce974015ac97a4a5d5d1fee9a2dc250d 100644 --- a/renren-generator/src/main/resources/template/ServiceImpl.java.vm +++ b/renren-generator/src/main/resources/template/ServiceImpl.java.vm @@ -1,11 +1,11 @@ -package ${package}.modules.${moduleName}.service.impl; +package ${outputPackage}.modules.${moduleName}.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import ${package}.common.service.impl.CrudServiceImpl; -import ${package}.modules.${moduleName}.dao.${className}Dao; -import ${package}.modules.${moduleName}.dto.${className}DTO; -import ${package}.modules.${moduleName}.entity.${className}Entity; -import ${package}.modules.${moduleName}.service.${className}Service; +import ${outputPackage}.modules.${moduleName}.dao.${className}Dao; +import ${outputPackage}.modules.${moduleName}.dto.${className}DTO; +import ${outputPackage}.modules.${moduleName}.entity.${className}Entity; +import ${outputPackage}.modules.${moduleName}.service.${className}Service; import cn.hutool.core.util.StrUtil; import org.springframework.stereotype.Service; diff --git a/renren-generator/src/main/resources/views/generator.html b/renren-generator/src/main/resources/views/generator.html index 215db658921b378a045ff93c449c121724cf0df2..d014f25bc9906070e17c82e38340bc70dd7bfffc 100644 --- a/renren-generator/src/main/resources/views/generator.html +++ b/renren-generator/src/main/resources/views/generator.html @@ -24,7 +24,8 @@ 查询 -  生成代码 +  生成代码Zip +  生成代码到文件