`

通过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  
一切皆对象
   导入类、方法、方法参数、属性、注解、注解参数等都可以定义相应的类 .

相关推荐

    SqlToJavaBean_javabean_根据表结构生成javabean_生成javabean_

    "SqlToJavaBean_javabean_根据表结构生成javabean_生成javabean_"这个标题暗示了一个工具或库,它能够自动化地根据数据库中的表结构生成对应的JavaBean类,从而减少开发者的手动编码工作。 描述中提到"根据数据表...

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

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

    根据数据库表结构生成javabean的Eclipse插件

    标题中的“根据数据库表结构生成javabean的Eclipse插件”是指一种Eclipse插件开发成果,它的主要功能是自动生成Java Bean类,这些Bean类对应于数据库中的表结构,便于开发者在Java应用程序中方便地操作数据库。...

    JPA_由数据库生成JavaBean

    - 选择对应的数据库连接,然后在表列表中选择你想要映射的表,JPA会自动生成对应表结构的Java实体类。 4. **自定义生成的JavaBean**: - 默认生成的JavaBean可能不完全满足需求,比如字段注解、访问修饰符等。...

    javaBean自动生成工具,jdbc连接池封装

    为了解决这个问题,出现了JavaBean自动生成工具,它们可以根据数据库中的表结构自动创建对应的JavaBean类,大大提高了开发效率。 标题中提到的"javaBean自动生成工具"就是这类工具的一个实例,它能够基于MySQL...

    mysql,sqlserver,Oracle 数据库生成javabean小工具

    本工具“mysql, sqlserver, Oracle 数据库生成javabean小工具”正是为了解决开发者手动编写javabean时的繁琐工作,它能够自动根据数据库中的表结构生成对应的javabean文件。 1. **数据库连接**: 工具支持三种主流...

    mybatis逆向生成javaBean

    MyBatis逆向生成JavaBean是一种高效开发工具,它能够帮助开发者自动生成Java实体类(Bean),这些实体类对应数据库中的表结构,大大减少了手动编写Java代码的工作量。这一过程通常被称为MyBatis Generator(MBG)的...

    数据库直接生成javabean文件工具

    总的来说,数据库直接生成JavaBean文件的工具是Java开发中的利器,它通过自动化的方式减少了编码工作量,提高了代码质量,促进了开发过程的标准化,对于快速构建基于数据库的应用程序非常有帮助。开发者可以根据实际...

    使用JavaScript自动生成javaBean代码和mapper代码

    1. 数据获取:你需要获取到 JavaBean 的字段信息,这可以来自数据库的表结构描述,或者 JSON 对象。对于数据库,你可以使用 JDBC 或其他库来执行 SQL 查询,获取表的列名和类型。 2. 字段转换:将数据库的列信息...

    数据库课程作业,基于jsp + jdbc + servlet + javabean的学生管理系统.zip

    5. 数据库脚本:创建学生管理系统的数据库表结构。 6. 配置文件:如web.xml,定义Servlet的映射和应用配置。 通过完成这样的项目,学生可以深入理解Web应用开发流程,包括用户交互、数据处理、数据库操作等关键环节...

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

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

    jsp+javabean对数据库表的操作

    通过JDBC接口,我们能够创建、读取、更新和删除数据库表中的数据。在实际开发中,为了提高代码的可维护性和复用性,通常会将数据库操作封装到单独的服务类或DAO(Data Access Object)中,再由JavaBean调用这些服务...

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

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

    java 基于数据库的代码自动生成工程

    一旦配置完成,你可以直接运行该类的main方法,系统会根据数据库中的表结构自动生成对应的Java Bean、Mapper、Service、Controller等文件,以及React的组件代码。 Java Bean是Java对象模型的表示,它通常包含了...

    留言板jsp +javabean

    3. JSP页面通过`&lt;form&gt;`标签的`action`属性指定的URL,调用后台的JavaBean(可能是通过Servlet或Filter)处理请求。 4. JavaBean接收到数据后,可能进行验证,然后将新留言保存到数据库。 5. 同时,JavaBean会从...

    mybatis-generator自动生成工具

    - **DomModelGenerator**:生成JavaBean模型类,对应于数据库中的表。 - **JavaClientGenerator**:生成DAO接口,提供了对数据库操作的方法。 - **SqlMapGenerator**:生成Mapper XML文件,其中包含了SQL语句和...

    基于JSP+Servlet+JavaBean+JDBC的学生选课系统,包括管理课程,学生选课和学生管理.zip

    - **数据库设计**:为了支持学生选课系统,需要设计合理的数据库结构,可能包括学生表、课程表、选课关系表等,以及相应的主键、外键约束,以保持数据的一致性和完整性。 - **用户认证和授权**:系统可能包含登录和...

    jsp+servlet+javabean_教学管理系统

    综上所述,"jsp+servlet+javabean_教学管理系统"是一个典型的Java Web应用,它结合了前端展示、后端处理和数据存储的功能,通过MVC模式实现了良好的代码结构,为教学管理工作提供了高效、便捷的平台。

    jsp+ javaBean+Mysql简易留言板

    通过JSP的内置对象(如request、response、session等),可以获取和响应用户的数据,实现与用户的交互。 **JavaBean**: JavaBean是一种符合特定规范的Java类,它是Java组件模型的一部分,常被用作Web应用程序中的...

Global site tag (gtag.js) - Google Analytics