其實 Spring+Hibernate 訪問數據庫有如下幾種方法:java
一、HibernateDaoSupport 注入SessionFactoryspring
在spring配置文件中,對Dao注入sessionFactory.比較簡單。如:sql
<beanid="UserInfoDao"class="com.hr2job.dao.impl.UserInfoDaoImpl"> <propertyname="sessionFactory"ref="sessionFactory"></property> </bean>
這裏的sessionFacotry注入不是給類的,而是給繼承HibernateDaoSupport類的sessionFactory,
在上面源碼中能夠看到。之前寫SSH程序的時候就是用這個的,由於是不知道,
這個好處就是咱們再也不須要關心關閉、是否鏈接成功等問題。主要是很方便。
可是這個很差就是java只支持單繼承,因此惟一的繼承給了HibernateDaoSupport有點惋惜。並且也沒有必要這樣作。數據庫
二、注入HibernateTemplatesession
這種方法本質上跟上面的sessionFacotry同樣,只不過進行了一層包裝,好處就是Dao中的類就不用再繼承那個HibernateDaoSuport了,不過要先配置好HibernateTemplate:工具
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>
很是的方便,我如今就在用這個了。其實並無改多少,就是曾經的sessionFactroy改爲了hibernatemplate。spa
三、注入jdbcTemplate
這種方法適合那些不喜歡hibernate的save,delete等方法,喜歡本身寫的N人吧。
有時候jdbcTemplate查詢的效率會很高。這多是跟jdbc有關吧。配置以下:hibernate
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean>
在類中set方法jdbctemplate方法就能夠了,Spring中的配置跟 sessionFactory 基本同樣。
總的感受仍是喜歡HibernateTemplate,緣由就是好用,不須要寫太多的sql語句,不須要
類去繼承,只要提供一個set方法,再注入一下很方便。code
附:orm
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來完成數據庫訪問。
HibernateTemplate用於持久層的訪問,該模板無需打開session及關閉Session。它只要得到SessionFactory的引用,就能夠打開Session,並在持久化訪問結束後關閉Session,程序開發只須要完成持久曾邏輯,通用的CRUD操做由HibernateTemplate完成.