java自动代码生成

article/2025/11/10 6:32:30

1.概述

可在线自动生成代码,省去复制、修改通用模板代码的繁琐过程,减少团队70%以上的开发工作量

基于java的template模板引擎velocity,在定义好模板文件后,动态产生适应业务的java、xml、html、sql等代码文件

2.自动生成过程

首先引入velocity的pom依赖

        <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><artifactId>velocity</artifactId><groupId>org.apache.velocity</groupId><version>1.7</version></dependency>

其中commons-io为io流的相关框架。

在Resources目录下先定义好模板文件template/User.java.vm

package com.yrr.mvntest;import java.util.Date;
/*** ${comments}*/
@Data
public class ${className} {#foreach ($column in $columns)/*** $column.comments*/#if($column.columnName == $pk.columnName)
@TableId#end
private $column.attrType $column.attrName;
#end
}

通过数据库查出表和列的表备注、列备注、表名、字段名、字段类型等,将其填充入模板,即可生成所需要的代码文件(此处省略查询数据库的过程):

import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;@WebServlet("/MvnServlet")
public class MvnServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Properties prop = new Properties();prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");Velocity.init(prop);//封装模板数据Map<String, Object> map = new HashMap<>();map.put("comments", "表注释");map.put("className", "User");map.put("priName", "id");MvnColumn c1 = new MvnColumn("id","bit","列备注1","id","Integer");MvnColumn c2 = new MvnColumn("name","varchar","列备注2","name","String");MvnColumn c3 = new MvnColumn("mobile","varchar","列备注3","mobile","String");List<MvnColumn> mvnColumns = new ArrayList<>();mvnColumns.add(c1);mvnColumns.add(c2);mvnColumns.add(c3);map.put("columns", mvnColumns);VelocityContext context = new VelocityContext(map);StringWriter sw = new StringWriter();Template tpl = Velocity.getTemplate("template/User.java.vm", "UTF-8");tpl.merge(context, sw);//将数据context合并入模板tpl中,获得的数据写入swOutputStream ouputStream = response.getOutputStream();IOUtils.write(sw.toString(), ouputStream, "UTF-8");IOUtils.closeQuietly(sw);response.setContentType("application/octet-stream;charset=UTF-8");response.setHeader("Content-disposition", "attachment;filename=User.java");}
}
public class MvnColumn {private String columnName;private String dataType;private String comments;private String attrName;private String attrType;public MvnColumn(String columnName, String dataType, String comments, String attrName, String attrType){this.columnName = columnName;this.dataType = dataType;this.comments = comments;this.attrName = attrName;this.attrType = attrType;}public String getColumnName() {return columnName;}public void setColumnName(String columnName) {this.columnName = columnName;}public String getDataType() {return dataType;}public void setDataType(String dataType) {this.dataType = dataType;}public String getComments() {return comments;}public void setComments(String comments) {this.comments = comments;}public String getAttrName() {return attrName;}public void setAttrName(String attrName) {this.attrName = attrName;}public String getAttrType() {return attrType;}public void setAttrType(String attrType) {this.attrType = attrType;}
}

在web客户端即可下载获得User.java代码文件,文件内容如下:

