`

通过JDBC获取表结构生成javaBean

阅读更多

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

 

第一步建立jdbc数据库连接

/**
	 * 获取连接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			String url = "******";
			String user = "******";
			String password = "******";
			Properties properties = new Properties();
			properties.put("user", user);
			properties.put("password", password);
			properties.put("remarksReporting","true");//想要获取数据库结构中的注释,这个值是重点
			return DriverManager.getConnection(url,properties);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

 第二步:获取表结构信息

/**
	 * 获取表结构
	 * @param tableName
	 * @return
	 */
	public static List<ColumnModel> getTableStructure(String tableName){
		List<ColumnModel> columnModelList = new ArrayList<ColumnModel>();
		try {
			//TODO 表相关
			//ResultSet tableSet = metaData.getTables(null, "%",tableName,new String[]{"TABLE"}); 
			//TODO 字段相关
			ResultSet columnSet = getConnection().getMetaData().getColumns(null,"%",tableName,"%");
			ColumnModel columnModel = null;
			while(columnSet.next()){
				columnModel = new ColumnModel();
				columnModel.setColumnName(columnSet.getString("COLUMN_NAME"));
				columnModel.setColumnSize(columnSet.getInt("COLUMN_SIZE"));
				columnModel.setDataType(columnSet.getString("DATA_TYPE"));
				columnModel.setRemarks(columnSet.getString("REMARKS"));
				columnModel.setTypeName(columnSet.getString("TYPE_NAME"));
				String columnClassName = ColumnTypeEnum.getColumnTypeEnumByDBType(columnModel.getTypeName());
				String fieldName = getFieldName(columnModel.getColumnName());
				String fieldType = Class.forName(columnClassName).getSimpleName();
				columnModel.setFieldName(fieldName);
				columnModel.setColumnClassName(columnClassName);
				columnModel.setFieldType(fieldType);
    			columnModelList.add(columnModel);
    			//System.out.println(columnModel.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return columnModelList;
	}

	/**
	 * 将数据库字段转换成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();
	}
	
	

	public static void main(String[] args) {
		getTableStructure("T_user");
	}

 第三,生成javaBean

/**
	 * 从表结构中去生成javabean
	 * @param structureList
	 * @param beanName
	 * @return
	 */
	public static String genJavaBeanFromTableStructure(List<ColumnModel> columnModelList,String beanName){
		StringBuffer sb = new StringBuffer();
		try {
			sb.append("public class "+toFirstCharUpCase(beanName)+" {\r\n");
			for (ColumnModel columnModel : columnModelList) {
				if(StringUtils.isNotBlank(columnModel.getRemarks())){
					sb.append("	//"+columnModel.getRemarks()+" \r\n");
				}
				sb.append("	private "+columnModel.getFieldType()+" "+columnModel.getFieldName()+";\r\n");
			}
			sb.append("\r\n");
			//get set
			for (ColumnModel columnModel : columnModelList) {
				sb.append(
						"\tpublic String get"+toFirstCharUpCase((String) columnModel.getFieldName())+"() {\r\n" +
						"\t\treturn "+columnModel.getFieldName()+";\r\n" + 
						"\t}\r\n" + 
						"\r\n" + 
						"\tpublic void set"+toFirstCharUpCase((String) columnModel.getFieldName())+"(String "+columnModel.getFieldName()+") {\r\n" + 
						"\t\t"+columnModel.getFieldName()+" = "+columnModel.getFieldName()+";\r\n" + 
						"\t}\r\n\r\n");
			}
			sb.append("}\r\n");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	/**
	 * 将首字母变大写
	 * @param str
	 * @return
	 */
	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();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<ColumnModel> columnModelList = JdbcUtil.getTableStructure("T_User");
		System.out.println(genJavaBeanFromTableStructure(columnModelList,"User"));

	}

 列模型:ColumnModel.java

package com.pingan.bean;

/**
 * 列模型
 * @author LUSHUIFA
 */
public class ColumnModel {
	private String columnName;
	private String dataType;
	private String typeName;
	private String columnClassName;
	private String fieldName;
	private String fieldType;
	private int columnSize;
	private String columnDef;
	private String remarks;

	public String getColumnName() {
		return columnName;
	}

	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}

	public String getDataType() {
		return dataType;
	}

	public void setDataType(String dataType) {
		this.dataType = dataType;
	}

	public String getTypeName() {
		return typeName;
	}

	public void setTypeName(String typeName) {
		this.typeName = typeName;
	}

	public int getColumnSize() {
		return columnSize;
	}

	public void setColumnSize(int columnSize) {
		this.columnSize = columnSize;
	}

	public String getRemarks() {
		return remarks;
	}

	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}

	@Override
	public String toString() {
		return "ColumnModel [columnName=" + columnName + ", dataType="
				+ dataType + ", typeName=" + typeName + ", columnClassName="
				+ columnClassName + ", fieldName=" + fieldName + ", fieldType="
				+ fieldType + ", columnSize=" + columnSize + ", columnDef="
				+ columnDef + ", remarks=" + remarks + "]";
	}

	public String getColumnDef() {
		return columnDef;
	}

	public void setColumnDef(String columnDef) {
		this.columnDef = columnDef;
	}

	public String getColumnClassName() {
		return columnClassName;
	}

	public void setColumnClassName(String columnClassName) {
		this.columnClassName = columnClassName;
	}

	public String getFieldName() {
		return fieldName;
	}

	public void setFieldName(String fieldName) {
		this.fieldName = fieldName;
	}

	public String getFieldType() {
		return fieldType;
	}

	public void setFieldType(String fieldType) {
		this.fieldType = fieldType;
	}

}

 数据类型枚举:ColumnTypeEnum.java

package com.pingan.Enum;


/**
 * 数据库类型枚举
 * @author LUSHUIFA
 *
 */
public enum ColumnTypeEnum {
	 VARCHAR2("VARCHAR2","java.lang.String"),
	 NUMBER("NUMBER","java.lang.Double"),
	 DATE("DATE","java.lang.String"),
	 CHAR("CHAR","java.lang.String");
     
     private String dbType;
     private String javaType;
     
     ColumnTypeEnum(String dbType,String javaType){
    	 this.dbType = dbType;
    	 this.javaType = javaType;
     }
     
     public static String getColumnTypeEnumByDBType(String dbType){
         for(ColumnTypeEnum columnTypeEnum:ColumnTypeEnum.values()){
             if(columnTypeEnum.getDbType().equals(dbType)){
                 return columnTypeEnum.getJavaType();
             }
         }
		return "";
     }

	public String getDbType() {
		return dbType;
	}

	public void setDbType(String dbType) {
		this.dbType = dbType;
	}

	public String getJavaType() {
		return javaType;
	}

	public void setJavaType(String javaType) {
		this.javaType = javaType;
	}
}

 

0
0
分享到:
评论
3 楼 zyshen2010 2016-07-26  
2 楼 masuweng 2016-07-22  
1 楼 552jun 2016-07-21  
一切皆对象
   导入类、方法、方法参数、属性、注解、注解参数等都可以定义相应的类 .

相关推荐

    根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第9版)

    于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件,其理念是弱化在开发阶段对数据库的操作,无需先建表再开发,可直接编写实体类和业务代码,项目启动后自动创建表和维护表结构。内置大量常用方法,支持灵活的条件...

    (Jsp+JavaBean+Struts+JDBC)学生信息管理系统

    本系统基于Java平台,采用设计模式:MVC(模型--视图--控制),采用的技术:Jsp+JavaBean+Struts+JDBC,数据库:MySQL Struts采用Struts 1.2 版本,MySQL采用MySQL5.0 系统特色: 1,栏目无限级分类,形成树型结构,可以...

    JDBC 3.0数据库开发与设计

    3.3.3 获取数据库中表的信息 3.3.4 获取表中各列的信息 3.3.5 获取索引的信息 3.3.6 获取数据库中各种信息的实例 3.4 Statement对象 3.4.1 Statement对象使用基础 3.4.2 获取所有记录 3.4.3 获取指定记录 ...

    Java项目源码之网上购物系统的实现(JavaBean+Servlet+jsp).zip

    数据库优化:合理设计数据库表结构,添加索引以提高查询效率。 页面缓存:利用页面缓存技术提高页面加载速度,减轻服务器压力。 网上购物系统的实现旨在为用户提供便捷、安全的在线购物体验,帮助用户方便快捷地浏览...

    javaweb课程管理系统

    采用JSP+JDBC+JavaBean+Servlet+EL+Ajax+DAO+Service+Json+jquery技术的MVC三层结构,系统由七个表构成(生成sql文档已在压缩包里)。 1、项目的用户类型有学生、教师和管理员 3 种类型 2、用户功能: 学生和教师能对...

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    6.2.1 JDBC核心类结构 124 6.2.2 驱动程序管理类:DriverManager 125 6.2.3 数据库连接类:Connection 128 6.2.4 SQL声明类:Statement 130 6.2.5 查询结果类:ResultSet 133 6.3 JDBC数据库操作实例 136 6.3.1 新建...

    Java数据库编程宝典2

    第12章 通过servlet和JSP使用JDBC DataSource 12.1 使用JDBC DataSource 12.2 使用servlet创建动态Web页面 12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建...

    Java数据库编程宝典4

    第12章 通过servlet和JSP使用JDBC DataSource 12.1 使用JDBC DataSource 12.2 使用servlet创建动态Web页面 12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建...

    Java数据库编程宝典1

    第12章 通过servlet和JSP使用JDBC DataSource 12.1 使用JDBC DataSource 12.2 使用servlet创建动态Web页面 12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建...

    Java数据库编程宝典3

    第12章 通过servlet和JSP使用JDBC DataSource 12.1 使用JDBC DataSource 12.2 使用servlet创建动态Web页面 12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建...

    Servlet与JSP核心编程第2版

    18.4 通过jdbc连接来测试数据库 18.5 建立music表 第19章 html表单的创建和处理 19.1 html表单如何传输数据 19.2 form元素 19.3 文本控件 19.4 按钮 19.5 复选框和单选按钮 19.6 组合框和列表框 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例235 动态生成JavaBean 295 实例236 复制JavaBean属性 296 实例237 动态排序JavaBean 298 10.5 其他Commons组件简介 299 实例238 优雅的JDBC代码 299 实例239 结果集与Bean列表 301 实例240 编写MD5查看器 302 ...

    Java数据编程指南

    Enterprise JavaBeans与分布式应用程序 第19章 Enterprise JavaBeans Enterprise JavaBean体系结构 一个简单的Enterprise JavaBean 会话Beaus 面向对象与关系模型 实体beans 数据映射 EJB...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    13.6 根据数据库表生成XML和POJO 13.6.1 生成对应的XML 13.6.2 生成POJO 13.7 编写网上调查系统的DAO 13.7.1 用户DAO接口UserDAO.java 13.7.2 调查题目DAO接口SurveyDAO.java 13.7.3 调查项目DAO接口SurveyOptionDAO...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    13.6 根据数据库表生成XML和POJO 13.6.1 生成对应的XML 13.6.2 生成POJO 13.7 编写网上调查系统的DAO 13.7.1 用户DAO接口UserDAO.java 13.7.2 调查题目DAO接口SurveyDAO.java 13.7.3 调查项目DAO接口SurveyOptionDAO...

Global site tag (gtag.js) - Google Analytics