网站app生成器,windows更新wordpress,北京怎样做企业网站,网页设计心得体会2篇【Java代码生成神器】自动化生成Java实体类、代码、增删改查功能#xff01;点击访问
推荐一个自己每天都在用的Java代码生成器#xff01;这个网站支持在线生成Java代码#xff0c;包含完整的Controller\Service\Entity\Dao代码#xff0c;完整的增删改查功能#xff01…【Java代码生成神器】自动化生成Java实体类、代码、增删改查功能点击访问
推荐一个自己每天都在用的Java代码生成器这个网站支持在线生成Java代码包含完整的Controller\Service\Entity\Dao代码完整的增删改查功能
还可以自定义自己的代码模板、自由配置高级选项指定是否集成Lombok和Swagger等常用库一键生成省去了大量时间和精力 快来试试吧在线地址
一款支持多种ORM框架的Java代码生成器基于模板引擎实现具有非常高的自由度可随意修改为适合你的代码风格 支持JPA、Mybatis、MybatisPlus等ORM框架
以下为开源版本 源码
前端https://github.com/dengweiping4j/code-generator-ui.git后端https://github.com/dengweiping4j/CodeGenerator.git
界面展示
关键代码 package com.dwp.codegenerator.utils;import com.dwp.codegenerator.domain.ColumnEntity;
import com.dwp.codegenerator.domain.DatabaseColumn;
import com.dwp.codegenerator.domain.GeneratorParams;
import com.dwp.codegenerator.domain.TableEntity;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class GeneratorUtil {/*** 生成代码** param generatorParams* param zip*/public static void generatorCode(GeneratorParams generatorParams, ZipOutputStream zip) {//参数处理TableEntity tableEntity formatParams(generatorParams);//设置velocity资源加载器initVelocity();//封装模板数据VelocityContext context getVelocityContext(generatorParams, tableEntity);//渲染模板apply(context, zip, tableEntity, generatorParams);}private static void apply(VelocityContext context, ZipOutputStream zip, TableEntity tableEntity, GeneratorParams generatorParams) {ListString templates getTemplates(generatorParams.getGeneratorType());templates.forEach(template - {StringWriter sw new StringWriter();Template tpl Velocity.getTemplate(template, UTF-8);tpl.merge(context, sw);try {String fileName getFileName(template, tableEntity.getUpperClassName(), generatorParams);//添加到zipzip.putNextEntry(new ZipEntry(fileName));IOUtils.write(sw.toString(), zip, UTF-8);IOUtils.closeQuietly(sw);zip.closeEntry();} catch (IOException e) {throw new RuntimeException(渲染模板失败表名 tableEntity.getTableName(), e);}});}/*** 使用自定义模板** param generatorType* return*/private static ListString getTemplates(String generatorType) {ListString templates new ArrayList();switch (generatorType) {case jpa:templates.add(template/jpa/Repository.java.vm);templates.add(template/jpa/Specifications.java.vm);templates.add(template/jpa/Service.java.vm);templates.add(template/jpa/Controller.java.vm);templates.add(template/jpa/Domain.java.vm);break;case mybatis:templates.add(template/mybatis/Mapper.java.vm);templates.add(template/mybatis/Mapper.xml.vm);templates.add(template/mybatis/Service.java.vm);templates.add(template/mybatis/ServiceImpl.java.vm);templates.add(template/mybatis/Controller.java.vm);templates.add(template/mybatis/Entity.java.vm);templates.add(template/mybatis/EntityParam.java.vm);templates.add(template/mybatis/PageResult.java.vm);templates.add(template/mybatis/RestResp.java.vm);break;case mybatis-plus:templates.add(template/mybatis-plus/Mapper.java.vm);templates.add(template/mybatis-plus/Mapper.xml.vm);templates.add(template/mybatis-plus/Service.java.vm);templates.add(template/mybatis-plus/ServiceImpl.java.vm);templates.add(template/mybatis-plus/Controller.java.vm);templates.add(template/mybatis-plus/Entity.java.vm);templates.add(template/mybatis-plus/EntityParam.java.vm);templates.add(template/mybatis-plus/PageResult.java.vm);templates.add(template/mybatis-plus/RestResp.java.vm);break;}return templates;}private static String getPackagePath(GeneratorParams generatorParams) {//配置信息Configuration config getConfig();String packageName StringUtils.isNotBlank(generatorParams.getPackageName())? generatorParams.getPackageName(): config.getString(package);String moduleName StringUtils.isNotBlank(generatorParams.getModuleName())? generatorParams.getModuleName(): config.getString(moduleName);String packagePath main File.separator java File.separator;if (StringUtils.isNotBlank(packageName)) {packagePath packageName.replace(., File.separator) File.separator moduleName File.separator;}return packagePath;}private static VelocityContext getVelocityContext(GeneratorParams generatorParams, TableEntity tableEntity) {Configuration config getConfig();MapString, Object map new HashMap();map.put(generatorType, generatorParams.getGeneratorType());map.put(tableName, tableEntity.getTableName());map.put(comments, tableEntity.getComments());map.put(pk, tableEntity.getPk());map.put(className, tableEntity.getUpperClassName());map.put(classname, tableEntity.getLowerClassName());map.put(pathName, tableEntity.getLowerClassName().toLowerCase());map.put(columns, tableEntity.getColumns());map.put(mainPath, StringUtils.isBlank(config.getString(mainPath)) ? com.dwp : config.getString(mainPath));map.put(package, StringUtils.isNotBlank(generatorParams.getPackageName()) ? generatorParams.getPackageName() : config.getString(package));map.put(moduleName, StringUtils.isNotBlank(generatorParams.getModuleName()) ? generatorParams.getModuleName() : config.getString(moduleName));map.put(author, StringUtils.isNotBlank(generatorParams.getAuthor()) ? generatorParams.getAuthor() : config.getString(author));map.put(email, config.getString(email));map.put(datetime, DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));VelocityContext context new VelocityContext(map);return context;}private static void initVelocity() {Properties prop new Properties();prop.put(file.resource.loader.class, org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader);Velocity.init(prop);}/*** 表、字段参数处理** param generatorParams* return*/private static TableEntity formatParams(GeneratorParams generatorParams) {TableEntity tableEntity new TableEntity();//表信息setTableEntity(tableEntity, generatorParams);//设置列信息setColumns(tableEntity, generatorParams);//没主键则第一个字段为主键if (tableEntity.getPk() null) {tableEntity.setPk(tableEntity.getColumns().get(0));}return tableEntity;}private static void setColumns(TableEntity tableEntity, GeneratorParams generatorParams) {ListColumnEntity columnsList new ArrayList();for (DatabaseColumn column : generatorParams.getColumns()) {ColumnEntity columnEntity new ColumnEntity();columnEntity.setColumnName(column.getColumnName());//列名转换成Java属性名String attrName columnToJava(column.getColumnName());columnEntity.setUpperAttrName(attrName);columnEntity.setLowerAttrName(StringUtils.uncapitalize(attrName));columnEntity.setComments(column.getColumnComment());//列的数据类型转换成Java类型Configuration config getConfig();String attrType config.getString(column.getColumnType(), unknowType);columnEntity.setAttrType(attrType);//是否主键if (column.isPrimary()) {tableEntity.setPk(columnEntity);}columnsList.add(columnEntity);}tableEntity.setColumns(columnsList);}private static void setTableEntity(TableEntity tableEntity, GeneratorParams generatorParams) {tableEntity.setTableName(generatorParams.getTableName());tableEntity.setComments(generatorParams.getTableComment());//表名转换成Java类名Configuration config getConfig();String className tableToJava(tableEntity.getTableName(), config.getString(tablePrefix));tableEntity.setUpperClassName(className);tableEntity.setLowerClassName(StringUtils.uncapitalize(className));}/*** 列名转换成Java属性名*/private static String columnToJava(String columnName) {return WordUtils.capitalizeFully(columnName, new char[]{_}).replace(_, );}/*** 表名转换成Java类名*/private static String tableToJava(String tableName, String tablePrefix) {if (StringUtils.isNotBlank(tablePrefix)) {tableName tableName.replaceFirst(tablePrefix, );}return columnToJava(tableName);}/*** 获取配置信息*/private static Configuration getConfig() {try {return new PropertiesConfiguration(generator.properties);} catch (ConfigurationException e) {throw new RuntimeException(获取配置文件失败, e);}}/*** 获取文件名*/private static String getFileName(String templateName, String className, GeneratorParams generatorParams) {String packagePath getPackagePath(generatorParams);if (StringUtils.isNotBlank(templateName)) {String afterClassName templateName.substring(templateName.lastIndexOf(/) 1, templateName.indexOf(.));if (templateName.contains(template/jpa/Specifications.java.vm)) {return packagePath repository File.separator className Specifications.java;}if (templateName.endsWith(Mapper.xml.vm)) {return packagePath afterClassName.toLowerCase() File.separator className afterClassName .xml;}if (templateName.contains(template/jpa/Domain.java.vm)|| templateName.endsWith(Entity.java.vm)) {return packagePath afterClassName.toLowerCase() File.separator className .java;}if (templateName.endsWith(EntityParam.java.vm)) {return packagePath entity/param File.separator className Param.java;}if (templateName.endsWith(ServiceImpl.java.vm)) {return packagePath service/impl File.separator className afterClassName .java;}if (templateName.endsWith(PageResult.java.vm)) {return packagePath util File.separator PageResult.java;}if (templateName.endsWith(RestResp.java.vm)) {return packagePath util File.separator RestResp.java;}return packagePath afterClassName.toLowerCase() File.separator className afterClassName .java;}return null;}
}
项目地址 前端https://github.com/dengweiping4j/code-generator-ui.git 后端https://github.com/dengweiping4j/CodeGenerator.git