自己开发java代码生成工具

简介: 自己开发java代码生成工具

1. 背景


在公司做项目,特别是业务系统的时候,大量的表单和增删改查,而且后台Ui经常用一些easyui等jquery ui框架,数据库一张表对应一个domian.表字段对应domain的属性,也对应这前台js json等数据。这样后台代码和json都是有规律可循。大量的复制粘贴 很枯燥麻烦,因此决定做一个代码自动生成工具。


1. 界面



2.用到的技术与核心代码


2.1 jdbc DatabaseMetaData(连接数据库 读取表结构)




public Connection getConnection() {
/** 声明Connection连接对象 */
Connection conn = null;
try {
/** 使用Class.forName()方法自动创建这个驱动程序的实例且自动调用DriverManager来注册它 */
Class.forName(DB_DRIVER);
/** 通过DriverManager的getConnection()方法获取数据库连接 */
Properties props = new Properties();
props.put("user", DB_USERNAME);
props.put("password", DB_PASSWORD);
props.put("remarksReporting", "true");//设置能读取到 column comment
conn = DriverManager.getConnection(DB_URL, props);
} catch (Exception ex) {
pane.setText("<span style=\"color:red;\">error:" + ex.toString()
+ "查看控制台</span>");
ex.printStackTrace();
}
return conn;
}
public HashMap<String, Object> loadDbTableInfo(String table) {
HashMap<String, Object> root = new HashMap<String, Object>();
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
dbCon = new DBConnection(this.dbUrl, this.dbDriver, this.dbUser,
this.dbPwd, this.pane);
Connection con = dbCon.getConnection();
ResultSet rs;
try {
DatabaseMetaData dbmd = con.getMetaData();
rs = dbmd.getColumns(null, "%", table, "%");
while (rs.next()) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("COLUMN_NAME", rs.getString("COLUMN_NAME")
.toLowerCase());
map.put("REMARKS", rs.getString("REMARKS"));
map.put("TYPE_NAME", rs.getString("TYPE_NAME"));
list.add(map);
}
rs = dbmd.getTables(null, "%", table, new String[] { "TABLE" });
if (rs.next()) {
root.put("tableComment", rs.getString("REMARKS"));// table
// comment
}
root.put("list", list);
root.put("title", tableName);// tableName
root.put("domainName", domainName);
return root;
} catch (Exception e) {
pane.append("error:" + e.toString() + "查看控制台\n");
e.printStackTrace();
} finally {
dbCon.closeConnection(con);
}
return root;
}


2.2 freemarker (根据订制的模版生成 文件)



/**
* 初始化
*/
public void init() {
File file = new File("bin/resource/template");
cfg = new Configuration();
try {
cfg.setDirectoryForTemplateLoading(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
pane.append("error:" + e.toString() + "查看控制台\n");
}
}
/**
* 生成新文件
* 
* @param root
*            信息封装
* @param newFileName
*            新文件名字
* @param templeName
*            模版名字
* @param newFilePath
*            新文件路径
*/
public void startMake(HashMap<String, Object> root, String newFileName,
String templeName, String newFilePath) {
Template t;
try {
t = cfg.getTemplate(templeName);
Writer out = new OutputStreamWriter(new FileOutputStream(
newFilePath + "/" + newFileName), "utf-8");
t.process(root, out);
out.flush();
out.close();
pane.append(newFilePath + "/" + newFileName + "生成成功\n");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
pane.append("error:" + e.toString() + "查看控制台\n");
}
}
public void begin() {
HashMap<String, Object> root = this.loadDbTableInfo(tableName);
this.startMake(root, "I" + this.domainName + "Svc.java", "svc.ftl",
svcPath);// 生成svc文件
this.startMake(root, this.domainName + "Impl.java", "Impl.ftl",
implPath);// 生成Impl文件
this.startMake(root, this.domainName + "_Form.html", "Form.ftl",
pagesPath);// 生成form 页面
this.startMake(root, this.domainName + "_View.html", "View.ftl",
pagesPath);// 生成view 页面
this.startMake(root, this.domainName + ".html", "mainhtml.ftl",
pagesPath);// 生成main.html 页面
this.startMake(root, this.domainName + ".js", "js.ftl",
pagesPath);// 生成js 页面
}



2.3美化swing界面 substance 皮肤包

SubstanceLookAndFeel.setSkin(new CremeSkin());//substance skin


截图

image.png



下载连接 点击下载


相关文章
|
4天前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
1天前
|
数据采集 供应链 JavaScript
分享基于Java开发的Java毕业设计实战项目题目
这篇文章分享了67套基于Java开发的毕业设计实战项目题目,覆盖了互联网、企业管理、电子政务、Java基础项目、ERP系统、校园相关、医疗以及其他细分行业等多个领域,并推荐了使用IDEA、Vue和Springboot的技术栈。
|
1天前
|
分布式计算 Java API
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率。流处理采用声明式编程模型,通过filter、map等操作简化数据集处理,提高代码可读性。Lambda表达式支持轻量级函数定义,配合Predicate、Function等接口,使函数式编程无缝融入Java。此外,Optional类及新日期时间API等增强功能,让开发者能更优雅地处理潜在错误,编写出更健壮的应用程序。
6 1
|
1天前
|
Java
在Java编程的广阔天地中,条件语句是控制程序流程、实现逻辑判断的重要工具。
在Java编程中,if-else与switch作为核心条件语句,各具特色。if-else以其高度灵活性,适用于复杂逻辑判断,支持多种条件组合;而switch在多分支选择上表现优异,尤其适合处理枚举类型或固定选项集,通过内部跳转表提高执行效率。两者各有千秋:if-else擅长复杂逻辑,switch则在多分支选择中更胜一筹。理解它们的特点并在合适场景下使用,能够编写出更高效、易读的Java代码。
5 1
|
6天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
6天前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
1天前
|
人工智能 网络协议 Java
23.12月中旬 上海寻序人工智能科技-上海嘉定-Java开发实习生-薪资150-230/d 面经
关于上海寻序人工智能科技有限公司Java开发实习生岗位的面试经验分享,涵盖了技术问题如对象存储MinIO、ArrayList扩容、Object类方法、hashCode和equals方法、处理哈希冲突、JVM垃圾回收器、GC算法、网络协议、邮件协议、HTTP请求方法、Linux和Docker命令、Dockerfile制作等。
3 0
|
5天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
118 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
125 0