`
flashdream8
  • 浏览: 667252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

根据数据库表结构生成实体bean 包括 get set 方法和 注释

阅读更多

根据数据库表结构生成 javaBean 。

这个功能以前一直使用 hibernate ,老觉得不方便,而且hibernate 生成的javabean 没有注释(估计是我不会配置)

所以就写了这么一个工具类,将 数据库中的表生成 javaBean .

 

 

 

package com.xxx.common;

import java.io.File;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @createtime: 2012-10-19 下午03:29:35
 * 
 * @version: 将 表结构生成 实体类
 */
public class CopyOfSqlFiledUtil {
	private static String srcDirectory = "c:/xxx/";// 存放.java源文件的目录
	private static String classDirectory = "c:/xxx/class/";// 存放.class的目录
	private static String classPackage = "com.xxx.entity";// 对应bean对象的包名

	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=GBK";
	private static String user = "xxx";
	private static String pass = "xxx";
	private static Set<String> columnTypeSet = new HashSet<String>();
	
	private final static  String decollator = "★";  // 分隔符

	private  static void init() {
		// 设置一个目录
		File dir = new File(CopyOfSqlFiledUtil.srcDirectory);
		File dir2 = new File(CopyOfSqlFiledUtil.classDirectory);
		if (!dir.exists()) {
			dir.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件
		}
		if (!dir2.exists()) {
			dir2.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件
		}
	}

	private static void getJavaFile(String tableName, List<String> columnList)
			throws Exception {
		System.out.println("a::" + tableName);
		String columnName = "";
		String zhushi = "";
		String columnType = "";
		String columnType4Obj = "";
		if (columnList != null && !columnList.isEmpty()) {
			StringBuffer fileContent = new StringBuffer();
			// 生成一个包
			fileContent.append("package ");
			fileContent.append(CopyOfSqlFiledUtil.classPackage);
			fileContent.append(";\n\n");

			// 生成类声明类这一行
			fileContent.append("public class ");
			fileContent.append(tableName);
			fileContent.append(" implements java.io.Serializable {\n\n");

			// 生成构造方法
			// fileContent.append("\tprivate " + tableName + "(){\n");
			// fileContent.append("\t}\n");

			for (String columnMessage : columnList) {
				if (columnMessage != null && columnMessage.contains(decollator)) {
					String[] columns = columnMessage.split(decollator);
					columnName = columns[0];
					zhushi = columns[1];
					columnType = columns[2];
					columnType4Obj = jdbc2objMap.get(columnType.toUpperCase());

					// System.err.println("columnName="+columnName+" , zhushi="+zhushi+" , columnType="+columnType+" , columnType4Obj="+columnType4Obj);
					// 生成javaBean的私有属性
					fileContent.append("\n\t private " + columnType4Obj + " ");
					fileContent
							.append(columnName.toString() + ";\t//" + zhushi);

				}
			}
			fileContent.append("\n");
			fileContent.append("\n\n\n\t/*下面是取得属性值的get方法*/");
			for (String columnMessage : columnList) {
				if (columnMessage != null && columnMessage.contains(decollator)) {
					String[] columns = columnMessage.split(decollator);
					columnName = columns[0];
					zhushi = columns[1];
					columnType = columns[2];
					columnType4Obj = jdbc2objMap.get(columnType.toUpperCase());

					// 生成get方法
					fileContent.append("\n\t public ");
					fileContent.append(columnType4Obj);
					fileContent.append(" get");
					fileContent.append(columnName.toString().substring(0, 1)
							.toUpperCase());
					fileContent.append(columnName.toString().substring(1));
					fileContent.append("(){\n");
					fileContent.append("\t\t return this."
							+ columnName.toString() + ";\n\t}");
					// fileContent.append("\n");
				}
			}

			// 生成set方法
			fileContent.append("\n");
			fileContent.append("\n\n\n\t/*下面是设置属性值的set方法*/");
			for (String columnMessage : columnList) {
				if (columnMessage != null && columnMessage.contains(decollator)) {
					String[] columns = columnMessage.split(decollator);
					columnName = columns[0];
					zhushi = columns[1];
					columnType = columns[2];
					columnType4Obj = jdbc2objMap.get(columnType.toUpperCase());
					// 生成set方法
					fileContent.append("\n\t public void set");
					fileContent.append(columnName.toString().substring(0, 1)
							.toUpperCase());
					fileContent.append(columnName.toString().substring(1));
					fileContent.append("( " + columnType4Obj + "\t");
					fileContent.append(columnName.toString());
					fileContent.append(" ){\n");
					fileContent.append("\t\tthis.");
					fileContent.append(columnName.toString());
					fileContent.append("=");
					fileContent.append(columnName.toString());
					fileContent.append(";\n\t}");
					fileContent.append("\n");

				}
			}
			fileContent.append("}");

			// 形成一个.java文件
			java.io.FileWriter file = new java.io.FileWriter(
					CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java");
			file.write(fileContent.toString());
			file.close();
			file = null;
			// 编译成.class文件
			String[] arg = new String[] { "-d", CopyOfSqlFiledUtil.classDirectory,
					CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java" };
			com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
			int statues = javac.compile(arg);
			System.out.println("OK" + statues);
			String className = CopyOfSqlFiledUtil.classPackage + ".";
			className += tableName;
		}

	}

	/**
	 * 驼峰转化为 大写 xxCar 转换为 xx_car
	 * 
	 * @param param
	 * @return
	 */
	public static String camel4underline(String param) {
		Pattern p = Pattern.compile("[A-Z]");
		if (param == null || param.equals("")) {
			return "";
		}
		StringBuilder builder = new StringBuilder(param);
		Matcher mc = p.matcher(param);
		int i = 0;
		while (mc.find()) {
			builder.replace(mc.start() + i, mc.end() + i, "_"
					+ mc.group().toLowerCase());
			i++;
		}

		if ('_' == builder.charAt(0)) {
			builder.deleteCharAt(0);
		}
		return builder.toString();
	}

	private static String changeStyle(String str, boolean toCamel) {
		if (str == null || str.isEmpty())
			return str;
		if (toCamel) {
			String[] s = str.split("_");
			String temp = "";
			for (int i = 0; i < s.length; i++) {
				String m = s[i].substring(0, 1).toUpperCase()
						+ s[i].substring(1);
				temp += m;
			}
			return temp;
		} else {
			return camel4underline(str);
		}
	}

	/**
	 * 
	 * @param jdbcType
	 * @return
	 */
	private static String switchIt(String jdbcType) {
		return jdbc2objMap.get(jdbcType);
	}

	/**
	 * 得到某个表的所有字段信息
	 * 
	 * @param tableName
	 * @param conn
	 * @return xxx_source|状态|TINYINT
	 * @throws Exception
	 */
	private static List<String> getColumnsByTableName(String tableName,
			Connection conn) throws Exception {
		List<String> columns = new ArrayList<String>();
		ResultSet rSet = null;
		try {
			if (conn == null) {
				conn = getConnection();
			}
			DatabaseMetaData dbms = conn.getMetaData();
			rSet = dbms.getColumns(null, null, tableName, null);
			while (rSet.next()) {
				String columnName = rSet.getString("COLUMN_NAME");
				String remark = rSet.getString("REMARKS");
				String typeName = rSet.getString("TYPE_NAME");
				columnTypeSet.add(typeName);
				// System.err.println(columnName + "|" + remark + "|" +
				// typeName);
				columns.add(columnName + decollator + remark + decollator + typeName);
			}
			return columns;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	/**
	 * 得到 conn 数据库的 所有表名称
	 * 
	 * @param conn
	 * @return
	 * @throws Exception
	 */
	private static List<String> getAllTableName(Connection conn)
			throws Exception {
		List<String> tableNames = new ArrayList<String>();
		ResultSet rSet = null;
		try {
			if (conn == null) {
				conn = getConnection();
			}
			DatabaseMetaData dbms = conn.getMetaData();
			rSet = dbms.getTables(null, null, null, null);
			while (rSet.next()) {
				// System.out.println("talbeName :" + rSet.getString(3));
				String tableName = rSet.getString(3);
				tableNames.add(tableName);
			}
			return tableNames;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (rSet != null) {
				rSet.close();
			}
		}
	}

	/**
	 * 得到一个数据库连接
	 * 
	 * @return
	 */
	private static Connection getConnection() throws Exception {
		try {
			Class.forName(driver);
			Connection conn = DriverManager.getConnection(url, user,pass);
			return conn;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	private static Map<String, String> jdbc2objMap = new HashMap<String, String>();
	static {
		jdbc2objMap.put("CHAR", "String");
		jdbc2objMap.put("VARCHAR", "String");
		jdbc2objMap.put("LONGVARCHAR", "String");
		jdbc2objMap.put("TEXT", "String");
		jdbc2objMap.put("NUMERIC", "java.math.BigDecimal");
		jdbc2objMap.put("DECIMAL", "java.math.BigDecimal");
		jdbc2objMap.put("BIT", "boolean");
		jdbc2objMap.put("INT", "int");
		jdbc2objMap.put("INT UNSIGNED", "int");
		jdbc2objMap.put("TINYINT", "int");
		jdbc2objMap.put("TINYINT UNSIGNED", "int");
		jdbc2objMap.put("SMALLINT", "int");
		jdbc2objMap.put("TINYINT UNSIGNED", "int");
		jdbc2objMap.put("INTEGER", "int");
		jdbc2objMap.put("INTEGER UNSIGNED", "int");
		jdbc2objMap.put("BIGINT", "long");
		jdbc2objMap.put("BIGINT UNSIGNED", "long");
		jdbc2objMap.put("REAL", "float");
		jdbc2objMap.put("FLOAT", "double");
		jdbc2objMap.put("DOUBLE", "double");
		jdbc2objMap.put("BINARY", "byte[]");
		jdbc2objMap.put("VARBINARY", "byte[]");
		jdbc2objMap.put("LONGVARBINARY", "byte[]");
		jdbc2objMap.put("DATE", "java.util.Date");
		jdbc2objMap.put("DATETIME", "java.util.Date");
		jdbc2objMap.put("TIME", "java.util.Date");
		jdbc2objMap.put("TIMESTAMP", "java.util.Date");
	}

	public static void main(String[] args) throws Exception {
		Connection conn = null;
		try {
			init();
			conn = getConnection();
			List<String> tables = getAllTableName(conn);
			List<String> list = null;
			if(tables!=null && !tables.isEmpty()){
			for(String table : tables){
				if(table.startsWith("xxx_")){
						list = getColumnsByTableName(table, conn);
						getJavaFile(changeStyle(table,true), list);
					}
				}
			}
			if(columnTypeSet!=null && !columnTypeSet.isEmpty()){
				for (Iterator iterator = columnTypeSet.iterator(); iterator.hasNext();) {
					String string = (String) iterator.next();
					System.err.println(string);
					
				}
			}
			//System.out.println(changeStyle("xxx", false));
		} catch (Exception e) {
		} finally {
			conn.close();
		}
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics