HibernateTemplate使用

HibernateTemplate提供持久层访问模板化,使用HibernateTemplate无须实现特定接口,它只需要提供一个SessionFactory的引用,就可执行持久化操作。SessionFactoyr对象可通过构造参数传入,或通过设值方式传入。如下:

//获取Spring上下文

ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

//通过上下文获得SessionFactory

SessionFactory sessionFactory = (SessionFactory) ctx.getBean(“sessionFactory”);

然后创建HibernateTemplate实例。HibernateTemplate提供如下三个构造函数

q HibernateTemplate()

q HibernateTemplate(org.hibernate.SessionFactory sessionFactory)

q HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate)

第一个构造函数,构造一个默认的HibernateTemplate实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate传入SessionFactory的引用。

第二个构造函数,在构造时已经传入SessionFactory引用。

第三个构造函数,其boolean型参数表明:如果当前线程已经存在一个非事务性的Session,是否直接返回此非事务性的Session。

对于在Web应用,通常启动时自动加载ApplicationContext,SessionFactory和DAO对象都处在Spring上下文管理下,因此无须在代码中显式设置,可采用依赖注入解耦SessionFactory和DAO,依赖关系通过配置文件来设置,如下所示:

<?xml version="1.0" encoding="gb2312"?>

<!-- Spring配置文件的DTD定义-->

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<!-- Spring配置文件的根元素是beans-->

<beans>

<!--定义数据源,该bean的ID为dataSource-->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!-- 指定数据库驱动-->

<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

<!-- 指定连接数据库的URL-->

<property name="url"><value>jdbc:mysql://wonder:3306/j2ee</value></property>

<!-- root为数据库的用户名-->

<property name="username"><value>root</value></property>

<!-- pass为数据库密码-->

<property name="password"><value>pass</value></property>

</bean>

<!--定义Hibernate的SessionFactory-->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!-- 依赖注入数据源,注入正是上文定义的dataSource>

<property name="dataSource"><ref local="dataSource"/></property>

<!-- mappingResouces属性用来列出全部映射文件>

<property name="mappingResources">

<list>

<!--以下用来列出所有的PO映射文件-->

<value>lee/Person.hbm.xml</value>

</list>

</property>

<!--定义Hibernate的SessionFactory的属性 -->

<property name="hibernateProperties">

<props>

<!-- 指定Hibernate的连接方言-->

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<!-- 不同数据库连接,启动时选择create,update,create-drop-->

<prop key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

</bean>

<!-- 配置Person持久化类的DAO bean-->

<bean id="personDao" class="lee.PersonDaoImpl">

<!-- 采用依赖注入来传入SessionFactory的引用>

<property name="sessionFactory"><ref local="sessionFactory"/></property>

</bean>

</beans>

DAO实现类中,可采用更简单的方式来取得HibernateTemplate的实例。代码如下:

public class PersnDAOImpl implements PersonDAO

{

//以私有的成员变量来保存SessionFactory。

private SessionFactory sessionFactory;

//设值注入SessionFactory必需的setter方法

public void setSessionFactory(SessionFactory sessionFactory)

{

this.sessionFactory = sessionFactory;

}



public List loadPersonByName(final String name)

{

HibernateTemplate hibernateTemplate =

new HibernateTemplate(this.sessionFactory);

//此处采用HibernateTemplate完成数据库访问

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值