Java代码生成器——基于模板快速生成web项目结构

Java代码生成器——基于模板快速生成web项目结构功能介绍根据数据库表的元数据生成支持Rest、RPC协议的工程服务(标准化的代码分层结构工程)。加速新工程的建设。代码结构:生成代码的结构依赖于模板的定义。本工程中定义分为三个工程${projectName}-domain-api:接口层-RPC接口API工程${projectName}-domain:领域层-RPC接口实现(包含domain层+基础设施层)${proje…

大家好,又见面了,我是你们的朋友全栈君。

功能介绍

根据数据库表的元数据生成支持Rest、RPC协议的工程服务(标准化的代码分层结构工程)。 加速新工程的建设。

代码结构:

生成代码的结构依赖于模板的定义。本工程中定义分为三个工程

${projectName}-domain-api:接口层 – RPC接口API工程

${projectName}-domain:领域层 – RPC接口实现(包含domain层 + 基础设施层)

${projectName}-application:应用层 – Rest接口实现

Web应用层工程

应用层,实现领域间协作、任务编排、Rest服务等。其包结构规范如下:
在这里插入图片描述

领域服务接口层工程

领域服务的API接口,包括DTO、领域服务接口等。其包结构规范如下:
在这里插入图片描述

领域服务实现层工程

领域服务的实现层,包括领域对象、领域服务及持久化层的具体实现。其包结构规范如下:
在这里插入图片描述

实现方法

引入

我们使用的是rapid-framework框架生成项目,pom中的引入如下:

		<dependency>
            <groupId>com.googlecode.rapid-framework</groupId>
            <artifactId>rapid-generator</artifactId>
            <version>4.0.6</version>
        </dependency>

模板

项目生成依赖于模板文件,新建template文件夹放置模板,同时包含以下几个文件
在这里插入图片描述

配置

generator.xml

生成项目时的配置信息,放入Resource文件夹中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>
代码生成器配置文件:
1.会为所有的property生成property_dir属性,如pkg=com.company => pkg_dir=com/company
2.可以引用环境变量: ${env.JAVA_HOME} or System.properties: ${user.home},property之间也可以相互引用
</comment>
<entry key="basepackage">com.name</entry>
<!-- jsp namespace: web/${namespace}/${className}/list.jsp -->
<entry key="namespace">pages</entry>
<entry key="outRoot">/Users/</entry>
<!-- 需要移除的表名前缀,使用逗号进行分隔多个前缀,示例值: t_,v_ -->
<entry key="tableRemovePrefixes">t_</entry>
<entry key="jdbc_username">username</entry>
<entry key="jdbc_password">password</entry>
<entry key="jdbc_url">jdbc:mysql://XXX</entry>
<entry key="jdbc_driver">com.mysql.jdbc.Driver</entry>
<!-- oracle需要指定jdbc.schema,其它数据库忽略此项配置 -->
<!--<entry key="jdbc_schema"></entry>-->
<!--<entry key="jdbc_catalog"></entry>-->
<!-- 数据库类型映射 -->
<entry key="java_typemapping.java.sql.Timestamp">java.util.Date</entry>
<entry key="java_typemapping.java.sql.Date">java.util.Date</entry>
<entry key="java_typemapping.java.sql.Time">java.util.Date</entry>
<entry key="java_typemapping.java.lang.Byte">Integer</entry>
<entry key="java_typemapping.java.lang.Short">Integer</entry>
<entry key="java_typemapping.java.math.BigDecimal">Long</entry>
</properties>

generator.properties

生成的项目基本信息

projectName=demoapp-test
groupName=com.group
versionName=1.0.0-SNAPSHOT

log4j.properties

 ### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

运行

codeGenerator.java

public class CodeGenerator { 

public static void main(String[] args) throws Exception { 

// 模板地址,默认为项目根目录
String templatePath = "template";
GeneratorFacade g = new GeneratorFacade();
Customizer customizer = new Customizer(g.getGenerator().getOutRootDir());
//选择配置文件风格
customizer.determineCfgStyle();
g.getGenerator().addTemplateRootDir(templatePath);
// 删除生成器的输出目录
//g.deleteOutRootDir();
// 通过数据库表生成文件
g.generateByTable("t_student");
customizer.processCfgStyle();
System.out.println("代码生成完毕");
// g.generateByTable("t_student","t_location");
// 自动搜索数据库中的所有表并生成文件,template为模板的根目录
// g.generateByAllTable();
// 按table名字删除文件
// g.deleteByTable("table_name", "template");
}
}

Customizer.java

我们的需求中,不同的项目组成员可能使用不同风格的配置文件,有的用.properties,有的用yaml。因此在生成时,两种风格的配置文件同时生成,在根据其选择,递归地删除不需要的文件。

public class Customizer { 

/** * outPath:输出目录 */
private String outPath;
/** * deleteStyle: 需要被删除的风格文件类型 */
private String deleteStyle;
public Customizer(String outPath) { 

this.outPath = outPath;
}
/** * @Description 提示支持的配置文件风格并从控制台选择 **/
public void determineCfgStyle(){ 

System.out.println("配置文件风格选择:yaml风格输入1,properties风格输入2");
Scanner sc = new Scanner(System.in);
int cfgStyle = sc.nextInt();
if (cfgStyle==1){ 

this.deleteStyle = "properties";
}else { 

this.deleteStyle = "yml";
}
}
/** * @Description 根据选择的风格删除冗余的配置文件 **/
public void processCfgStyle(){ 

File file = new File(outPath);
delete(file,deleteStyle);
}
private void delete(File f, String includeName)
{ 

File[] fi=f.listFiles();
if (null!=fi) { 

//遍历文件和文件夹
for (File file : fi) { 

//如果是文件夹,递归查找
if (file.isDirectory()) { 

delete(file, includeName);
} else if (file.isFile()) { 

String filename = file.getName();
if (filename.endsWith(includeName)) { 

file.delete();
}
}
}
}
}
}

打包

我们尝试将代码生成器打为jar包,并可配置个性化数据。但是可配置的文件已经写死在Resource文件夹内。

想出的第一种解决方法是,根据输入,动态修改配置文件,但打包成jar之后,jar内的文件无法修改,放弃;第二种方法是希望从外部读取指定的配置文件,但是使用的源码从classpath中直接读取,已经写死。

最终使用第二种方法实现。解决方法是:命令行运行时,指定classpass的扫描路径,指令为-Xbootclasspath/a:[当前文件夹的绝对路径]

使用方法

将release文件夹内的所有文件,放置于本地的一个文件夹内。命令行运行如下命令:

java -Xbootclasspath/a:./ -jar scc-rapid-generator.jar

再选择配置文件风格后即可生成代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131796.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • HA高可用集群(双机热备)

    HA高可用集群(双机热备)

  • c语言oj得pe,ACM入门之OJ~

    c语言oj得pe,ACM入门之OJ~所谓OJ,顾名思义OnlineJudge,一个用户提交的程序在OnlineJudge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被OnlineJudge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Ac…

  • 学习笔记:Oracle dul数据挖掘 使用DUL数据恢复软件恢复分区表中

    学习笔记:Oracle dul数据挖掘 使用DUL数据恢复软件恢复分区表中

  • ArcGis二次开发遇到的问题

    ArcGis二次开发遇到的问题在我们刚开始利用.net对arcgis进行二次开发时,费了牛鼻子劲安装好了arcgisengine,也在vs中建立了新项目,拖进去了工具条控件,主页面控件,想要欣赏一下成果的时候,发现一点击启动就报错了:查阅相关资料后发现,在主程序中加入这样两行代码,给程序进行授权,就可以顺利运行了。在这里强烈推荐牟乃夏老师的一系列书籍,从arcgis基础知识到开发自己的gis软件,非常有用。后面有时间我会…

  • 遇到问题–k8s–pod的状态为evicted

    遇到问题–k8s–pod的状态为evicted转载请注明出处:遇到问题–k8s–pod的状态为evicted遇到问题使用kubectlgetpods发现很多pod的状态为evicted。原因eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。多见于资源不足时导致的驱赶。更多详情参考kubernetes的eviction机制解决方案排查资源和异常原因,防止新…

  • 海思Hi3798处理器参数,Hi3798芯片详细信息介绍

    海思Hi3798处理器参数,Hi3798芯片详细信息介绍Hi3798CV200集成4核64位高性能CortexA53处理器、内置NEON加速引擎,强大的CPU处理能力可以满足各种差异化的业务需求。在码流兼容性、在线视频播放的流畅性、图像质量以及整机性能方面保持业界最好的用户体验。支持4K2KP60@10bit超高清视频解码和显示,支持H.265/HEVC、H.264/AVC、AVS+、MVC、MPEG2、MPEG4、VC-1、VP6、VP…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号