Oracle表生成JavaBean

package com.batch.tabletojava

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class Table2JavaBean {
	private static final String TAB = "\t";
	private static final String LINE = "\r\n";

	public static void main(String[] args) {
		
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = null;
			String jdbcString = "jdbc:oracle:thin:@localhost:1521:xe";
			conn = DriverManager.getConnection(jdbcString, "oracle", "oracle");
			List<String> tableList = new ArrayList<String>();
			tableList = getTableList(conn);
			
			for(String s: tableList){
				makeJavaBean(conn, s);
				System.out.println(s);
			}

			
		}catch(Exception e){
			e.printStackTrace();
		}

	}
	
	private static void makeJavaBean( Connection conn ,String tableID) {
		
		FileOutputStream fo = null;
		DataOutputStream ds = null;
		File file = new File("c:\\tableBean\\" + tableID + ".java");
		String sql = "select * from " + tableID + " where 1<>1";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			ResultSetMetaData md = rs.getMetaData();
			String tableName = getTableName(conn, tableID);
			int columnCount = md.getColumnCount();
			tableID = tableID.substring(0, 1).toUpperCase()
					+ tableID.substring(1);
			StringBuffer buff = new StringBuffer();
			
			buff.append("/*----------------------------------------------------------------------------------------");
			buff.append(LINE);
			buff.append("Program Name       | " + tableID + ".java");
			buff.append(LINE);
			buff.append("Language           | Java");
			buff.append(LINE);
			buff.append("Name               | " + tableName + "类");
			buff.append(LINE);
			buff.append("Preparation person | XX.XXX (XXXXX) 2013/12/20");
			buff.append(LINE);
			buff.append("Note               |");
			buff.append(LINE);
			buff.append("------------------------------------------------------------------------------------------");
			buff.append(LINE);
			buff.append("2013-12-20         | Original Source Release                 by XX.XXX (XXXX)");
			buff.append(LINE);
			buff.append("------------------------------------------------------------------------------------------*/"); 
			buff.append(LINE);
			buff.append("package com.batch.common;"); 
			buff.append(LINE);
			buff.append(" "); 
			buff.append(LINE);
			buff.append("/**"); 
			buff.append(LINE);
			buff.append(" * " + tableName + "类."); 
			buff.append(LINE);
			buff.append(" * "); 
			buff.append(LINE);
			buff.append(" * @author XX.XXX"); 
			buff.append(LINE);
			buff.append(" */"); 
			buff.append(LINE);

			buff.append("public class " + tableID + " extends WWUMTCOMMON {");
			buff.append(LINE);
			for (int i = 1; i <= columnCount; i++) {
				if("ZZ".equals(md.getColumnName(i).substring(0,2))){
					continue;
				}
				// 取得字段注释
				String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
				String columnID = makeColumnID(md.getColumnName(i));
				buff.append(TAB).append("/** "+columnComment+". */");
				buff.append(LINE);
				buff.append(TAB);
				buff.append("private "
						+ Table2JavaBean.toType(md.getColumnTypeName(i)) + " "
						+ columnID.substring(0,1).toLowerCase()
						+ columnID.substring(1)+ ";");
				buff.append(LINE);
			}

			for (int i = 1; i <= columnCount; i++) {
				if("ZZ".equals(md.getColumnName(i).substring(0,2))){
					continue;
				}
				// 取得字段注释
				String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
				buff.append(TAB);
				String pojiType = Table2JavaBean
						.toType(md.getColumnTypeName(i));
				String columnName = makeColumnID(md.getColumnName(i));
				columnName =  columnName.substring(0, 1).toLowerCase()
						+ columnName.substring(1);
				String getName = null;
				String setName = null;
				if (columnName.length() > 1) {
					// get
					buff.append(LINE).append(TAB).append("/** ");
					buff.append(LINE).append(TAB).append(" * 获取" +columnComment+"。");
					buff.append(LINE).append(TAB).append(" * @return "+columnName +" " + columnComment);
					buff.append(LINE).append(TAB).append(" */");

					getName = "public " + pojiType + " get"
							+ columnName.substring(0, 1).toUpperCase()
							+ columnName.substring(1) + "() {";

					buff.append(LINE).append(TAB).append(getName);
					buff.append(LINE).append(TAB).append(TAB);
					buff.append("return " + columnName + ";");
					buff.append(LINE).append(TAB).append("}");
					buff.append(LINE);
					
					// set
					setName = "public void set"
							+ columnName.substring(0, 1).toUpperCase()
							+ columnName.substring(1) + "("
							+ pojiType + " " + columnName + ") {";
					buff.append(LINE).append(TAB).append("/** ");
					buff.append(LINE).append(TAB).append(" * 设定"+ columnComment+"。 ");
					buff.append(LINE).append(TAB).append(" * @param "+columnName +" " + columnComment);
					buff.append(LINE).append(TAB).append(" */");
					buff.append(LINE).append(TAB).append(setName);
					buff.append(LINE).append(TAB).append(TAB);
					buff.append("this." + columnName + " = " + columnName + ";");
					buff.append(LINE).append(TAB).append("}");
					buff.append(LINE);
				}
			}
			buff.append("}").append(LINE);
			fo = new FileOutputStream(file);
			ds = new DataOutputStream(fo);
			ds.write(buff.toString().getBytes());
				
		}catch(Exception e){
			e.printStackTrace();
		} finally{
			try{
				if(ds != null){
					ds.flush();
					ds.close();
				}
				if(fo != null){
					fo.close();
				}
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
				
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}

	private static String makeColumnID(String columnID) {
		String[] strs = columnID.toLowerCase().split("_");
		StringBuffer sb = new StringBuffer();
		for(int i = 0; i<strs.length; i++){
			try{
				sb.append(strs[i].substring(0, 1).toUpperCase() + strs[i].substring(1).toLowerCase());
			}catch(Exception e){
				e.printStackTrace();
				System.out.println(columnID);
			}

		}
		
		return sb.toString();
	}

	private static String getColumnComment(Connection conn, String tableID, String columnID){
		String columnName = "";
		// USER_TAB_COLUMNS
		String sql = "select COMMENTS from USER_COL_COMMENTS where TABLE_NAME = ? and COLUMN_NAME = ?";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			ps = conn.prepareStatement(sql);
			ps.setString(1, tableID);
			ps.setString(2, columnID);
			rs = ps.executeQuery();

			while (rs.next()) {
				columnName = rs.getString("COMMENTS");
			}	
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return columnName;
	}

	private static List<String> getTableList(Connection conn ){
		try{}catch(Exception e){}
		List<String> tableList = new ArrayList<String>();
		// USER_TAB_COLUMNS
		String sql = "select distinct TABLE_NAME from USER_TAB_COLUMNS";
//		System.out.println(sql);
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			String tableID = "";
			while (rs.next()) {
				tableID = rs.getString("TABLE_NAME");
//				System.out.println(tableID);
				tableList.add(tableID);
			}	
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return tableList;
	}

	private static String getTableName(Connection conn ,String tableID) throws Exception{
		String tableName = "";
		// USER_TAB_COLUMNS
		String sql = "select COMMENTS from USER_TAB_COMMENTS where TABLE_NAME = ?";
		PreparedStatement ps = null;
		ResultSet rs = null;
		ps = conn.prepareStatement(sql);
		ps.setString(1, tableID);
		rs = ps.executeQuery();

		while (rs.next()) {
			tableName = rs.getString("COMMENTS");
			rs.close();
			return tableName;
		}	
		return tableName;
	}

	public static String toType(String str){
		String result = null;
		if(str.startsWith("VARCHAR2") || str.startsWith("CHAR")){
			result = "String";
		}else if(str.startsWith("NUMBER")){
			result = "int";
		}else if(str.startsWith("DATE")){
			result = "Date";
		}
		return result;
	}

}

  网上查到很多关于java做成数据库表javabean的例子,但是都没有自动生成注释。

在网上查到的例子的基础上,改写了一下。发帖备份。

转载于:https://www.cnblogs.com/winnersalp/p/3459191.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直以来把数据库转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个的Bean,也支持模糊查找生成哪几个的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆。 第10版更新震撼发布,效率大提升,功能更加强大,速度过来围观,这次版本更新如下: 1、新增数据库连接池并可以手动配置,提升数据库连接的使用效率。 2、新增多线程并发处理并可以手动配置,大大提升数据收集和文件生成的效率。 3、增强字符串格式化工具,使得自动拼接字符串的应用场景更多。 4、测试数据库连接、生成Bean文件、精确匹配的更多等按钮都使用了异步线程进行处理, 这样界面不再会被卡住了,点了这些按钮以后还可以同时对界面进行其他操作, 如:移动、最小化、设置参数、使用集成工具等。 5、生成Bean文件按钮添加计时功能,当点击该按钮以后,按钮上的文字会变为读秒计时, 这样就不会以为程序卡死了。 6、更新Oracle数据库驱动包,提升了数据库连接和查询的速度。 7、更新MySQL的数据库驱动包。 8、其他一些小Bug的修改和代码优化调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值