hibernateTemplate的常用方法:
Ø void delete(Object entity):刪除指定持久化實(shí)例
Ø deleteAll(Collection entities):刪除集合內(nèi)全部持久化類實(shí)例
Ø find(String queryString):根據(jù)HQL查詢字符串來(lái)返回實(shí)例集合
Ø findByNamedQuery(String queryName):根據(jù)命名查詢返回實(shí)例集合
Ø get(Class entityClass, Serializable id):根據(jù)主鍵加載特定持久化類的實(shí)例
Ø save(Object entity):保存新的實(shí)例
Ø saveOrUpdate(Object entity):根據(jù)實(shí)例狀態(tài),選擇保存或者更新
Ø update(Object entity):更新實(shí)例的狀態(tài),要求entity是持久狀態(tài)
Ø setMaxResults(int maxResults):設(shè)置分頁(yè)的大小
HibernateDaoSupport:
Spring為Hibernate的DAO提供工具類:HibernateDaoASupport。該類主要提供如下兩個(gè)方法,方便DAO的實(shí)現(xiàn):
1、public final HibernateTemplate getHibernateTemplate()
2、public final void setSessionFactory(SessionFactory sessionFactory)
其中setSessionFactory方法用來(lái)接收Spring的ApplicationContext的依賴注入,可接收配置在Spring的SessionFactory實(shí)例,getHibernateTemplate方法則用來(lái)更具獲得的SessionFactory產(chǎn)生Session,最后生成HibernateTeplate來(lái)完成數(shù)據(jù)庫(kù)訪問(wèn)。
看到這些的時(shí)候似乎好像明白了以些,HibernateDaoSupport此類其實(shí)并不做太多的事情,它只有兩個(gè)方法一個(gè)是獲得getHibernateTemplate()和setSessionFacotry()。就像我們?cè)谂渲梦募信渲玫哪莻€(gè)sessionFactory屬性。而getHibernateTemplate()方法就是常用的save、delete等CRUD基本操作。
其實(shí)Spring+hibernate訪問(wèn)數(shù)據(jù)庫(kù)有以下幾種方法:
1、 注入SessionFactory
在spring配置文件中,對(duì)Dao注入sessionFactory.比較簡(jiǎn)單。
如:
<bean id="UserInfoDao" class="com.hr2job.dao.impl.UserInfoDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
這里的sessionFacotry注入不是給類的,而是給繼承HibernateDaoSupport類的sessionFactory,在上面源碼中可以看到。以前寫SSH程序的時(shí)候就是用這個(gè)的,因?yàn)槭遣恢?,這個(gè)好處就是我們不再需要關(guān)心關(guān)閉、是否連接成功等問(wèn)題。主要是很方便。但是這個(gè)不好就是java只支持單繼承,所以唯一的繼承給了HibernateDaoSupport有點(diǎn)可惜。而且也沒(méi)有必要這樣做。
2、 注入HibernateTemplate
這種方法本質(zhì)上跟上面的sessionFacotry一樣,只不過(guò)進(jìn)行了一層包裝,好處就是Dao中的類就不用再繼承那個(gè)HibernateDaoSuport了,不過(guò)要先配置好HibernateTemplate:
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
非常的方便,我現(xiàn)在就在用這個(gè)了。其實(shí)并沒(méi)有改多少,就是曾經(jīng)的sessionFactroy改成了hibernatemplate。
3、 注入jdbcTemplate
這種方法適合那些不喜歡hibernate的save,delete等方法,喜歡自己寫的N人吧。有時(shí)候jdbcTemplate查詢的效率會(huì)很高。這可能是跟jdbc有關(guān)吧。
配置如下:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
在類中set方法jdbctemplate方法就可以了,spring中的配置跟sessionFactory基本一樣。
總的感覺(jué)還是喜歡HibernateTemplate,原因就是好用,不需要寫太多的sql語(yǔ)句,不需要
類去繼承,只要提供一個(gè)set方法,再注入一下很方便。應(yīng)該還有很多的地方不同,歡迎大家討論。
聯(lián)系客服