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) "毫秒 ----------------!!!");

}

}

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

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

相关文章

java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...

Java编程32位/64位版(jdk-jeb)是一款功能强大的计算机编程语言工具,Java技术让您可以在安全的计算环境下工作和游戏。使用 Java您可以畅玩网络游戏、与世界各地的朋友聊天、计算按揭利息,还可以在 3D 模式下浏览图像,诸多功能不一而足。软件特…

java同时关闭两个窗口_在一个窗口中同时关闭多个窗口的问题(Swing中事件多点传送的问题) | 学步园...

class A{}A中包含有:JFrame frameA;JButton btnA;class B{}B中包含有:final JFrame frameB;Static boolean wantToSave true;frameB.addWindowListener( new WindowAdapter(){pubilic void windowClosing(windowEvent we…

JAVA数组扁平化整合_5种方法实现数组扁平化

数组扁平化概念数组扁平化是指将一个多维数组变为一维数组[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]复制代码实现1. reduce遍历数组每一项,若值为数组则递归遍历,否则concat。function flatten(arr){return arr.reduce((result, item)> {retur…

java 线程由浅入深_由浅入深,Java 并发编程中的 Synchronized(一)

synchronized 作用synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。1.1 作用:确保线程互斥的访问同步代,锁自动释放,多个线程操作同个代码块或函数必须排队获得锁,保证共享变量的修改能够及时可见,获得…

java私有变量和_java – 大内部类和私有变量

有一件事我经历了几次,是一个服务类(如JBoss服务),由于助手内部类,它已经变得过大了.我还没有找到打破班级的好办法.这些助手通常是线程.这里有一个例子:/** Asset service keeps track of the Metadata about assets that live on other* systems. Complications i…

java long.max_value,Long + Long不大于Long.MAX_VALUE

If I have an assignmentLong c a b;Is there an easy way to check that a b is not bigger/smaller than Long.MAX_VALUE/Long.MIN_VALUE?解决方案Using Guava, its as simple aslong c LongMath.checkedAdd(a, b); // throws an ArithmeticException on overflowwhich …

php从内存中获取源码_PHP源码分析之变量的存储过程分解

PHP代码如下:$php_var 1;对应C的代码是:zval* c_var; //定义PHP变量指针MAKE_STD_ZVAL(c_var); //初始化PHP变量ZVAL_LONG(c_var,1) ;//赋值ZEND_SET_SYMBL( EG(active_symbol_table), " php_var ", c_var);//注册到全局变量符号表一&…

php有哪些高级扩展,php扩展有哪些

什么是PHP扩展?为PHP提供一些扩展的功能常见的PHP扩展mysql-----提供给PHP操作MySQL数据库的功能gd2----动态创建图像xdebug-----跟踪、调试和分析PHP程序的运行状况查看PHP扩展1.使用phpinfo探针phpinfo()---输出关于PHP配置的信息输出PHP当前状态的大量信息&#…

php pdo 绕过,php-带PDO的忘记密码脚本(需要解密)

我可能有一个愚蠢的愚蠢的问题……我正在做一个被遗忘的密码脚本(当然是登录系统),但是我被卡住了.我创建了一个具有特殊ID的代码(有效,是的!),但是我无法对其进行解密…您能帮我吗?这是我创建特殊ID的功能:Recovery_Script.phpinclude "…

php 图片系统,Linger

软件简介Linger 是 PHP 图片分享系统。一个精简的图片分享系统网站,采用Bootstrap前端框架,支持部分页面的移动端自适应。同时采用HTML5进行图片批量上传。使用了一个简单的时间线动态展示,可作为简易的图片社交社区。有一个完整的用户中心和…

php 传递类名,php 对象和数组序列化 serialize()返回字符串方便存储和传递 unserialize()反序列化 不丢失类型和结构...

现在开发中经常使用序列号和反序列化技术手段,php开发中也大量使用到。如下几个知名系统都使用了大量的序列化技术ecshop2. phpcms内容管理系统3.laravel框架一、序列号的目的?方便数组和对象的传输或存储,同时不丢失其类型和结构如下是ecsho…

基本的排序算法php,php四种基础排序算法

原标题:php四种基础排序算法曾经有网友问我关于面试题的问题,今天就发一个面试题笔试经常会出的排序算法,大家可以参考一下,如有问题可以给我留言。/*** php四种基础排序算法的运行时间比较* authors Jesse (jesse152163.com)* da…

php io流 读取wav,记php中的io流---帮助理解

//注意:当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的。public static void main(String[] args) throws IOException {File fnew File("aaa.txt"); //定位文件位置InputStream innew FileInputStream(f); //创建字节输入流连接到文件byte[] bn…

php获取jsp的session的值,在JSP或Servlet中获取session数量

enumsul.getUserList();int i0;while(enums.hasMoreElements()){out.println(enums.nextElement());out.println(" ");if(i10){out.println("");}}out.println("当前在线的用户数:"i);out.println("退出登录");out.clos…

php如何查看上传的文件大小,PHP设置最大上传文件大小

一、修改php.ini文件。找到php中的php.ini文件,用写字板打开:1、查找post_max_size,指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值,默认为8M,看你自己需要进行改变。2、查找File Uploads&…

java xy,java – 某个z深度的xy位置

我强烈建议你研究一些线性代数或矩阵数学用于3d图形.它既有趣又简单,但比SO答案要长一点.我会尝试:)免责声明:我不知道你正在使用的API!看起来你正在为一个位置返回3个坐标(通常称为顶点).但是你也提到了一个投影矩阵,该函数有4个坐标.通常,着色器或API将…

django mysql 游标,MySQL Cursor 存储过程之游标与相关循环

简单介绍游标在检索出来的行中,前进或者后退一行或多行,就需要用到所谓的“游标”。游标不是某个SELECT语句,但是它是被该语句检索出来的结果集。几个特点:MySQL游标只能用于存储过程(和函数)。游标是不能滚动的,也就是…

java 8 optional 类,Java8新特性-Optional类

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。常用方法:Optional.of(T t) : 创建一个 Optional 实例Opt…

java 进度条jsp,jsp进度条_jsp技巧

开始页面:start.jsp状态页面:status.jspJSP进度条setTimeout(“locationstatus.jsp”, 1000);JSP进度条结果: %CELLPADDING0 CELLSPACING2> percent; i - 10) { %> 正在执行完成尚未开始已停止停止页面:stop.jsp业务逻辑bean:TaskBean.javapackage progress;import java.…

覆盖php配置文件,配置 – 用另一个文件覆盖php-fpm池配置值

必须自定义新服务器的php-fpm池配置,我想知道是否有可能/允许/建议有一个新的池文件,该名称在原始文件之后按字母顺序排列,其中只有值覆盖初始配置.原始配置位于/etc/php/7.0/fpm/pool.d,名为www.conf.看来,根据与安装相关的页面,工程师直接修改原件(保存初始值的副本).例如.[w…