當前位置:編程學習大全網 - 源碼下載 - SSH集成以後怎樣讓Dao直接繼承HibernateTemplate

SSH集成以後怎樣讓Dao直接繼承HibernateTemplate

HibernateTemplate提供非常多的常用方法來完成基本的操作,比如,添加刪除、增加等

spring 2.0更增加對命名sql查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate 的常規用法,就可完成大多數DAO對象的CRUD操作。

CRUD就是數據庫基本操作:Create Read Update Delete

hibernateTemplate的常用方法:

void delete(Object entity):刪除指定持久化實例

deleteAll(Collection entities):刪除集合內全部持久化類實例

find(String queryString):根據HQL查詢字符串來返回實例集合

findByNamedQuery(String queryName):根據命名查詢返回實例集合

get(Class entityClass, Serializable id):根據主鍵加載特定持久化類的實例

save(Object entity):保存新的實例

saveOrUpdate(Object entity):根據實例狀態,選擇保存或者更新

update(Object entity):更新實例的狀態,要求entity是持久狀態

setMaxResults(int maxResults):設置分頁的大小

HibernateDaoSupport:

Spring為Hibernate的DAO提供工具類:HibernateDaoASupport。該類主要提供如下兩個方法,方便DAO的實現:

1、public final HibernateTemplate getHibernateTemplate()

2、public final void setSessionFactory(SessionFactory sessionFactory)

其中setSessionFactory方法用來接收Spring的ApplicationContext的依賴註入,可接收配置在Spring的SessionFactory實例,getHibernateTemplate方法則用來更具獲得的SessionFactory產生Session,最後生成HibernateTeplate來完成數據庫訪問。

看到這些的時候似乎好像明白了以些,HibernateDaoSupport此類其實並不做太多的事情,它只有兩個方法壹個是獲得getHibernateTemplate()和setSessionFacotry()。就像我們在配置文件中配置的那個sessionFactory屬性。而getHibernateTemplate()方法就是常用的save、delete等CRUD基本操作。

Spring的源碼如下:

public abstract class HibernateDaoSupport extends DaoSupport {

private HibernateTemplate hibernateTemplate;

public final void setSessionFactory(SessionFactory sessionFactory) {

this.hibernateTemplate = createHibernateTemplate(sessionFactory);

}

protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {

return new HibernateTemplate(sessionFactory);

}

public final SessionFactory getSessionFactory() {

return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null);

}

public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

public final HibernateTemplate getHibernateTemplate() {

return hibernateTemplate;

}

protected final void checkDaoConfig() {

if (this.hibernateTemplate == null) {

throw new IllegalArgumentException("sessionFactory or hibernateTemplate is required");

}

}

protected final Session getSession()

throws DataAccessResourceFailureException, IllegalStateException {

return getSession(this.hibernateTemplate.isAllowCreate());

}

protected final Session getSession(boolean allowCreate)

throws DataAccessResourceFailureException, IllegalStateException {

return (!allowCreate ?

SessionFactoryUtils.getSession(getSessionFactory(), false) :

SessionFactoryUtils.getSession(

getSessionFactory(),

this.hibernateTemplate.getEntityInterceptor(),

this.hibernateTemplate.getJdbcExceptionTranslator()));

}

protected final DataAccessException convertHibernateAccessException(HibernateException ex) {

return this.hibernateTemplate.convertHibernateAccessException(ex);

}

protected final void releaseSession(Session session) {

SessionFactoryUtils.releaseSession(session, getSessionFactory());

}

Spring為Hibernate的DAO提供工具類:HibernateDaoASupport。該類主要提供如下兩個方法,方便DAO的實現:

1、public final HibernateTemplate getHibernateTemplate()

2、public final void setSessionFactory(SessionFactory sessionFactory)

其中setSessionFactory方法用來接收Spring的ApplicationContext的依賴註入,可接收配置在Spring的SessionFactory實例,getHibernateTemplate方法則用來更具獲得的SessionFactory產生Session,最後生成HibernateTeplate來完成數據庫訪問。

HibernateTemplate 用於持久層的訪問,該模板無需打開session及關閉Session。它只要獲得SessionFactory的引用,就可以打開Session,並在持久化訪問結束後關閉Session,程序開發只需要完成持久曾邏輯,通用的CRUD操作由HibernateTemplate完成.

其實Spring+hibernate訪問數據庫有以下幾種方法:

1、 註入SessionFactory

在spring配置文件中,對Dao註入sessionFactory.比較簡單。

如:

<bean id="UserInfoDao" class="com.hr2job.dao.impl.UserInfoDaoImpl">

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

</bean>

這裏的sessionFacotry註入不是給類的,而是給繼承HibernateDaoSupport類的sessionFactory,在上面源碼中可以看到。以前寫SSH程序的時候就是用這個的,因為是不知道,這個好處就是我們不再需要關心關閉、是否連接成功等問題。主要是很方便。但是這個不好就是java只支持單繼承,所以唯壹的繼承給了HibernateDaoSupport有點可惜。而且也沒有必要這樣做。

2、 註入HibernateTemplate

這種方法本質上跟上面的sessionFacotry壹樣,只不過進行了壹層包裝,好處就是Dao中的類就不用再繼承那個HibernateDaoSuport了,不過要先配置好HibernateTemplate:

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>

非常的方便,我現在就在用這個了。其實並沒有改多少,就是曾經的sessionFactroy改成了hibernatemplate。

3、 註入jdbcTemplate

這種方法適合那些不喜歡hibernate的save,delete等方法,喜歡自己寫的N人吧。有時候jdbcTemplate查詢的效率會很高。這可能是跟jdbc有關吧。

配置如下:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property></bean>

在類中set方法jdbctemplate方法就可以了,spring中的配置跟sessionFactory基本壹樣。

總的感覺還是喜歡HibernateTemplate,原因就是好用,不需要寫太多的sql語句,不需要

類去繼承,只要提供壹個set方法,再註入壹下很方便。應該還有很多的地方不同,歡迎大家討論。

  • 上一篇:有趣的源代碼在哪裏?
  • 下一篇:關於二戰戰略遊戲
  • copyright 2024編程學習大全網