`

用java语言模拟hibernate 表与java bean 的映射机制

 
阅读更多
最近学习hibernate,为了更加理解ORM思想。用java 语言模拟了从数据库表到java bean中的映射,通过数据库的字段信息生成对应的javabean.

com.xxg.dao 包下的类 。该类主要是得到数据库表的各字段信息,并封装到数据库字段类型bean中,并添加到list中。
package com.xxg.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.xxg.bean.TableType;

public class DateBacDao {
	
	
	private ArrayList<TableType> list; 
	
	   //根据数据库的表名得到该数据库表对应的每一个字段的名字以及类型信息
	public  ArrayList<TableType>  gainDateFromOracle (String tableName) throws SQLException
	{
		list = new ArrayList<TableType>();
		Connection conn = null;
		conn = DBConn.getConnection();
		Statement stat =null; 
		stat = conn.createStatement();
		String sql = "select *from "+tableName;
		ResultSet rs = null;
		rs = stat.executeQuery(sql);
		ResultSetMetaData rsmd = rs.getMetaData();//得到结果集字段信息
		int columNumber = rsmd.getColumnCount();//得到表的总列数
		
		//遍历每一列,得到每一列的属性名称,属性类型然后将其封装到tabletype 中
		for(int i=1;i<=columNumber;i++){
	    TableType Tt = new TableType(rsmd.getColumnName(i),rsmd.getColumnTypeName(i));
	     
	    list.add(Tt);
	    
		}
		DBConn.closeAll(rs, stat, conn);
		return list;
		
		
	}

}


数据表中基本字段信息bean
package com.xxg.bean;

public class TableType {
	
	
	private String columName;
	private String columType;
	
	public String getColumName() {
		return columName;
	}
	public void setColumName(String columName) {
		this.columName = columName;
	}
	public String getColumType() {
		return columType;
	}
	public void setColumType(String columType) {
		this.columType = columType;
	}
	public TableType( String columName, String columType) {
		super();
		
		this.columName = columName;
		this.columType = columType;
	}
	

	

}

生成数据库表到实体javabean 的映射类
public class JavaToFile {

	
	private static Map<String, String> javaTypeMappingOracle = new HashMap<String, String>();
	private DateBacDao dbc ;
	
	static{
		
		javaTypeMappingOracle.put("NUMBER", "int");
		javaTypeMappingOracle.put("VARCHAR2", "String");
		javaTypeMappingOracle.put("DATE", "Date");
	}
	//public static String t_user= "t_user";
	
	public static void main(String[] args) throws SQLException {
		
		//new JavaToFile().diverseFistToUppcase("x");
		new JavaToFile().writeJavaToFile("t_bill");
	
	}

	
	     // 生成属性
	public String gainField(String name) throws SQLException{
		
		//System.out.println("begiain");
	    String str = "";
	    dbc = new DateBacDao();
	    ArrayList<TableType> list = new ArrayList<TableType>();
	    list = dbc.gainDateFromOracle(name);
	    //System.out.println(list.size());
	    for(int i=0;i<list.size();i++){
	     
	   // System.out.println(str);
	    str = str+ "\t private " + javaTypeMappingOracle.get(list.get(i).getColumType())+" "+list.get(i).getColumName().toLowerCase()+";\n";
	    }
	    
	   // System.out.println(str);
	    return str;
	}
	
	  //生成set方法
	public String gainSet(String name) throws SQLException
	{
		    String str = "";
		    dbc = new DateBacDao();
		    ArrayList<TableType> list = new ArrayList<TableType>();
		    list = dbc.gainDateFromOracle(name);
		    for(int i=0;i<list.size();i++){
		    	
		     str = str+"\t public  void  "+" set"+
		     diverseFistToUppcase(list.get(i).getColumName().toLowerCase())+
		     "("+javaTypeMappingOracle.get(list.get(i).getColumType())+"  "+list.get(i).getColumName().toLowerCase()+
		       ") {"+"\n "+" \tthis."+list.get(i).getColumName().toLowerCase()+" = "+list.get(i).getColumName().toLowerCase()+
		        ";\n"+"\t}\n";	
		    }
		//System.out.println(str);
		return str;
	}
	   
	       //生成get方法
	public String gainGet(String name) throws SQLException
	{
		String str = "";
		dbc = new DateBacDao();
		ArrayList<TableType> list = new ArrayList<TableType>();
		list = dbc.gainDateFromOracle(name);
		for(int i=0;i<list.size();i++){
		
		str = str+"\tpublic"+" "+
		javaTypeMappingOracle.get(list.get(i).getColumType())+" "
		+diverseFistToUppcase(list.get(i).getColumName().toLowerCase())+"( )"+"   {"+
		"\n\n\t   return"+ "  "+list.get(i).getColumName().toLowerCase()+" ;\t}\n\n"; 	
		}
		//System.out.println(str);
		return str;
	}
	  
	      //   拼装java 文件
	
	public String bornJavaFile(String tableName) throws SQLException{
		
		String javafile = "";
	  javafile = "public  class " +	" "+diverseFistToUppcase(tableName)+"{\n"+
		
			  gainField(tableName)+"\n"+gainGet(tableName)+"\n"+gainSet(tableName)+"\n}";
		
		//System.out.println(javafile);
		return javafile;
	}
	
	  public void writeJavaToFile(String name) throws SQLException{
		  
		   try {
			FileWriter  fw = new FileWriter(new File(diverseFistToUppcase(name)+".java"));
			String str = bornJavaFile(name);
			//System.out.println(str);
			BufferedWriter bfw = new BufferedWriter(fw);
			bfw.write(str);
			
			bfw.close();
			fw.close();
			
			System.out.println("success saving ");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		   
	  }
	
	        //将字符串转换成首字母大写
	public String diverseFistToUppcase(String str){
		
		  String st = "";
		 if(str.length()>=2){
			
		  st = (str.charAt(0)+"").toUpperCase() +str.substring(1);	
			
		}
		 else if(str.length()==1){
			 
		  st = (str.charAt(0)+"").toUpperCase();	 
		 }
		//System.out.println(st);
		return st;
	}
	
}


分享到:
评论

相关推荐

    模拟hibernate根据表生成Java bean文件

    本话题聚焦于如何模拟Hibernate的功能,自动生成Java Bean文件,这在开发过程中可以极大地提高效率,尤其是在处理大量数据库表结构时。以下是关于这个主题的详细知识: 1. **Hibernate简介**: Hibernate是一个...

    Hibernate模拟

    Hibernate是一个开源的ORM框架,它提供了一种在Java应用中操作数据库的便捷方式,通过将Java对象与数据库表进行映射,实现了数据的透明访问。这使得开发者可以避免编写大量的SQL语句,专注于业务逻辑的实现。 **二...

    java源码包---java 源码 大量 实例

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的实例源码...

    控制反转应用,模拟Hibernate

    在标题"控制反转应用,模拟Hibernate"中,我们讨论的是如何使用Java编程来模拟Hibernate中的IoC概念。Hibernate是一个流行的对象关系映射(ORM)框架,它在处理数据库操作时,利用IoC来管理对象的生命周期和依赖关系...

    Java spring structs hibernate整合示例代码

    3. **Hibernate框架**:Hibernate用于处理数据库操作,通过实体类(Entity)映射数据库表,使用`@Entity`、`@Table`等注解定义表结构,`@Id`标识主键,`@GeneratedValue`指定主键生成策略。Hibernate的Session接口是...

    轻量级Java_EE企业应用实战_Struts_2+Spring_3+Hibernate整合开发_第3版

    Hibernate通过配置文件或注解将Java对象与数据库表进行映射,提供了透明的数据存取接口,包括CRUD(创建、读取、更新、删除)操作以及查询语言HQL。 将这三个框架整合在一起,可以构建出一个完整的、基于MVC模式的...

    模拟滴滴打车Java项目

    Hibernate通过ORM(对象关系映射)技术,将Java对象与数据库表对应起来,简化了数据库操作,同时也提供了强大的查询语言HQL和 Criteria API。 除了SSH框架,项目可能还会涉及以下知识点: 1. 数据库设计:为了支持...

    JAVA EE Eclipse struts hibernate spring 整合应用案例

    Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用程序与数据库的交互。通过Hibernate,开发者可以使用面向对象的编程方式来操作数据库,无需关心底层SQL语句,大大降低了数据访问层的复杂性。 Spring框架...

    基于Java的实例开发源码-EJB 模拟银行ATM流程及操作源代码.zip

    它们通常映射到数据库表,使用JPA(Java Persistence API)或Hibernate等ORM(对象关系映射)工具进行管理。在这个项目中,实体bean可能会包含账户编号、余额等属性,并提供存取款、查询余额等操作。 4. **JPA和...

    使用Struts + Spring + Hibernate完成用户登陆笔记

    * Hibernate是一个ORM(Object-Relational Mapping)框架,用于将Java对象与关系数据库进行映射。 * Hibernate框架提供了一个灵活的框架来实现数据持久化和对象关系映射。 * Hibernate框架支持多种关系数据库,包括...

    java源码包2

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的...

    java源码包3

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的...

    模拟当当网java web源代码

    【描述】"模拟当当网的java web开发的源代码"表明该项目使用了Java Web技术栈,涵盖了服务器端编程、数据库交互、前端展示等多个方面。它可能包括用户登录注册、商品浏览、购物车管理、订单处理等功能模块,帮助...

    Spring与Hibernate结合使用

    - **对象关系映射**:Hibernate将数据库中的表映射为Java对象,反之亦然,使得开发者可以使用面向对象的方式来操作数据库。 - **SessionFactory与Session**:SessionFactory是线程安全的,用于创建Session实例,...

    JAVA模拟题笔记,亲自整理

    【JAVA模拟题笔记】 在Java编程中,模拟题是一个有效的学习和复习工具,涵盖了语言的基础概念、高级特性以及常见的设计模式。以下是一些基于提供的题目所涉及的关键知识点: 1. **线程控制**: - 线程的运行可以...

    SpringAOP整合Hibernate并使用事务(模拟买书的过程)

    其次,Hibernate是一个流行的ORM(对象关系映射)工具,它允许Java开发者使用对象模型而不是SQL来操作数据库。在Spring框架中,我们可以利用Hibernate SessionFactory和Session接口进行数据持久化操作。 集成Spring...

    类似百度地图的java实现

    Hibernate通过ORM(对象关系映射)将Java对象与数据库表对应,减少了手动编写SQL的负担。在这个项目中,Hibernate可能会用来操作公交线路、站点等数据。 **3. 地图API** 百度地图API是百度提供的开放接口,允许...

    Spring与Hibernate框架整合案例之数据库添加数据(经典入门案例,适合初学者,不看后悔)

    4. **实体类与数据库映射**:在Java中,为每个数据库表创建一个对应的实体类,使用Hibernate的注解来指定主键(@Id)、属性与列的映射(@Column)等。还可以使用@OneToMany、@ManyToOne、@OneToOne等注解处理关联...

    基于Struts2+Spring+Hibernate+MySql的注册登录系统

    2. 数据访问对象(UserDAO.java):使用Hibernate API与数据库交互,实现用户的增删查改操作。 3. 用户服务层(UserService.java):封装业务逻辑,调用DAO层操作,例如注册新用户、验证登录等。 4. Struts2 Action类(如...

    Javaframework框架笔记

    Hibernate是一个强大的Java持久层框架,它简化了数据库操作,通过对象关系映射(ORM)技术将Java对象与数据库表进行绑定。Hibernate提供了丰富的API,可以进行CRUD操作,支持HQL(Hibernate查询语言)和 Criteria ...

Global site tag (gtag.js) - Google Analytics