spirng和hibernate
创立Spring配置文件
spring-hibernate.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><bean id="myDataSource" > <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> <property name="username" value="root"/> <property name="password" value="root"/></bean>?</beans>
?上面bean定义了一个类型'org.apache.commons.dbcp.BasicDataSource'的data-source. 更重要的是, 它定义了各种访问数据库所需要的连接属性。
??? 现在让我们定义第二个Spring Bean:SessionFactory.如果你有Hibernate编程经验, 你将实现SessionFactory Bean 负责去创建Session对象,通过Session对象处理 Transaction 和数据访问。 现在同样的SessionFactory Bean必须用Spring的方式进行配置如下,
<bean id="mySessionFactory" ref="myDataSource"/> <property name="mappingResources"> <list> <value>com/xxxx/audit/pojo/Activitylog.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.Oracle9Dialect</value> </property></bean>
?
当配置SessionFactory Bean时,我们已经给出两个强制信息。 一个是data-source 信息包含访问数据库的细节;第二个是一个映射文件的列表,他包含了数据库表和Java类之间的映射信息,我们在第2部分已经定义了他们,在‘list’标志中应用。
??? 第三个重要的Spring Bean是Hibernate Template. 它提供了一个低级数据访问和操作的包装,精确地它包含以下方法:insert/delete/update/find数据库中的数据,对Hibernate Template的配置唯一的变量是SessionFactory Bean对象如下所示
<bean id="hibernateTemplate" name="code"><bean id="ActivitylogDao" name="code">ActivitylogDao.java package javabeat.spring.hibernate;import java.sql.SQLException;import org.hibernate.HibernateException;import org.hibernate.Session;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.HibernateTemplate;public class ActivitylogDao { private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate){ this.hibernateTemplate = hibernateTemplate; } public HibernateTemplate getHibernateTemplate(){ return hibernateTemplate; } public Activitylog getActivitylog (final String id){ HibernateCallback callback = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { return session.load(Activitylog.class, id); } }; return (Activitylog)hibernateTemplate.execute(callback); } public void saveOrUpdate(final Activitylog activitylog){ HibernateCallback callback = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { session.saveOrUpdate(activitylog); return null; } }; hibernateTemplate.execute(callback); }}
?
此类利用了Hibernate API (特别是Session对象) 用于数据访问。引导Spring访问 Hibernate API, 我们把逻辑细化,利用Hibernate API 融入Spring知道的著名接口中的特别著名的方法。 It happens to be the HibernateCallback 接口使用方法doInHibernate() ,通过传送一个Hibernate Session 实例, ActivitylogDao类我们已经定义了两个方法:getActivitylog () and saveOrUpdate .使用Hibernate APIs, 我们定义了HibernateCallback中的代码, doInHibernate() 方法和通知Spring 执行这些代码 ,传送接口引用HibernateTemplate.execute() 方法。
??? 3.6) 客户端测试程序
SpringHibernateTest.java package javabeat.spring.hibernate;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.FileSystemResource;import org.springframework.core.io.Resource;import org.springframework.orm.hibernate3.LocalSessionFactoryBean;public class SpringHibernateTest { public static void main(String[] args) { Resource resource = new FileSystemResource("./spring-hibernate.xml"); BeanFactory factory = new XmlBeanFactory(resource); Activitylog activitylog = new Activitylog (); activitylog.setId("123"); activitylog.setName("ABC"); activitylog.setTaskcode(“8000933120); activitylog.setTasktime(“2008 11 20 12:02:30 888888”); ActivitylogDao activitylogDao = (ActivitylogDao)factory.getBean( "activitylogDao"); activitylogDao.saveOrUpdate(activitylog); Activitylog actResult = activitylogDao.getActivitylog ("123"); System.out.println(actResult); }}
?
最后, 我们运行客户应用访问测试数据,过程像这样。 当方法BeanFactory.getBean("ActivitylogDao") 被调用, Spring 找到ActivitylogDao Bean 的指针。 它产生Hibernate Template 对象。 然后初始化Hibernate Template对象, 我们将看到一个Session Factory Bean对象被引用。然后当建立Session Factory Bean对象的时候, 将得到data-source 信息和数据库表和Java类。
??? 4)总结
??? 本文讨论了Spring 和Hibernate的集成。 既讨论了需求也讨论了它带来的好处。 通过一个详细的实例一步步清晰地演示了集成工作