`

java之表反向生成类

    博客分类:
  • Java
阅读更多
环境:XP+JDK1.5+Oracle10g
注意事项
1 请确保你的用户有权限访问
select * from DBA_COL_COMMENTS


2 java类的属性名称一律小写
3 所要jar为:commons-lang-2.4.jar,ojdbc14.jar
4 请在src下放置jdbc.properties属性文件,并且文件中的属性名称不能修改

5 创建java类属性类型全部为String类型
创建原因:
现在ORM很流行,但是在有的项目中并没有用到,java实体类的编写实在没什么可写的,如字段太多的话,手工编写将是一块恶梦,有了这个小的生成工具类,以后就方便多了!
说明:生成的java类实现了java.io.Serializable接口,并且在属性字段,get,set方法上如原字段有注释就加上,没有保持为空
工程图片如下:

引入net.liuzd.tools.tabletoclass.jar包的图片效果

测试类代码如下:
package test;

import net.liuzd.tools.db.entity.JavaDataBaseBean;
import net.liuzd.tools.db.entity.JdbcInfo;
import net.liuzd.tools.db.util.JavaSourceFactory;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class TestCreateJavaBean {

	private static final long serialVersionUID = 1L;
	
	public static void main(String[] args) {		
		
		String packageName = "net.liuzd.tools.db";
		String classFilePath = "E:/net/liuzd/tools/db";
		
		//生成一个类文件的演示
		String tableName = "TUSER";		
		String className = "Tuser";
		
		//请把拷贝的java代码格式化: Ctrl+F/			
		
		/*******第一种:生成一个java类文件的方式*********************/		
		//JavaSourceFactory.create(tableName,packageName,className,classFilePath);
		
		//支持链式风格编程:请确保一定要传入以下四个必备元素,否则报错
		/*JavaSourceFactory.create(
				new JavaDataBaseBean().setTableName(tableName).setPackageName(packageName).setClassName(className).setClassFilePath(classFilePath)
		);	*/
		
		/*******第二种:生成多个java类文件的方式*********************/	
		
		//默认读取jdbc.properties配置文件中的数据库连接方式
		//JavaSourceFactory.create(packageName, classFilePath, new String[]{"x","x"});
		
		//指定读取用户所在库的多个表
		/*JavaSourceFactory.create(packageName, classFilePath,
				new JdbcInfo("orcl","orcl","jdbc:oracle:thin:@192.168.10.1:1521:orcl","oracle.jdbc.driver.OracleDriver"),
				"x","x");*/
		
		
		/*******第三种:生成用户下所有表对应的java类文件********************/	
		
		//默认读取jdbc.properties配置文件中的数据库连接方式		
		JavaSourceFactory.create(packageName, classFilePath);
		
		//创建指定用户下所有的类文件
		/*JavaSourceFactory.create(packageName, classFilePath,
				new JdbcInfo("orcl","orcl","jdbc:oracle:thin:@192.168.10.1:1521:orcl","oracle.jdbc.driver.OracleDriver")	
		);	*/

	}
}

类生成工厂:JavaSourceFactory.java
/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
package net.liuzd.tools.db.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import net.liuzd.tools.db.dao.DbDAO;
import net.liuzd.tools.db.entity.Comments;
import net.liuzd.tools.db.entity.JavaDataBaseBean;
import net.liuzd.tools.db.entity.JdbcInfo;


public class JavaSourceFactory{	
	
	/**
	 * 生成用户名下所有的类文件,默认表名就是类名(首字母大写)	
	 * @param packageName 包名	
	 * @param classFilePath 生成java类的路径	   
	 *  */
	public static void create(String packageName,String classFilePath){		
		String [] tableNames = null;
		createAll(new JavaDataBaseBean(packageName,classFilePath,tableNames));
	}
	
	/**
	 * 生成用户名下所有的类文件,默认表名就是类名(首字母大写)	
	 * @param packageName 包名	
	 * @param classFilePath 生成java类的路径	  
	 * @param tableNames 生成指定java类的表名集合 
	 *  */
	public static void create(String packageName,String classFilePath,String ...tableNames){	
		createAll(new JavaDataBaseBean(packageName,classFilePath,tableNames));
	}
	
	
	/**
	 * 生成用户名下所有的类文件,默认表名就是类名(首字母大写)	
	 * @param packageName 包名	
	 * @param classFilePath 生成java类的路径	
	 * @param jdbc  指定读取用户的表   
	 *  */
	public static void create(String packageName,String classFilePath,JdbcInfo jdbc){
		String [] tableNames = null;		
		createAll(new JavaDataBaseBean(packageName,classFilePath,jdbc,tableNames));
		
	}
	
	/**
	 * 生成用户名下所有的类文件,默认表名就是类名(首字母大写)	
	 * @param packageName 包名	
	 * @param classFilePath 生成java类的路径	
	 * @param jdbc  指定读取用户的表  
	 * @param tableNames 生成指定表的java类  
	 *  */
	public static void create(String packageName,String classFilePath,JdbcInfo jdbc,String ...tableNames){		
		createAll(new JavaDataBaseBean(packageName,classFilePath,jdbc,tableNames));
		
	}
	
	
	/**
	 * 根据传递的表名生成类名,默认表名就是类名(首字母大写)	
	 * @param packageName 包名	
	 * @param classFilePath 生成java类的路径
	   @param tableNames 表名集合
	 *  */
	private static void createAll(JavaDataBaseBean jdb){
		long startTime = System.currentTimeMillis();
		String packageName = jdb.getPackageName();
		String classFilePath = jdb.getClassFilePath();
		String [] tableNames = jdb.getTableNames();
		
		checkNull(packageName,classFilePath);				
		//组建查询参数
		String queryTableNames = JavaUtils.createQueryParams(tableNames);
		String userName = jdb.getJdbcInfo().getUsername().toUpperCase();
		
		JavaUtils.showInfo("开始访问数据库,获取表相关的列名...");
		Map<String,List<Comments>> userMap = DbDAO.getCommetnsByTableNames(userName, queryTableNames, jdb.getJdbcInfo());
		JavaUtils.showInfo("获取表相关的表名成功,总共获取表个数: " + userMap.size());
		String className = null;
		int i = 0;
		for(Map.Entry<String,List<Comments>> entity : userMap.entrySet()){
			className = JavaUtils.oneStringToUpperCase(entity.getKey());
			//组合java类文件内容			
			List<Comments> comments = entity.getValue();
			String javaSource = create(comments,className,jdb);			
			create(javaSource,className,classFilePath);	
			JavaUtils.showInfo("表名: "+entity.getKey().toUpperCase()+",生成第"+(++i)+"个Java类文件成功...");			
		}	
		long endTime = System.currentTimeMillis();
		JavaUtils.showInfo("总共生成了"+(i)+"个Java类文件,耗时"+(endTime-startTime)+"毫秒!");			
	}
	
	

	/**			
	 * @param tableName   表名
	 * @param packageName 包名
	 * @param className   类名
	 * @param createClassFilePath  Java类生成路径
	 * */
	public static void create(String tableName,String packageName,String className,String createClassFilePath){		
		checkNull(tableName,packageName,className,createClassFilePath);
		create(new JavaDataBaseBean(tableName,packageName,className,createClassFilePath));
	}
	
	private static void checkNull(String ...params){
		for(String param : params){
			if(null == param || "".equals(param)){
				throw new NullPointerException("亲爱的,不要传递空的字符串给我好吗?真受不了你了!!!");
			}
		}
	}
	
	
	
	/**	
	 * @param username    用户名
	 * @param password    密码
	 * @param url         连接字符串
	 * @param driver      驱动名
	 * @param tableName   表名
	 * @param packageName 包名
	 * @param className   类名
	 * @param createClassFilePath  Java类生成路径
	 * */
	public static void create(String userName,String password,String url,String driver,String tableName,String packageName,String className,String createClassFilePath){
		checkNull(userName,password,url,driver,tableName,packageName,className,createClassFilePath);
		create(new JavaDataBaseBean(userName,password,url,driver,tableName,packageName,className,createClassFilePath));
	}
	
	/**
	 * 请务必传递四个必备参数
	 * tableName   表名,packageName 包名,className   类名,createClassFilePath  Java类生成路径
	 * 否则请使用其它方法参数
	 * */
	public static void create(JavaDataBaseBean javaBaseBean){	
		
		if(null == javaBaseBean){
			throw new RuntimeException("亲爱的,不要传递空的对象给我好吗?你太讨厌了,真的,烦!!!");
		}
		
		//调用DAO获取表的相关列名与注释
		String userName = javaBaseBean.getJdbcInfo().getUsername().toUpperCase();
		String tableName = javaBaseBean.getTableName().toUpperCase();
		String createClassFilePath = javaBaseBean.getClassFilePath();				
		
		JavaUtils.showInfo("开始访问数据库,获取表相关的列名...");
		List<Comments> comments =  DbDAO.getCommetnsByTableName(userName,tableName,javaBaseBean.getJdbcInfo());
		JavaUtils.showInfo("获取表相关的列名成功,总共列数: " + comments.size());
		//生成java类文件
		String className = javaBaseBean.getClassName();
		//组合java类文件内容
		JavaUtils.showInfo("开始组装Java类文件内容...");
		String javaSource = create(comments,className,javaBaseBean);	
		JavaUtils.showInfo("开始生成Java类文件...");
		create(javaSource,className,createClassFilePath);	
		JavaUtils.showInfo("生成Java类文件成功...");
	}

	
	/**
	 * 根据字段名与注释生成java源代码
	 * @param comments    包含java的字段名及注释
	 * @param className   java类名
	 * @param javaDb      java原信息 
	 * @return
	 */
	private static String create(List<Comments> comments,String className,JavaDataBaseBean javaDb) {
			StringBuilder javaBean = new StringBuilder();
			// 创建包名
			javaBean.append("package ").append(javaDb.getPackageName()).append(";");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);
			// 创建头部声明
			javaBean.append("import org.apache.commons.lang.builder.ToStringBuilder;");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);			
			// 创建类名		
			javaBean.append("public class ").append(className).append(" ").append("implements java.io.Serializable{");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);
			
			javaBean.append(JavaUtils.FILESPACE).append("private static final long serialVersionUID = 1L;");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);
			
			//生成默认空的构造函数
			javaBean.append(JavaUtils.FILESPACE).append("public").append(JavaUtils.FILESPACEONE).append(className).append("(){");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);
			javaBean.append(JavaUtils.FILESPACE).append("}");
			javaBean.append(JavaUtils.LINE).append(JavaUtils.LINE);
			
			//创建构造函数中的全字段名
			StringBuilder filedNames = new StringBuilder();
			//构建构造函数中的设置值
			StringBuilder setBeanValues = new StringBuilder();
			
			for (Comments comment : comments) {			
				
				String fileType = comment.getFiledType();
				String columnName = comment.getColumn_name().toLowerCase();
				
				filedNames.append(fileType).append(JavaUtils.FILESPACEONE).append(columnName).append(",");
				
				setBeanValues.append(JavaUtils.FILESPACE).append(JavaUtils.FILESPACE).append("this.").append(columnName)				
				.append(JavaUtils.FILESPACEONE).append("=").append(JavaUtils.FILESPACEONE).append(columnName).append(";")
				.append(JavaUtils.LINE);				
				
				//创建字段及相应注释
				javaBean.append(createContext(comment,fileType,columnName,className));		
				
			}
			
			javaBean.append(JavaUtils.LINE).append(JavaUtils.FILESPACE);
			javaBean.append("public").append(JavaUtils.FILESPACEONE).append(className).append("(");
			//去除最后一个逗号
			javaBean.append(JavaUtils.delLastComma(filedNames.toString())).append("){")	
			.append(JavaUtils.LINE)
			.append(setBeanValues.toString())
			.append(JavaUtils.FILESPACE).append("}").append(JavaUtils.LINE).append(JavaUtils.FILESPACE);			
			
			
			//toString
			javaBean.append(JavaUtils.LINE).append(JavaUtils.FILESPACE);
			javaBean.append("@Override  public String toString() {");
			javaBean.append(JavaUtils.LINE);
			javaBean.append(JavaUtils.FILESPACE).append(JavaUtils.FILESPACE).append("return ToStringBuilder.reflectionToString(this);");
			javaBean.append(JavaUtils.LINE);
			javaBean.append(JavaUtils.FILESPACEONE).append(JavaUtils.FILESPACE).append("}");
			javaBean.append(JavaUtils.LINE);
			javaBean.append("}");
			return javaBean.toString();
	}

	
	private static String createContext(Comments comment,String fileType,String columnName,String className) {
		
		StringBuffer filedContext = new StringBuffer();
		String comments = comment.getComments();	
		String methoColumnName = JavaUtils.oneStringToUpperCase(columnName);
		
		if(null != comments){
			/**表字段名称为:  相应注释为:单位信息表自编号*/		
			filedContext.append(JavaUtils.FILESPACE).append("/** 表字段名称为:").append(columnName)
			.append(" 相应注释为:").append(comments).append(" */");			
		}
		
		filedContext.append(JavaUtils.LINE);
		filedContext.append(JavaUtils.FILESPACE).append("private").append(JavaUtils.FILESPACEONE).append(fileType).append(JavaUtils.FILESPACEONE).append(columnName).append(JavaUtils.FILESPACEONE).append("=").append(JavaUtils.FILESPACEONE).append("null;");
		filedContext.append(JavaUtils.LINE).append(JavaUtils.LINE);
		
		//读取方法的注释
		if(null != comments){
			filedContext.append(JavaUtils.FILESPACE).append("/** 获取").append(comments).append(" */").append(JavaUtils.LINE);	
		}
		
		filedContext.append(JavaUtils.FILESPACE).append("public").append(JavaUtils.FILESPACEONE).append(fileType).append(" get")
		.append(methoColumnName).append("(){");		
		filedContext.append(JavaUtils.LINE);		
		filedContext.append(JavaUtils.FILESPACE).append(JavaUtils.FILESPACE).append("return this.").append(comment.getColumn_name().toLowerCase()).append(";")
		.append(JavaUtils.LINE)
		.append(JavaUtils.FILESPACE).append("}")
		.append(JavaUtils.LINE).append(JavaUtils.LINE);
		
		//设置值的注释
		if(null != comments){
			filedContext.append(JavaUtils.FILESPACE).append("/**设置").append(comments).append("*/").append(JavaUtils.LINE);		
		}
		
		filedContext.append(JavaUtils.FILESPACE).append("public").append(JavaUtils.FILESPACEONE).append(className).append(JavaUtils.FILESPACEONE).append("set")
		.append(methoColumnName).append("(")
		.append(fileType).append(JavaUtils.FILESPACEONE).append(columnName).append("){")
		.append(JavaUtils.LINE).append(JavaUtils.FILESPACE).append(JavaUtils.FILESPACE)
		.append("this.").append(columnName).append(" = ").append(columnName).append(";")	
		.append(JavaUtils.LINE).append(JavaUtils.FILESPACE).append(JavaUtils.FILESPACE)
		.append("return this;")
		.append(JavaUtils.LINE).append(JavaUtils.FILESPACE)
		.append("}")
		.append(JavaUtils.LINE).append(JavaUtils.LINE);	
		
		 return filedContext.toString();
	}	

	
	/**
	 * 根据java源代码生成java类文件
	 * @param javaSource            java源代码内容
	 * @param className             java类名称 
	 * @param createClassFilePath   java类生成路径
	 */
	public static void create(String javaSource,String className,String createClassFilePath){
		File mkDirFile = new File(createClassFilePath);
		if(!mkDirFile.exists()){
			mkDirFile.mkdirs();
		}
		
		String filePathName = className+".java";
		JavaUtils.showInfo("路径: " + mkDirFile.getAbsolutePath() + ",className: " + filePathName);
		File javaSourceFile = new File(mkDirFile,filePathName);
		if(javaSourceFile.exists()){
			javaSourceFile.delete();
		}
		try {
			java.io.FileWriter fw = new FileWriter(javaSourceFile);
			fw.write(javaSource);
			fw.flush();
			fw.close();
		} catch (IOException e) {
			throw new RuntimeException("生成Java类文件出错..." + e.getMessage(), e);
		}			
		JavaUtils.showInfo("Java类生成"+(javaSourceFile.exists() ? "成功" : "失败")+",路径:" + javaSourceFile.getAbsolutePath());		
	}	
}

jdbc.properties属性文件内容如下:
#注意事项,以下这四个名称不能修改
username=xx
password=xx
url=jdbc:oracle:thin:@192.168.10.1:1521:orcl
driver=oracle.jdbc.driver.OracleDriver

ConnectionUtils.java
package net.liuzd.tools.db.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import net.liuzd.tools.db.entity.JdbcInfo;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class ConnectionUtils {

	private ConnectionUtils() {

	}	
	
	/**
	 * 正式使用这个连接
	 * */
	public static Connection getConnectionFactoy(JdbcInfo jdbc) throws ClassNotFoundException, SQLException{
		Class.forName(jdbc.getDriver());
		return DriverManager.getConnection(
				jdbc.getUrl(),
				jdbc.getUsername(),
				jdbc.getPassword()
		);
	}
}

DbDAO.java
package net.liuzd.tools.db.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.liuzd.tools.db.entity.Comments;
import net.liuzd.tools.db.entity.JdbcInfo;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class DbDAO {

	/**
	 * @param userName    用户名
	 * @param tableName   表名
	 * @param JdbcInfo    数据连接方式
	 * @return
	 */
	public static List<Comments> getCommetnsByTableName(String userName,String tableName,JdbcInfo jdbc) {
		List<Comments> lists = new ArrayList<Comments>();
		String sql = "select * from DBA_COL_COMMENTS t where t.owner=? and t.table_name=? order by t.column_name";
		java.sql.Connection conn = null;
		java.sql.PreparedStatement psmt = null;
		java.sql.ResultSet rs = null;
		try {
			conn = ConnectionUtils.getConnectionFactoy(jdbc);
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, userName.trim());
			psmt.setString(2, tableName.trim());			
			rs = psmt.executeQuery();
			while (rs.next()) {				
				lists.add(new Comments(
						rs.getString("owner"), 
						rs.getString("table_name"), 
						rs.getString("column_name"),
						rs.getString("comments"))
			    );
			}
		} catch (SQLException e) {
			throw new RuntimeException("获取数据出错..." + e.getMessage(), e);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException("未能找到驱动文件..." + e.getMessage(), e);
		} finally {
			try {
				if (null != rs) {
					rs.close();
					rs = null;
				}
				if (null != psmt) {
					psmt.close();
					psmt = null;
				}
				if (null != conn) {
					conn.close();
					conn = null;
				}
			} catch (SQLException e) {
				throw new RuntimeException("关闭数据库连接出错..." + e.getMessage(), e);
			}
		}
		return lists;
	}
	
	
	/**
	 * @param userName    用户名
	 * @param tableName   表名集合
	 * @param JdbcInfo    数据连接方式
	 * @return
	 */
	public static Map<String,List<Comments>> getCommetnsByTableNames(String userName,String tableNameInfos,JdbcInfo jdbc) {
		Map<String,List<Comments>> userMap = new HashMap<String,List<Comments>>();		
		String sql = "select * from DBA_COL_COMMENTS t where t.owner=?";
		if(null != tableNameInfos && !"".equals(tableNameInfos)){
			sql += " and t.table_name in("+tableNameInfos+") ";
		}
		sql += " order by t.table_name,t.column_name";			
		java.sql.Connection conn = null;
		java.sql.PreparedStatement psmt = null;
		java.sql.ResultSet rs = null;
		try {
			conn = ConnectionUtils.getConnectionFactoy(jdbc);
			psmt = conn.prepareStatement(sql);			
			psmt.setString(1, userName.trim());
			rs = psmt.executeQuery();
			String tableName = null;
			while (rs.next()) {
				tableName = rs.getString("table_name");				
				List<Comments> lists = userMap.get(tableName);
				if(null == lists){
					lists = new ArrayList<Comments>();
				}
				lists.add(new Comments(
						rs.getString("owner"), 
						tableName, 
						rs.getString("column_name"),
						rs.getString("comments"))
			    );
				userMap.put(tableName, lists);
			}
		} catch (SQLException e) {
			throw new RuntimeException("获取数据出错..." + e.getMessage(), e);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException("未能找到驱动文件..." + e.getMessage(), e);
		} finally {
			try {
				if (null != rs) {
					rs.close();
					rs = null;
				}
				if (null != psmt) {
					psmt.close();
					psmt = null;
				}
				if (null != conn) {
					conn.close();
					conn = null;
				}
			} catch (SQLException e) {
				throw new RuntimeException("关闭数据库连接出错..." + e.getMessage(), e);
			}
		}
		return userMap;
	}
}

JavaDataBaseBean.java
package net.liuzd.tools.db.entity;

import net.liuzd.tools.db.util.JdbcFactory;

import org.apache.commons.lang.builder.ToStringBuilder;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class JavaDataBaseBean {
	
	private String [] tableNames = null;
	private String tableName = null;
	private String packageName = null;
	private String className = null;	
	private String classFilePath = null;	
	
	private JdbcInfo jdbcInfo = null;
	
	public String getClassName() {
		return className;
	}
	public JavaDataBaseBean setClassName(String className) {
		this.className = className;
		return this;
	}		
	
	/**
	 * 默认读取位于classpath下的jdbc.properties属性文件
	 * */
	public JavaDataBaseBean(){
		setJdbcInfo(JdbcFactory.getJdbcInfo());		
	}
	
	public JavaDataBaseBean(String packageName,String classFilePath,String ...tableNams){
		this();
		this.packageName = packageName;
		this.classFilePath = classFilePath;
		this.tableNames = tableNams;
	}
	
	public JavaDataBaseBean(String packageName,String classFilePath,JdbcInfo jdbc,String ...tableNams){		
		this.packageName = packageName;
		this.classFilePath = classFilePath;
		this.jdbcInfo = jdbc;
		this.tableNames = tableNams;
	}
	

	
	/**
	 *  
	 * 默认生成的类名为首字母大写之后为小写
	 * 默认生成的包名为: net.liuzd.tools.db
	 * */
	public JavaDataBaseBean(String tableName){	
		this();
		this.tableName = tableName;		
	}
	
	/**	
	 *  默认读取位于classpath下的jdbc.properties属性文件
	 * @param tableName   表名
	 * @param packageName 包名
	 * @param className   类名
	 * */
	public JavaDataBaseBean(String tableName,
			String packageName,String className) {			
		this(tableName);
		this.className = className;
		this.packageName = packageName;			
	}
	
	
	public JavaDataBaseBean(String tableName,
			String packageName,String className,String classFilePath) {			
		this(tableName,packageName,className);
		this.classFilePath = classFilePath;	
	}
	
	/**	
	 * @param username    用户名
	 * @param password    密码
	 * @param url         连接字符串
	 * @param driver      驱动名
	 * @param tableName   表名
	 * @param packageName 包名
	 * @param className   类名
	 * */
	public JavaDataBaseBean(String username,String password,String url,String driver,String tableName,
			String packageName,String className) {
		this.tableName = tableName;	
		this.className = className;
		this.packageName = packageName;	
		jdbcInfo = new JdbcInfo(username,password,url,driver);		
	}
	
	
	public JavaDataBaseBean(String username,String password,String url,String driver,String tableName,
			String packageName,String className,String classFilePath) {
		this(username,password,url,driver,tableName,packageName,className);
		this.classFilePath = classFilePath;	
	}
	
	
	public String getTableName() {
		return tableName;
	}
	public JavaDataBaseBean setTableName(String tableName) {
		this.tableName = tableName;
		return this;
	}
	public String getPackageName() {
		return packageName;
	}
	public JavaDataBaseBean setPackageName(String packageName) {
		this.packageName = packageName;
		return this;
	}	
	
	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
	
	public JdbcInfo getJdbcInfo() {
		return jdbcInfo;
	}
	
	public JavaDataBaseBean setJdbcInfo(JdbcInfo jdbcInfo) {
		this.jdbcInfo = jdbcInfo;		
		return this;
	}
	
	public String getClassFilePath() {
		return classFilePath;
	}

	public JavaDataBaseBean setClassFilePath(String classFilePath) {
		this.classFilePath = classFilePath;
		return this;
	}
	
	public String[] getTableNames() {
		return tableNames;
	}
	
	public JavaDataBaseBean setTableNames(String[] tableNames) {
		this.tableNames = tableNames;
		return this;
	}	
}

JdbcInfo.java
package net.liuzd.tools.db.entity;

import org.apache.commons.lang.builder.ToStringBuilder;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class JdbcInfo {
	
	private String username;
	private String password;
	private String url;
	private String driver;
	
	public JdbcInfo(){
		
	}
	
	
	public JdbcInfo(String username, String password, String url, String driver) {
		super();
		this.username = username;
		this.password = password;
		this.url = url;
		this.driver = driver;
	}



	public String getUsername() {
		return username;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getUrl() {
		return url;
	}
	
	public void setUrl(String url) {
		this.url = url;
	}
	
	public String getDriver() {
		return driver;
	}
	
	public void setDriver(String driver) {
		this.driver = driver;
	}
	
	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
}

JavaUtils.java
package net.liuzd.tools.db.util;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class JavaUtils {
	
	public static final String FILESPACE = "	";	
	public static final String FILESPACEONE = " ";	
	public static final String LINE = "\n";
	public static final String TIME = "yyyy-MM-dd hh:mm:ss";
	
	/**
	 * 获取当前的时间
	 * */
	public static String getCurrentDate(){
		SimpleDateFormat sdf = new SimpleDateFormat(TIME);
		return sdf.format(new Date());
	}
	
	/**
	 * 首字母设置为大写
	 * */
	public static String oneStringToUpperCase(String param){
		String temp = param;		
		if(null != temp && !"".equals(temp) && temp.length() > 0){
			temp = temp.toLowerCase();
			String one = temp.substring(0,1).toUpperCase();
			String endStr =  temp.substring(1,temp.length());
			temp = one + endStr;
		}
		return temp;
	}
	
	/**
	 *组建查询SQL,用于in()中的参数查询
	 * */
	public static String createQueryParams(String ...tableNames){
		if(null == tableNames || tableNames.length == 0){
			return null;
		}
		
		StringBuilder querySql = new StringBuilder();
		for(String tableName : tableNames){
			querySql.append("'").append(tableName).append("'").append(",");
		}
		String tempSql = delLastComma(querySql.toString());
		return tempSql;
	}
	
	/**
	 * 去掉最后一个逗号
	 * */
	public static String delLastComma(String value){
		if(null == value || "".equals(value)){
			return null;
		}
		if(value.endsWith(",")){
			value = value.substring(0,value.length()-1);
		}
		return value;
	}		
	
	public static void showInfo(String message){
		System.out.println(getCurrentDate() + FILESPACEONE + message);
	}	
}

JdbcFactory.java
package net.liuzd.tools.db.util;

import net.liuzd.tools.db.entity.JDBCENUM;
import net.liuzd.tools.db.entity.JdbcInfo;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class JdbcFactory {
	
	public static JdbcInfo jdbc = null;	
	
	private JdbcFactory(){
		
	}	
	
	static{
		jdbc = new JdbcInfo(
				ReadProperty.getPropertyByKey(JDBCENUM.USERNAME),
				ReadProperty.getPropertyByKey(JDBCENUM.PASSWORD),
				ReadProperty.getPropertyByKey(JDBCENUM.URL),
				ReadProperty.getPropertyByKey(JDBCENUM.DRIVER)
		);
	}	
	
	
	public static JdbcInfo getJdbcInfo(){		
		return jdbc;	
	}
}

ReadProperty.java
package net.liuzd.tools.db.util;

import java.io.InputStream;
import java.util.Properties;

import net.liuzd.tools.db.entity.JDBCENUM;

/**
 * @author liuzd
 * @version 1.0
 * @since   1.5
 * @time   2011-09-23
 * 网名:咫尺天涯 
 * 博客:http://liuzidong.iteye.com/
 */
public class ReadProperty {

	private static Properties beanProps = new Properties();
	private static final String BEANPROPERTIES = "jdbc.properties";
	
	private Properties userProperties = null;

	static {
		try {
			InputStream inStream = ReadProperty.class.getClassLoader()
					.getResourceAsStream(BEANPROPERTIES);
			beanProps.load(inStream);
		} catch (Exception ex) {
			throw new RuntimeException(ex.getMessage(), ex);
		}
	}

	public static Properties getProperty() {
		return beanProps;
	}

	public static String getPropertyByKey(String key) {
		return beanProps.getProperty(key);
	}
	
	public static String getPropertyByKey(JDBCENUM  jdbcEnum) {
		return getPropertyByKey(jdbcEnum.name().toLowerCase());
	}
	
	@SuppressWarnings("unused")
	private ReadProperty(){
		
	}

	/**
	 * 特别为用户刘下一个接口,传递属性文件名称进入读取
	 * */
	public ReadProperty(String propertiesName){
		userProperties = new Properties();
		try {
			InputStream inStream = ReadProperty.class.getClassLoader()
					.getResourceAsStream(propertiesName);
			userProperties.load(inStream);
		} catch (Exception ex) {
			throw new RuntimeException(ex.getMessage(), ex);
		}
	}	
	
	/**
	 * 允许用户调用进行读取属性文件中的值
	 * */
	public String getValueByProperties(String propertiesName){
		return userProperties.getProperty(propertiesName);
	}
}

附件是打包好了的jar及工程文件
  • 大小: 27.7 KB
  • 大小: 15.2 KB
分享到:
评论
1 楼 qq272936993 2014-07-10  
目前这个是只支持Oracle的还是已经做了兼容了...多种数据库都可以做?

相关推荐

    java代码反向生成

    Java代码反向生成是一种常见的开发工具功能,它能够根据数据库中的表结构自动生成相应的Java实体类、MyBatis映射文件以及其他相关代码,极大地提高了开发效率。在Java Web开发中,MyBatis作为一款轻量级的持久层框架...

    java反向生成实体工具

    Java反向生成实体工具是一种高效实用的开发辅助软件,它极大地简化了开发过程中实体类的创建工作。在Java编程中,实体类是用于映射数据库表的重要组件,通常需要开发者手动编写,这不仅耗时,而且容易出错。有了这种...

    反向生成实体类

    ### 反向生成实体类:从数据库表结构到JavaBean 在软件开发过程中,特别是基于数据库的应用程序开发中,我们经常需要将数据库中的表映射为面向对象编程语言(如Java)中的实体类(通常称为JavaBean)。这种过程称为...

    逆向生成工具,有数据库表生成java bean实体类

    对于每一个表,工具会自动生成一个对应的Java Bean类,这个类包含了表中的字段作为类的属性,并为每个属性提供了getter和setter方法。此外,如果在XML配置文件中启用了相关选项,工具还会生成toString、equals和...

    mybatis实体类反向生成

    "mybatis实体类反向生成"是指利用特定工具,根据数据库中的表结构自动生成对应的Java实体类以及MyBatis的映射文件(XML配置文件),这一过程极大地提高了开发效率,减少了手动编写这些基础代码的工作量。 1. **...

    JAVA通过实体生成数据库表

    在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...

    idea配置数据库,反向生成实体类demo,支持lombok,swagger2注解

    idea配置数据库,反向生成实体类demo,支持lombok,swagger2注解

    oracle 根据数据库自动生成JAVA代码

    "Oracle根据数据库自动生成JAVA代码"这一技术就是将数据库中的表结构映射到Java编程语言中的实体类、DAO(Data Access Object)、Service、Controller以及前端展示层的HTML模板,从而减少手动编写这些基础代码的工作...

    根据正则表达式反向生成测试数据

    根据正则表达式反向生成测试数据

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    根据MyBatis或iBatis的SQLMapper文件解析生成数据库表,通常是指通过解析MyBatis或iBatis的SQLMapper文件中的SQL语句,然后根据这些SQL语句来生成对应的数据库表结构。这样的需求可能源于需要将已有的SQLMapper文件...

    Java邀请码生成工具类

    超级简单的Java邀请码生成器,输入一个数值类型生成一个6位的0-Z的邀请码,并且邀请码可以反向解析成数值! 非常好用,生成和反向生成的方法已经封装好了 超级简单

    mybatis plus+springboot反向生成代码

    Mybatis Plus的反向生成代码功能,可以根据数据库中的表结构自动生成对应的Java实体类、Mapper接口及实现、Service接口及实现、Controller等代码,大大提高了开发效率。 SpringBoot作为一款微服务框架,它简化了...

    JAVA MVC三层架构 代码生成器.JAVA根据数据库表反向工程生成 MVC三层架构 代码的生成器

    在Java中,反向工程常用于根据数据库表自动生成对应的实体类、DAO接口和实现、Service接口和实现等代码,减少开发者手动编写这些基础代码的工作量。 在这个特定的"JAVA MVC三层架构 代码生成器"中,它使用了反向...

    根据表反向生成实体类与配置文件

    "根据表反向生成实体类与配置文件"这个主题涉及到将数据库中的表结构转换为编程语言中的类结构,以及生成相应的配置文件,以便于开发人员进行数据操作。这种方法能够显著提高开发效率,特别是在处理大量数据操作时。...

    mybatis-反向生成工具

    反向生成工具则是Mybatis的一个辅助工具,用于帮助开发者自动生成与数据库表相关的Java实体类、Mapper接口及XML配置文件,大大提升了开发效率。 首先,我们要理解什么是反向工程。反向工程,也称为逆向生成,是指从...

    根据hibernate反向生成数据库的java代码

    "根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括Hibernate的逆向工程、实体类生成、数据库元数据以及Java持久化接口。 1. Hibernate逆向工程: Hibernate的逆向工程工具,也被称为...

    mybatis反向生成实体类

    本文将详细介绍如何使用MyBatis Generator反向生成实体类、DAO和Mapper文件,并提供操作步骤。 1. **MyBatis Generator简介** MyBatis Generator (MBG) 是MyBatis的一个插件,它能够根据数据库表的信息自动生成...

    Eclipse插件,JAVA类反向生成UML类图AmaterasUML_1.3.4

    标题中的"Eclipse插件,JAVA类反向生成UML类图AmaterasUML_1.3.4"指的是AmaterasUML插件的1.3.4版本,这是一个专门用于在Eclipse中生成UML类图的工具。通过这个插件,你可以轻松地从已有的Java源代码中提取出类、...

    Mybatis反向生成

    1. **反向生成**:反向生成是指从现有的数据库结构出发,自动生成与之对应的源代码。这在项目初始化或者数据库表结构发生变化时特别有用,避免手动编写大量重复的代码。 2. **MyBatis**:MyBatis是一个优秀的持久层...

Global site tag (gtag.js) - Google Analytics