JPA代码生成器

【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) {List<String> 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 List<String> getTemplates(String generatorType) {List<String> 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();Map<String, 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) {List<ColumnEntity> 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235756.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui中添加开关控制

<template><!-- 图层管理 --><div class"home-wrapper"><div class"table-list"><div class"list"><el-table :data"tableData" height"100%" style"width: 100%;" border>&…

java操作windows系统功能案例(一)

下面是一个Java操作Windows系统功能的简单案例&#xff1a; 获取系统信息&#xff1a; import java.util.Properties;public class SystemInfo {public static void main(String[] args) {Properties properties System.getProperties();properties.list(System.out);} }该程…

组合(回溯算法)

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 样例输入 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],…

第一百八十五回 如何禁止页面跟随手机自动旋转

文章目录 1. 概念介绍2. 使用方法2.1 全面禁止2.2 局部禁止3. 示例代码4. 内容总结我们在上一章回中介绍了"如何自定义Radio组件"相关的内容,本章回中将介绍 如何禁止页面随手机自动旋转.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在手机默认设置下,手机…

Kubernetes 安全最佳实践:保护您的秘密

Kubernetes 是一个可用于微服务的开源容器编排平台。当我们想要部署容器化应用程序、自动化管理和扩展应用程序时&#xff0c;Kubernetes 非常有用。 在容器中运行单个微服务而不是在同一虚拟机中运行多个进程几乎总是更安全。每当我们在 Kubernetes 中启动任何 pod 时&#x…

Ubuntu 20.04 for NVIDIA V100 GPU安装手册

安装Ubuntu 20.04.3 LTS版本 image.png 安装Ubuntu 20.04按照安装提示&#xff0c;仔细选择每一项&#xff0c;基本默认即可。 系统中查看GPU信息 系统安装完成之后&#xff0c;进入系统&#xff0c;使用lspci 命令查询一下GPU是否存在、型号信息是什么。 bpangbobpang:\~$…

浅谈用户体验测试的主要功能

用户体验(User Experience&#xff0c;简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望&#xff0c;提高用户满意度&#xff0c;用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能&#xff0c;以及它在产品开发过程中的重要性。…

Mybatis 的简单运用介绍

Mybatis 用于操作数据库 操作数据库肯定需要: 1.SQL语句 2.数据库对象和 java 对象的映射 接下来我们看看怎么使用 Mybatis 我们先搞一些数据库内容 然后将其这些内容和Java对象进行映射 再创建一个类实现 select * from 再写一个类证明上述代码是否可以实现 别忘了在appli…

会泽一村民上山放羊吸烟引发森林火灾,AI科技急需关注

2023年4月&#xff0c;会泽县古城街道厂沟村委会望香台山林中发生了一场由疏忽引发的森林火灾。张某某在放羊时未完全熄灭烟头&#xff0c;导致7.33公顷的林地和草地被焚毁&#xff0c;直接经济损失高达29.097万元。这一事件再次凸显了日常生活中的安全隐患。 在这一背景下&…

python爬虫基础知识

使用python进行网络爬虫开发之前&#xff0c;我们要对什么是浏览器、什么HTML&#xff0c;HTML构成。请求URL的方法都有一个大概了解才能更清晰的了解如何进行数据爬取。 什么是浏览器&#xff1f; 网页浏览器&#xff0c;简称为浏览器,是一种用于检索并展示万维网信息资源的…

云计算生成式 -给你不一样的音乐推荐新体验

目录 摘要&#xff1a; 正文&#xff1a; 一、亚马逊云与生成式 AI 结合的展望/总结 二、我用亚马逊云科技生成式 AI 产品打造了什么&#xff0c;解决了什么问题 三、未来云端技术发展趋势的见解 四、云端技术未来需要解决的问题 1、如何保护数据安全和隐私&#xff1f; …

EI级 | Matlab实现TCN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-LSTM-Multihead-Attent…