java增删改一键生成_easyCode(java自动生成增删改查代码)
【实例简介】读取数据库表结构 自动生成增删改查代码
【实例截图】
【核心代码】
package com.isoftstone.autocoding;
import com.isoftstone.autocoding.common.Column;
import com.isoftstone.autocoding.common.Table;
import com.isoftstone.autocoding.utils.CamelCaseUtils;
import com.isoftstone.autocoding.utils.FileHelper;
import com.mysql.jdbc.StringUtils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.log4j.Logger;
import javax.swing.filechooser.FileSystemView;
import java.io.*;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.*;
public class EasyCodeApplication {
private Logger logger = Logger.getLogger(this.getClass());
private Properties properties;
/**
* 读取配置文件
*
* @throws Exception
*/
public EasyCodeApplication() throws Exception {
properties = new Properties();
String fileDir = this.getClass().getClassLoader().getResource("generator.xml").getFile();
properties.loadFromXML(new FileInputStream(fileDir));
}
/**
* 解析数据表
*
* @param tableName
* @return
* @throws Exception
*/
public Table parseTable(String tableName) throws Exception {
String driverName = properties.getProperty("jdbc.driver");
String userName = properties.getProperty("jdbc.username");
String userPwd = properties.getProperty("jdbc.password");
String dbURL = properties.getProperty("jdbc.url");
String catalog = properties.getProperty("jdbc.catalog");
String schema = properties.getProperty("jdbc.schema");
schema = schema == null ? "%" : schema;
String column = "%";
logger.debug("driver>>" driverName);
logger.debug("url>>" dbURL);
logger.debug("name>>" userName);
logger.debug("password>>" userPwd);
logger.debug("catalog>>" catalog);
logger.debug("schema>>" schema);
Class.forName(driverName);
Connection conn = java.sql.DriverManager.getConnection(dbURL, userName, userPwd);
DatabaseMetaData dmd = conn.getMetaData();
ResultSet rs = dmd.getColumns(catalog, schema, tableName, column);
List columns = new ArrayList();
while (rs.next()) {
Column c = new Column();
c.setLabel(rs.getString("REMARKS"));
String name = rs.getString("COLUMN_NAME");
c.setName(CamelCaseUtils.toCamelCase(name));
c.setDbName(name);
String dbType = rs.getString("TYPE_NAME");
int columnSize = rs.getInt("COLUMN_SIZE");
if (dbType.equals("TINYINT") && columnSize > 1) {
c.setType("Integer");
} else if (dbType.equals("TINYINT") && columnSize == 1) {
c.setType("Boolean");
} else {
String type = properties.getProperty(dbType);
c.setType(type == null ? "String" : type);
}
c.setDbType(dbType);
c.setLength(rs.getInt("COLUMN_SIZE"));
c.setDecimalDigits(rs.getInt("DECIMAL_DIGITS"));
c.setNullable(rs.getBoolean("NULLABLE"));
columns.add(c);
}
List pkColumns = new ArrayList();
ResultSet pkrs = dmd.getPrimaryKeys(catalog, schema, tableName);
while (pkrs.next()) {
Column c = new Column();
String name = pkrs.getString("COLUMN_NAME");
c.setName(CamelCaseUtils.toCamelCase(name));
c.setDbName(name);
pkColumns.add(c);
}
conn.close();
Table t = new Table();
String prefiex = properties.getProperty("tableRemovePrefixes");
String name = tableName;
if (prefiex != null && !"".equals(prefiex)) {
name = tableName.split(prefiex)[0];
}
t.setName(CamelCaseUtils.toCamelCase(name));
t.setDbName(tableName);
t.setColumns(columns);
t.setPkColumns(pkColumns);
return t;
}
/**
*
Discription:[生成映射文件和实体类]
* Created on 2019年4月4日
*
* @param tableName 要声称映射文件和实体类的表名称
* @param tableDescAndCat 表描述
* @throws Exception
*/
public void gen(String tableName, String tableDescAndCat, String id, String modelId) throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_21);
String outRoot = properties.getProperty("outRoot");
//当输出地址为null时,文件放到桌面
if (StringUtils.isNullOrEmpty(outRoot)) {
File desktopDir = FileSystemView.getFileSystemView() .getHomeDirectory();
outRoot = desktopDir.getAbsolutePath() "/Desktop/EasyCodeDemo";
}
String basePackage = properties.getProperty("basePackage");
//获取当前日期
SimpleDateFormat sm_date = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat sm_year = new SimpleDateFormat("yyyy年");
//将首字母转为大写
StringBuffer buffer = new StringBuffer();
String namePart1 = modelId.substring(0, 1).toUpperCase();
String namePart2 = modelId.substring(1);
buffer.append(namePart1 namePart2);
System.out.println(buffer);
Map root = new HashMap();
Table t = this.parseTable(tableName);
t.setTableDesc(tableDescAndCat.split("_")[0]);
root.put("table", t);
root.put("className", t.getNameUpper());
root.put("classNameLower", t.getName());
root.put("primaryKey", id);
root.put("modelId", modelId);
root.put("modelIdFirstUpper", buffer);
root.put("package", basePackage);
root.put("date", sm_date.format(new Date()));
root.put("year", sm_year.format(new Date()));
root.put("author", "wangchun");
root.put("email", "chunwangi@isoftstone.com");
String templateDir = this.getClass().getClassLoader().getResource("templates").getPath();
File tdf = new File(templateDir);
List files = FileHelper.findAllFile(tdf);
for (File f : files) {
String parentDir = "";
if (f.getParentFile().compareTo(tdf) != 0) {
parentDir = f.getParent().split("templates")[1];
}
cfg.setClassForTemplateLoading(this.getClass(), "/templates" parentDir);
Template template = cfg.getTemplate(f.getName());
template.setEncoding("UTF-8");
String parentFileDir = FileHelper.genFileDir(parentDir, root);
parentFileDir = parentFileDir.replace(".", "/");
String file = FileHelper.genFileDir(f.getName(), root).replace(".ftl", ".java");
System.out.println(file);
File newFile = FileHelper.makeFile(outRoot parentFileDir "/" file);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile), "UTF-8"));
template.process(root, out);
logger.debug("已生成文件:" outRoot parentFileDir "/" file);
}
}
public static void main(String[] args) throws Exception {
long time = System.currentTimeMillis();
EasyCodeApplication g = new EasyCodeApplication();
Map map = new HashMap();
map.put("tr_usergroup_menu", "用户组菜单表");
Iterator> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = it.next();
//设置数据库主键字段
g.gen(e.getKey(), e.getValue(), "id", "id");
}
System.out.println("-------------------模版文件生成完毕,时间:" (System.currentTimeMillis() - time) "毫秒 ----------------!!!");
}
}
java增删改一键生成_easyCode(java自动生成增删改查代码)相关推荐
- 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图
基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...
- java自动生成类_自动生成优化的Java类专业知识
java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...
- java怎么生成字母_java自动生成字母
新建一个类SpringContextUtil.java: import org.springframework.beans.BeansException; import org.springframe ...
- java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签
本文实例讲述了JSP实现用于自动生成表单标签HTML代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkBox,select,radi ...
- java实体类没有映射文件_MyBatis自动生成实体类、DAO和XML映射文件,并去掉实体类中的getter和setter方法...
今天花了3个多小时搞定了这个事情,写个Blog记录一下,先看一下最终生成的实体类吧. packagecom.mybatis.pojo;importlombok.AllArgsConstructor;i ...
- java中appletviewer是什么意思_自动生成供AppletViewer运行Java Applet的HTML文件
这几天开始自学Java,搭建Eclipse作为开发环境,发现实在太智能了,貌似对学习无益.于是搜了下,另外搭建了EditPlus上的简易Java开发环境,确实比较适合学习,不足之处是没法配置比较方便的 ...
- JAVA课程设计 小学生数学练习题目自动生成系统
课程设计的任务和目标 目标: 编写一个能够自动生成小学生数学练习题目的程序.设计一个程序,能够根据用户的选择生成"10以内加法"."10以内减法"." ...
- mysql xml生成工具_自动生成po、dao、xml 工具:mybatis-generator
需要注意:文件路径关系,xml路径,jar包路径,以及xml中生成文件的路径等. 由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易 ...
- vue可视化拖拽生成工具_GitHub - 1260215278/dragUI: 基于vuedraggable.js + uni 的可视化拖拽编程,自动生成项目,自动生成代码,自行导入第三方组件...
dragUI 用于UNI可拖拽可视化编程 在线演示 效果图 基于 快速开始 参考uni官网安装普通uni项目(运行uni-app)运行到浏览器 另需要手动下载包npm install 项目目录 col ...
- 【记录4】【密码生成】前端自动生成8位由字母和数字组成的密码
最近做项目,需要管理员在登记新用户时可以点击按钮自动生成密码功能. 要求1:数字+大写字母+小写字母8位 长度为8 必须包含字母和数字(注意:这里没有说字母区分大小写) 效果图: 代码: automa ...
最新文章
- .NET 2.0 泛型在实际开发中的一次小应用
- 搭建Git服务器环境----Git hooks代码自动部署
- linux安装mysql5.7.18_Linux 安装MySQL5.7.18
- c语言cnn实现ocr字符,端到端的OCR:基于CNN的实现
- 批处理文件将多台连接的手机安装同一个APP
- 【解题报告】Leecode 384. 打乱数组——Leecode每日一题系列
- c语言判断x的个位数是否为5,用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出“yes”,否则输出“no”...
- 《互联网理财一册通》一一第1章 做好互联网理财前的准备工作
- ASA防火墙SSL ×××配置
- fme坐标转换器_利用FME做坐标转换
- Solidworks教程:利用Simulation模拟热传导
- js逆向-1 模拟登陆微信公众号平台
- 自己组装nas服务器万兆,我用最便宜的方法,配了一套万兆 NAS
- uni-app 无网络图标不显示问题解决
- 今日头条,即将崛起为中国互联网第三极
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java社团管理系统0gl2e
- 我的前端成长之路-写给在迷茫路上的人
- Java毕设项目大学生校园兼职系统计算机(附源码+系统+数据库+LW)
- 五个喜欢点赞图标动画特效(附源码,效果图)
- 对交换机与路由器的认知
热门文章
- 冬奥网络安全卫士被表彰突出贡献,探寻冬奥背后的安全竞技
- 少拿游戏来骗我,虚幻引擎5上的《黑客帝国》全新体验,画面帅到爆
- 哈哈!TCP泄露了操作系统信息···
- 如何让 Mac在运行 Windows时享受极致体验?Parallels Desktop 16给你答案!
- 看完这篇操作系统,和面试官扯皮就没问题了!
- 看完就入门系列!吞吐量、消息持久化、负载均衡和持久化、伸缩性…… 你真的了解 Kafka 了吗?...
- 华为正准备发布属于自己的手机操作系统;腾讯已经交出了首张产业互联网成绩单……...
- 云有约 | 精华汇总
- java 数组数据类型_java基本数据类型和数组
- flink sql设置并行度_Flink集成Hivestream模式用例