首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spirng跟hibernate

2012-10-26 
spirng和hibernate创立Spring配置文件spring-hibernate.xml ?xml version1.0 encodingUTF-8?bean

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的集成。 既讨论了需求也讨论了它带来的好处。 通过一个详细的实例一步步清晰地演示了集成工作

热点排行