一般情况下,会生成多个代码文件,打包成压缩文件的形式下载:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;@WebServlet("/MvnServlet")
public class MvnServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {byte[] data = this.generatorCode();response.reset();  response.setHeader("Content-Disposition", "attachment; filename=\"mvntest.zip\"");  response.addHeader("Content-Length", "" + data.length);  response.setContentType("application/octet-stream; charset=UTF-8");  IOUtils.write(data, response.getOutputStream());}public byte[] generatorCode(){ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ZipOutputStream zip = new ZipOutputStream(outputStream);//获取模板列表String[] templates = {"template/User.java.vm"};for (String template : templates) {Properties prop = new Properties();prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");Velocity.init(prop);//封装模板数据Map<String, Object> map = new HashMap<>();map.put("comments", "表注释");map.put("className", "User");map.put("priName", "id");MvnColumn c1 = new MvnColumn("id","bit","列备注1","id","Integer");MvnColumn c2 = new MvnColumn("name","varchar","列备注2","name","String");MvnColumn c3 = new MvnColumn("mobile","varchar","列备注3","mobile","String");List<MvnColumn> mvnColumns = new ArrayList<>();mvnColumns.add(c1);mvnColumns.add(c2);mvnColumns.add(c3);map.put("columns", mvnColumns);VelocityContext context = new VelocityContext(map);//渲染模板StringWriter sw = new StringWriter();Template tpl = Velocity.getTemplate(template, "UTF-8");tpl.merge(context, sw);try {//添加到zipzip.putNextEntry(new ZipEntry("main/java/com/yrr/mvntest/User.java"));IOUtils.write(sw.toString(), zip, "UTF-8");IOUtils.closeQuietly(sw);zip.closeEntry();} catch (IOException e) {e.printStackTrace();}}IOUtils.closeQuietly(zip);return outputStream.toByteArray();}
}

在web客户端访问即可获得如下压缩文件:

开源项目参考:renren-generator: 人人开源项目的代码生成器,可在线生成entity、xml、dao、service、vue、sql代码,减少70%以上的开发任务


http://chatgpt.dhexx.cn/article/7r2u1eKc.shtml

相关文章

Linux防火墙关闭方法

Linux防火墙关闭方法 关闭防火墙&#xff1a; 1、查看状态&#xff1a;systemctl status firewalld 2、关闭&#xff1a; systemctl stop firewalld&#xff08;只执行这个&#xff0c;重启后不行&#xff0c;还必须执行systemctl status firewalld&#xff09; 1.1、查看seli…

Linux中的Java项目服务器无故关闭

部署在Linux中的项目&#xff0c;最近一直无故关闭。找了很多都找不到原因。最近发现一个现象终于让我知道是什么原因导致我的开发服务器无故关闭了。 起因 部署在linux中的java开发服务器最近一直无故关闭。且是因为我在启动脚本中加了如下命令导致的。 tail -f log/game.lo…

Linux 系统下关闭防火墙

一、重启后永久性生效&#xff1a; 开启&#xff1a; chkconfig iptables on 关闭&#xff1a; chkconfig iptables off 二、即时生效&#xff0c;重启后失效&#xff1a; 开启&#xff1a; service iptables start 关闭&#xff1a; service iptables stop 需要说明的…

linux 桌面关闭防火墙,linux如何关闭防火墙的方法

火墙是一项协助确保信息安全的设备&#xff0c;会依照特定的规则&#xff0c;允许或是限制传输的数据通过。简单的来说防火墙的作用就是保护你的网络免受非法用户的侵入&#xff0c;虽然防火墙是为了你网络安全而存在&#xff0c;但是同时也限制了你上网操作&#xff0c;有很多…

LINUX系统下关闭防火墙

所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法&#xff0c;它是一种计算机硬件和软件的结合&#xff0c;使Internet与Intranet之间建立起一个安全网关。 一、重启后永久性生…

JAVA配置防火墙开放、关闭端口

要达成的目的可以描述为&#xff1a; 在JAVA程序中随机生成一个可用的端口&#xff0c;并在防火墙中开放这个端口。 随机生成可用端口 /*** 随机获取10100-10200的未占用端口** return 端口号*/private int generateLocalPort() {while (true) {int port 10100 (new Random(…

Linux系统关闭防火墙命令

Linux系统关闭防火墙命令 下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop 3:永久关闭防火墙 systemctl disable firewalld chkconfi…

Linux下的关闭防火墙

