- 浏览: 93127 次
- 性别:
- 来自: 北京
文章分类
闲的无聊,看到myeclipse自带的hibernate reverse不够给力,就自己写了个,留作纪念。
package com.qianzheni.ssh.common.engine.crepo;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CreatePoEngine {
private String driverName="org.gjt.mm.mysql.Driver";
private String sqlUrl="jdbc:mysql://localhost:3306/test";
private String userName="root";
private String pwd="weichuang";
private Connection connection;
private DatabaseMetaData databaseMetaData;
public void initConnection(){
try {
//mysql
Class.forName(this.driverName);
this.connection=DriverManager.getConnection(this.sqlUrl,this.userName,this.pwd);
} catch (Exception e) {
System.out.println("数据库连接失败!请检查数据连接参数!");
e.printStackTrace();
}
}
public void initDatabaseMetaData(){
try {
this.initConnection();
this.databaseMetaData=this.connection.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void go(String fileDir,String packageName){
try {
this.initDatabaseMetaData();
ResultSet resultSet=this.databaseMetaData.getTables(null, null, null, new String[]{"TABLE"});
while (resultSet.next()) {
String tableName=resultSet.getString(3);
ResultSet columnResultSet=this.databaseMetaData.getColumns(this.connection.getCatalog(), null, tableName, "");
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(new File(
fileDir+"/"+this.reverseTableName(tableName)+".java")));
bufferedWriter.write("package "+packageName+";\r\n");
bufferedWriter.write("/**\r\n");
bufferedWriter.write(" *\r\n");
bufferedWriter.write(" * @author weichuang\r\n");
bufferedWriter.write(" * @version 0.01.01\r\n");
bufferedWriter.write(" *\r\n");
bufferedWriter.write(" */\r\n");
bufferedWriter.write("public class "+this.reverseTableName(tableName)+"{\r\n");
while (columnResultSet.next()) {
String colName=columnResultSet.getString(4);
String colType=columnResultSet.getString(6);
System.out.println(this.reverseCol(colName, colType));
bufferedWriter.write(this.reverseCol(colName, colType));
}
bufferedWriter.write("}");
bufferedWriter.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.close();
}
}
public String reverseCol(String colName,String colType){
if (colType!=null&&"int".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="Integer";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"varchar".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="String";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"datetime".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="java.util.Date";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"date".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="java.util.Date";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else {
throw new RuntimeException("还有没有匹配的列数据类型("+colType+")!");
}
}
public String reverseToGetSetMethod(String name,String type){
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("\tpublic "+type+" get"+Character.toUpperCase(name.charAt(0))+name.substring(1)+"(){\r\n");
stringBuilder.append("\t\treturn this."+name+";\r\n");
stringBuilder.append("\t}\r\n");
stringBuilder.append("\tpublic "+"void"+" set"+Character.toUpperCase(name.charAt(0))+name.substring(1)+"("+type+" "+name+"){\r\n");
stringBuilder.append("\t\tthis."+name+"="+name+";\r\n");
stringBuilder.append("\t}\r\n");
return stringBuilder.toString();
}
public String reverseColName(String colName){
StringBuilder stringBuilder=new StringBuilder();
String[] names=colName.split("_");
for (int i = 0; i < names.length; i++) {
String name=names[i].trim();
if (i==0) {
stringBuilder.append(name);
}else {
stringBuilder.append(Character.toUpperCase(name.charAt(0))+name.substring(1));
}
}
return stringBuilder.toString();
}
public String reverseTableName(String colName){
StringBuilder stringBuilder=new StringBuilder();
String[] names=colName.split("_");
for (int i = 0; i < names.length; i++) {
String name=names[i].trim();
stringBuilder.append(Character.toUpperCase(name.charAt(0))+name.substring(1));
}
return stringBuilder.toString();
}
public void close(){
try {
if (this.connection!=null) {
this.connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new CreatePoEngine().go("C:\\weichuang\\projects\\myeclipse\\ssh\\src\\main\\java\\com\\qianzheni\\ssh\\common\\entity"
,"com.qianzheni.ssh.common.entity");
}
}
package com.qianzheni.ssh.common.engine.crepo;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CreatePoEngine {
private String driverName="org.gjt.mm.mysql.Driver";
private String sqlUrl="jdbc:mysql://localhost:3306/test";
private String userName="root";
private String pwd="weichuang";
private Connection connection;
private DatabaseMetaData databaseMetaData;
public void initConnection(){
try {
//mysql
Class.forName(this.driverName);
this.connection=DriverManager.getConnection(this.sqlUrl,this.userName,this.pwd);
} catch (Exception e) {
System.out.println("数据库连接失败!请检查数据连接参数!");
e.printStackTrace();
}
}
public void initDatabaseMetaData(){
try {
this.initConnection();
this.databaseMetaData=this.connection.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void go(String fileDir,String packageName){
try {
this.initDatabaseMetaData();
ResultSet resultSet=this.databaseMetaData.getTables(null, null, null, new String[]{"TABLE"});
while (resultSet.next()) {
String tableName=resultSet.getString(3);
ResultSet columnResultSet=this.databaseMetaData.getColumns(this.connection.getCatalog(), null, tableName, "");
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(new File(
fileDir+"/"+this.reverseTableName(tableName)+".java")));
bufferedWriter.write("package "+packageName+";\r\n");
bufferedWriter.write("/**\r\n");
bufferedWriter.write(" *\r\n");
bufferedWriter.write(" * @author weichuang\r\n");
bufferedWriter.write(" * @version 0.01.01\r\n");
bufferedWriter.write(" *\r\n");
bufferedWriter.write(" */\r\n");
bufferedWriter.write("public class "+this.reverseTableName(tableName)+"{\r\n");
while (columnResultSet.next()) {
String colName=columnResultSet.getString(4);
String colType=columnResultSet.getString(6);
System.out.println(this.reverseCol(colName, colType));
bufferedWriter.write(this.reverseCol(colName, colType));
}
bufferedWriter.write("}");
bufferedWriter.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.close();
}
}
public String reverseCol(String colName,String colType){
if (colType!=null&&"int".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="Integer";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"varchar".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="String";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"datetime".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="java.util.Date";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else if (colType!=null&&"date".equalsIgnoreCase(colType)) {
String name=reverseColName(colName);
String type="java.util.Date";
return "\tprivate "+type+" "+name+";\r\n"+reverseToGetSetMethod(name, type);
}else {
throw new RuntimeException("还有没有匹配的列数据类型("+colType+")!");
}
}
public String reverseToGetSetMethod(String name,String type){
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("\tpublic "+type+" get"+Character.toUpperCase(name.charAt(0))+name.substring(1)+"(){\r\n");
stringBuilder.append("\t\treturn this."+name+";\r\n");
stringBuilder.append("\t}\r\n");
stringBuilder.append("\tpublic "+"void"+" set"+Character.toUpperCase(name.charAt(0))+name.substring(1)+"("+type+" "+name+"){\r\n");
stringBuilder.append("\t\tthis."+name+"="+name+";\r\n");
stringBuilder.append("\t}\r\n");
return stringBuilder.toString();
}
public String reverseColName(String colName){
StringBuilder stringBuilder=new StringBuilder();
String[] names=colName.split("_");
for (int i = 0; i < names.length; i++) {
String name=names[i].trim();
if (i==0) {
stringBuilder.append(name);
}else {
stringBuilder.append(Character.toUpperCase(name.charAt(0))+name.substring(1));
}
}
return stringBuilder.toString();
}
public String reverseTableName(String colName){
StringBuilder stringBuilder=new StringBuilder();
String[] names=colName.split("_");
for (int i = 0; i < names.length; i++) {
String name=names[i].trim();
stringBuilder.append(Character.toUpperCase(name.charAt(0))+name.substring(1));
}
return stringBuilder.toString();
}
public void close(){
try {
if (this.connection!=null) {
this.connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new CreatePoEngine().go("C:\\weichuang\\projects\\myeclipse\\ssh\\src\\main\\java\\com\\qianzheni\\ssh\\common\\entity"
,"com.qianzheni.ssh.common.entity");
}
}
发表评论
-
Java对象引用类型
2013-05-09 09:55 969Java对象的引用类型分为强引用、软引用、弱引用和虚应用 强引 ... -
JVM调优大纲
2013-05-07 19:07 1775我觉得处理JVM调优问题需要以下五个步骤: ... -
hibernate根据hbm自动生成数据库
2013-04-27 10:26 1069今天碰到一个很老的项目,只有hbm文件没有数据库,想根 ... -
svn分支合并到主线的十大注意事项
2013-04-07 10:39 0svn是java软件工程师常用的版本控制工具,但是对于分支到主 ... -
这几年收集的java相关资料
2013-04-06 14:46 614以下是我搜集的java相关资料,有需要的可以联系我,QQ470 ... -
一种JavaWeb项目开发部署方式
2012-11-16 09:37 1226以前在myeclipse开发Java Web项目的时候 ... -
tomcat支持中文路径图片问题
2012-11-12 14:51 2703今天,上传图片,但是有文件夹是中文的或是图片文件名是中 ... -
已经安装jdk了,运行applet还是提示安装问题解决
2012-11-08 10:57 1307今天,同事的机子已经装了jdk,但是运行带有ap ... -
集成到项目中web.xml报taglib标签错误
2012-10-31 15:45 857web.xml的报错位置: <taglib> ... -
使用润乾报表工具过程、心得和体会
2012-10-31 15:41 5657现在做的这个项目,需要导出相关报表,正好前几个 ... -
(转)Java开源软件六大帮派
2012-10-25 10:40 792原文链接:http://www.oschina.net/que ... -
Linux安装jdk详解
2012-10-22 16:34 7581,下载JDK,肯定官网下载,有多种类型,源码包、bin包、r ... -
(转)Java几款性能分析工具的对比
2012-10-18 11:04 776在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下 ... -
从编程的角度理解操作系统及其软件设计
2012-10-11 10:58 936我们都知道操作系统是装在计算机上的,所有的计算 ... -
回车符和换行符的区别
2012-09-27 18:34 990回车符号和换行符号产生背景: 在计算机还没 ... -
Microsoft Visio J++
2012-09-20 16:45 744Microsoft Visio J++是Java的一个变种,但 ... -
Java的注解
2012-09-12 16:18 804Java的注解: 1,历史,简介,版本,发展等。 起源 ... -
spring3.1还没有对hibernate4的Dao封装支持
2012-09-12 10:36 1510maven更新hibernate3为hibernate4版本, ... -
数据库001-数据模型设计命名约定
2012-07-30 16:28 10021,数据库命名:全部小写,项目名缩写(三个字符)开头加上字符d ... -
jvm004-垃圾回收机制
2012-07-30 14:48 96201,垃圾就是无用的对 ...
相关推荐
"根据数据库表自动生成Java代码"是一个非常实用的功能,它允许开发者基于现有的数据库表结构快速生成对应的Java类,如DAO(Data Access Object)、XML配置文件以及实体类(Entity)。这样,开发者可以避免手动编写...
MyBatis数据库下划线转Java对象的驼峰命名规则 在 Java 开发中,命名规则是一个非常重要的方面。 Java 中类的命名一般使用大驼峰规则(PascalCase),属性和方法的命名一般使用小驼峰规则(camelCase)。而在数据库...
ORM框架简化了数据访问层的开发,使得Java对象可以直接操作数据库记录,无需手动编写SQL。 DAO层(Data Access Object)是与数据库交互的具体实现。DAO类通常包含方法,如增删查改,这些方法对应于SQL操作。通过...
总之,数据库对象转换为Java Bean是Java开发中的常见操作,通过合理的封装和利用工具,我们可以高效地实现数据的处理和传输,提高代码的可复用性和可扩展性。在处理大量数据时,还要考虑性能优化,以确保系统的稳定...
在Java开发中,将实体类(Entity Class)映射到数据库表是一种常见的做法,这通常涉及到ORM(Object-Relational Mapping)技术。ORM允许我们用面向对象的方式处理数据库操作,而无需编写大量的SQL语句。Java中的...
数据库表生成JavaBean工具是一种非常实用的开发辅助工具,它能极大地提高开发效率,尤其是在处理大量数据模型对象时。此工具允许开发者连接到数据库,自动获取数据库中的表结构,并将其转换为符合Java Bean规范的类...
《dbtobean:数据库库表到Java对象的转换源码解析》 在软件开发过程中,数据模型的设计和实现是至关重要的一步。当涉及到数据库与应用程序之间的交互时,将数据库中的表结构映射到Java对象(通常称为Bean)是一种...
在Java开发中,将对象模型(实体)映射到关系型数据库如MySQL是常见的需求,这一过程被称为对象关系映射(ORM)。ORM框架允许我们通过编程语言操作数据,而不是直接编写SQL语句,大大提高了开发效率。本资源分享的是...
标签“表 生成 java”进一步强调了这个工具的主要任务,它帮助开发者将数据库中的表转换成Java代码,这样开发者就可以直接在代码中操作这些对象,而无需手动编写对应的类。 压缩包中的"generator"可能是一个生成器...
在Java开发中,为了提高开发效率和代码的可维护性,常常需要将数据库表结构映射为Java对象,也就是我们常说的Bean类。这个过程通常手动编写,但随着自动化工具的发展,现在可以通过特定的工具或者库来自动生成这些...
数据库表转实体类和DTO是软件开发中一个常见的任务,特别是在Java后端开发中,它涉及到数据模型的设计和数据访问层的操作。实体类(Entity Class)通常代表数据库中的表,而DTO(Data Transfer Object)则用于在不同...
在Java开发中,实体类(Entity Class)是数据模型的重要组成部分,通常用于映射数据库中的表。本工具专门针对这种情况,能够根据数据库中的表结构自动生成对应的Java Bean实体类,极大地提高了开发效率。 在使用这...
6. **代码生成工具**: "pojo2oracle"可能是一个工具或者代码生成脚本,用于根据给定的实体类(POJO,Plain Old Java Object)生成Oracle数据库的表结构。这个工具会分析实体类的定义,并自动生成创建Oracle表的DDL...
这个小项目的核心功能在于自动化地从数据库中读取表的信息,如字段名、数据类型、主键等,然后根据这些信息生成对应的Java实体类、DAO(数据访问对象)、Service以及Mapper接口等文件。通过这种方式,开发者可以快速...
一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...
一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...
通过JDBC,我们可以在Java程序中执行SQL语句,如创建数据库、表,以及插入、更新和查询数据。 2. **必备库** 创建SQL Server数据库时,需要一个JDBC驱动。在这个例子中,使用的驱动是`jtds-1.2.2.jar`。JTDS是一个...
### Java判断数据库表是否存在 在Java开发中,经常会遇到需要检查特定表是否存在于数据库中的情况。这通常是数据库操作流程中的一个重要环节,确保后续的操作(如插入、更新或删除数据)能够顺利进行。本文将详细...
至于"代码成品",这部分可能包含了完成上述功能的Java源代码文件,例如数据访问对象(DAO)层的实现,用于封装数据库操作;业务逻辑层(Service)的代码,处理业务规则和流程;以及可能的控制层(Controller)代码,...
这通常在动态生成报表或者需要根据数据库结构动态创建Java对象时非常有用。 #### 基本原理 要实现这一功能,主要依靠`java.sql.ResultSetMetaData`类来获取元数据信息。通过执行SQL查询语句(如`SELECT * FROM ...