`
唐木白
  • 浏览: 20158 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

Java反射机制实现Hibernate

阅读更多

每次开发项目时,在做数据库开发时,对于不同类都有对应的Dao类,这就要要编写大量的Dao类,其中大多是代码堆砌,但有时我们要完成特定的操作,开发独立的Dao类是必须的,但如果只是实现数据的插入、读取、更新、删除,那么如果有一个通用的Dao类可以对数据库中的所有表进行操作,可以免去编写大量同质代码的负担。

 

一. Java反射机制

Reflection是Java被视为动态语言的一个关键性质,这个机制允许程序在运行时通过Reflection APIs却任何一个一直名称的的class的内部信息,包括modifiers、superclass、实现的interfaces、fields和methods等所有信息,并可于运行时改变fields内容和调用methods。

 

二.Java反射机制主要提供了以下功能

    1)在运行时判断人一个对象所属的类

    2)在运行是构造任意一个类的对象

    3)在运行时判断任意一个类所具有的成员变量和方法

    4)在运行时调用任意一个对象的方法

 

利用Java的反射机制就可以解决之前必须对知道每个类的属性和方法来调用的问题。就可以实现一个山寨的hibernate

 

三.配置

 

首先,还是来配置项目

 

 这就是一使用了Hibernate的项目的结构,hibernate.cfg.xml和每个pojo类的xml配置文件,不过我们不需要Hibernate所需的配置包,因为我们要自己来实现它。

 

<hibernate-configuration>
	<session-factory>
		
		<property name="show_sql">true</property>	<!--让hb在运行时显示实际执行的sql语句 -->
		
		<property name="format_sql">true</property>	<!-- 使显示的sql格式化-->
		
		<property name="dialect">					<!-- 设定sql方法,使用的是mySQL -->
			org.hibernate.dialect.MySQLDialect
		</property>
		
		<property name="connection.driver_class">	<!-- JDBC驱动类的名字 -->
			com.mysql.jdbc.Driver
		</property>
		
		<property name="connection.url">			<!--数据库连结串配置 -->
			jdbc:mysql://localhost:3306/twblog
		</property>
		<!--数据库用户名配置 -->
		<property name="connection.username">root</property>
		<!-- 数据库密码配置 -->
		<property name="connection.password">mysql</property>
		<!--  pojo类的配置文件 -->
		<mapping resource="pojo/Userinfo.hbm.xml" />
		<mapping resource="pojo/Blog.hbm.xml" />
	</session-factory>
</hibernate-configuration>

用到的工具就是mysql-connector(这是JDBC必须的)和dom4(用来解析xml文件)

 

DocumentReader

 

   用来读取xml文件返回Document对象

public class DocumentReader {
	/**
	 * 
	 * @param url XML文件路径
	 * @return Document对象
	 * @throws DocumentException
	 */
	public static Document read(String url) throws DocumentException{
		SAXReader reader=new SAXReader();
		Document document=reader.read(new File(url));
		return document;
	}
}

 

Connect2Database

   

    连接数据库

public class Connect2Database {
	private static Connection connection;
	private static List<String> resources=new ArrayList();      //存放pojo类配置文件路径的队列
	
	public static Connection getConnection(){
		return connection;
	}
	
	
	static{
		try {
			Document cfgDoc=DocumentReader.read("main/src/hibernate.cfg.xml");
			Element root=cfgDoc.getRootElement();
			Element element=root.element("session-factory");
			String forname="";
			String user="";
			String url="";
			String psw="";
			for(Iterator i=element.elementIterator();i.hasNext();){
				element=(Element)i.next();
				Attribute attr=element.attribute(0);
				if(attr.getText().equals("connection.driver_class"))
					forname=element.getStringValue().trim();
				else if(attr.getText().equals("connection.url"))
					url=element.getStringValue().trim();
				else if(attr.getText().equals("connection.username"))
					user=element.getStringValue().trim();
				else if(attr.getText().equals("connection.password"))
					psw=element.getStringValue().trim();
				else if(attr.getName().equals("resource")){
					resources.add(attr.getValue());
				}
			}
			Class.forName(forname);
			connection=java.sql.DriverManager.getConnection(url, user, psw);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	public static List<String> getResources() {
		return resources;
	}
}

 

这样JDBC的配置就完成了

 

 

其中关键是dom4j api的使用,遍历xml节点。

分享到:
评论

相关推荐

    java反射机制详解与应用.pdf

    * 实现动态代理:Java 反射机制可以用来实现动态代理,例如在 Hibernate 框架中。 Java 反射机制的主要方法包括: * getClass():获取当前对象的 Class 对象。 * Class.forName():获取指定名称的 Class 对象。 * ...

    java反射机制实现例子

    下面是一个简单的Java反射机制的实现例子: ```java import java.lang.reflect.Field; public class ReflectionExample { private String privateField = "默认值"; public static void main(String[] args) ...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    Java反射机制学习(二)

    这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...

    java 反射机制例子

    ### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...

    Java反射机制源码

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改私有成员,这为实现元编程和框架设计...

    java反射机制讲解

    Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...

    java反射机制,很安逸.不要错过

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

    java反射机制PPT

    Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...

    java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型)并调用方法,创建对象,甚至...

    Java反射机制学习总结

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...

    java反射机制原理

    Java反射机制是Java编程语言中的一个核心特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这一机制使得Java具备了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用方法和访问...

Global site tag (gtag.js) - Google Analytics