一、临时关闭防火墙 1、 查看防火墙的状态 /etc/init.d/iptables status 2、 临时关闭防火墙 /etc/init.d/iptables stop 3、 查看关闭后的状态 二、永久关闭防火墙 命令&#xff1a;chkconfig --level 2345 iptables off 或者 chkconfig iptables off 其中2345 代表”执…

Linux关闭防火墙命令

一、下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop 3:永久关闭防火墙 systemctl disable firewalld chkconfig iptables off 4:重…

原生js 实现图片轮播(图片按钮+左右轮播)

该代码可以实现左右箭头点击切换,按钮点击切换,自动播放方面还需改进 点击切换方面算是实现了效果,自我感觉还需要改进,代码仅供参考 html部分 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>…

JS——【案例】图片轮播图(自动轮播/手动点击/悬停显示)[技术栈:html、css、JavaScript]

1、效果&#xff1a; 2、需求&#xff1a; 3、代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

如何用JS实现轮播图!

轮播图 1.思路与写法 1.1 首先我们拿到一个关于轮播图的实例我们要分析里面的功能&#xff0c;将其模块化处理&#xff1b; 1.2 首先需要实现的是自动轮播的效果&#xff1a; 1.2.1需要用到运动函数框架&#xff0c;startMove()&#xff0c;还需要用到定时器&#xff0c;这里…

javascript图片轮播技术动态实现

我们经常会在网页中见到轮播的图片&#xff0c;如京东主页面中图片自动更换。我们在这里对这一技术进行实现&#xff0c;主要能够使图片自动进行轮播&#xff0c;数字标签随着图片一同更换&#xff0c;鼠标移动到数字标签上&#xff0c;相应的图片停留&#xff0c;鼠标在整个图…

JS——实现轮播图(完整功能)

没有把细节单拎出来讲&#xff0c;但基本上所有重要步骤都在代码里边备注解释了~~ 个人认为比较难的地方就是&#xff1a; 怎么在自动播放到最后一张图片后&#xff0c;瞬间切换回第一张图片重新播放&#xff1f; 这里采用了比较取巧的方法&#xff0c;比如我用了四张例图&a…

Js实现图片点击切换与轮播

Js实现图片点击切换与轮播 图片点击切换 <!DOCTYPE html> <html><head> <meta charset"UTF-8"><title></title><script type"text/javascript">window.onloadfunction(){var btn1document.getElementById("…

原生JS-实现无限图片轮播

实现思路&#xff1a; 一、布局部分&#xff1a; 1、采用div>ul>li>img布局&#xff0c;来展示轮播的图片banner; 2、采用div>>ul>li>a标签&#xff0c;来显示小红点&#xff1b; 整个布局入下图所示&#xff1a;途中的&#xff0c;图中的第一个li和最后一…

HTML网页js超简单实现图片轮播

其实实现图片轮播很简单 1. 创建一个js文件&#xff08;自己会的博主不多说&#xff09; 2. 在html文件引入js文件 引入代码&#xff1a; <script type"text/javascript" src"js/sth.js"></script> 注意&#xff1a;sth是自己的js文件名自行…

JS实现图片轮播(方法一)

效果如下&#xff1a; 下面是具体的实现代码&#xff1a; HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

js实现图片自动轮播

今天有人问我这个问题&#xff0c;我就顺便把这个记下来&#xff0c;分享给大伙。 如图&#xff0c;就是图片自己轮播&#xff0c;并且图中中下方的白点也发生变化&#xff0c;图片到哪&#xff0c;白点就到哪&#xff0c;就直接上代码了 <!DOCTYPE html PUBLIC "-//W3…

js图片轮播效果实现代码

这篇文章主要介绍了js图片轮播效果实现代码&#xff0c;文章对每一步进行了详细阐述&#xff0c;标注注意事项&#xff0c;为顺利实现js图片轮播效果做好铺垫&#xff0c;对轮播效果感兴趣的朋友可以参考一下 首先给大家看一看js图片轮播效果&#xff0c;如下图 具体思路&#…