首页 > 数据库技术 > 详细

通过JDBC获取表结构生成javaBean

时间:2016-07-24 02:07:07      阅读:418      评论:0      收藏:0      [点我收藏+]

闲着没事,写了一个从表生成javabean的工具类,大家可以在此基础进行发散。

?

第一步建立jdbc数据库连接

/**
	 * 获取连接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			String url = "jdbc:oracle:thin:@10.20.128.115:1526:d0rsapp";
			String username = "elisdata";
			String password = "ilovetong";
			return DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

?第二步:获取表结构信息

/**
	 * 获取某个表的表结构
	 * @param tableName
	 * @return
	 */
	public static List<Map<String,Object>> getTableStructure(String tableName){
		List<Map<String,Object>> structureList = new ArrayList<Map<String,Object>>();
		try {
			DatabaseMetaData metaData = getConnection().getMetaData();
			//获取数据库产品类型
			String databaseProductName = metaData.getDatabaseProductName();
			//结构获取方式
			Statement statement = getConnection().createStatement();
			ResultSet rs = statement.executeQuery("select * from "+tableName);
			ResultSetMetaData rsmd =  rs.getMetaData();
			System.out.println(rsmd.getColumnCount());
			Map<String,Object> structure = null;
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				structure = new HashMap<String, Object>();
				String columnName = rsmd.getColumnName(i+1);
				String fieldName = getFieldName(columnName);
				String className = rsmd.getColumnClassName(i+1);
				String fieldType = Class.forName(className).getSimpleName();
				fieldType = getFieldType(fieldType);
				structure.put("columnName", columnName);
				structure.put("fieldName", fieldName);
				structure.put("fieldType", fieldType);
				structure.put("columnClassName", rsmd.getColumnClassName(i+1));
				structure.put("columnDisplaySize", rsmd.getColumnDisplaySize(i+1));
				structureList.add(structure);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return structureList;
	}
	
	private static String getFieldType(String fieldType) {
		if("Timestamp".equals(fieldType)){
			return "String"; 
		}else if("BigDecimal".equals(fieldType)){
			return "BigDecimal";
		}
		return "String";
	}

	/**
	 * 将数据库字段转换成bean属性
	 * @param columnName
	 * @return
	 */
	private static String getFieldName(String columnName) {
		char[]  columnCharArr = columnName.toLowerCase().toCharArray();
		StringBuffer sb = new StringBuffer();
		int ad = -1;
		for (int i = 0; i < columnCharArr.length; i++) {
			  char cur = columnCharArr[i];
			  if(cur==‘_‘){
				  ad = i;
			  }else{
				  if((ad+1)==i&&ad!=-1){
					  sb.append(Character.toUpperCase(cur));
				  }else{
					  sb.append(cur);
				  }
				  ad=-1;
			  }
		}
		return sb.toString();
	}

?第三,生成javaBean

/**
	 * 从表结构中去生成javabean
	 * @param structureList
	 * @param beanName
	 * @return
	 */
	public static String genJavaBeanFromTableStructure(List<Map<String,Object>> structureList,String beanName){
		StringBuffer sb = new StringBuffer();
		try {
			sb.append("public class "+toFirstCharUpCase(beanName)+" {\r\n");
			for (Map<String, Object> structure : structureList) {
				sb.append("	private "+structure.get("fieldType")+" "+structure.get("fieldName")+";\r\n");
			}
			sb.append("\r\n");
			//get set
			for (Map<String, Object> structure : structureList) {
				sb.append(
						"\tpublic String get"+toFirstCharUpCase((String) structure.get("fieldName"))+"() {\r\n" +
						"\t\treturn "+structure.get("fieldName")+";\r\n" + 
						"\t}\r\n" + 
						"\r\n" + 
						"\tpublic void set"+toFirstCharUpCase((String) structure.get("fieldName"))+"(String "+structure.get("fieldName")+") {\r\n" + 
						"\t\t"+structure.get("fieldName")+" = "+structure.get("fieldName")+";\r\n" + 
						"\t}\r\n\r\n");
			}
			sb.append("}\r\n");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	public static String toFirstCharUpCase(String str){
		char[]  columnCharArr = str.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < columnCharArr.length; i++) {
			  char cur = columnCharArr[i];
			  if(i==0){
				  sb.append(Character.toUpperCase(cur));
			  }else{
				  sb.append(cur);
			  }
		}
		return sb.toString();
	}

?最后:测试结果

public static void main(String[] args) {
		System.out.println(getConnection());
		List<Map<String,Object>> structureList = getTableStructure("t_user");
		String beanName = getFieldName("t_user".replace("t_", ""));
		System.out.println(genJavaBeanFromTableStructure(structureList,beanName));
	}

?

通过JDBC获取表结构生成javaBean

原文:http://lushuifa.iteye.com/blog/2312674

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!