Spring中HibernateDaoSupport跟JdbcDaoSupport的使用
使用HibernateDaoSupport
一、HibernateDaoSupport是Spring为Hibernate的DAO提供工具类。此类主要提供了两个方法:
1. public final HibernateTemplate getHibernateTemplate()
2. public final void setSessionFactory(SessionFactory sessionFactory)
其中,setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了配置在Spring中的
SessionFactory实例,getHibernateTemplate方法用来利用刚才的SessionFactory生成Session,再生
成HibernateTemplate来完成数据库的访问。
二、一个典型的继承HibernateDaoSupport的DAO如下:
public class TestB extends HibernateDaoSupport{
public void test1() {
List list = getHibernateTemplate().find("from
Userinfo");
System.out.println(list.size());
}
public static void main(String[] args) {
ApplicationContext ac = new
ClassPathXmlApplicationContext("applicationContext.xml");
TestB t = (TestB) ac.getBean("testb");
t.test1();
}
}
相应的Spring的applicationContext.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="mySessionFaction"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSourse" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/ori/demo/Userinfo.hbm.xml</value></list>
</property>
</bean>
<bean id="testb" class="com.ori.demo.TestB">
<property name="sessionFactory">
<ref bean="mySessionFaction"/>
</property>
</bean>
</beans>
这个过程中,其实DAO的实现依然借助了HibernateTemplate的模板访问方式。只是,HibernateDaoSupport将依赖注入
SessionFactory的工作已经完成,获取HibernateTemplate的工作也已经完成。注意,这种方法须在Spring的配置文件中配
置SessionFactory。
在继承HibrnateDaoSupport的DAO实现里,Hibernate
Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次
session”的策略,自动提高数据库访问的性能。
------------------------------------------------------------------------
使用JdbcDaoSupport
一、 下面一个例子通过例子来说明JdbcDaoSupport的使用:
写一个测试类(TestD):
public class TestD extends JdbcDaoSupport {
public void test() {
int count = this.getJdbcTemplate().queryForInt("select
count(*) from userinfo");
System.out.println(count);
}
public static void main(String[] args) {
ApplicationContext ac = new
ClassPathXmlApplicationContext("applicationContext.xml");
TestD t = (TestD) ac.getBean("testd");
t.test();
}
}
相应的Spring的applicationContext.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="myDataSourse"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/test">
</property>
<property name="username"
value="root"></property>
<property name="password"
value="root"></property>
</bean>
<bean id="testd" class="com.ori.demo.TestD">
<property name="dataSource">
<ref bean="myDataSourse"/>
</property>
</bean>
</beans>