關於DAO層的sessionFactory注入和是否繼承HibernateDAOSupport
這個標題被我描述的太亂太雜了,其實要講的主要是關於怎麼得到用來操作資料層所使用的hibernateTemplate(另一個種方法是通過jdbcTemplate,但推薦使用第一種)。而hibernateTemplate是通過sessionFactory得到的,sessionFactory存在於hibernateDAOSupport來得到。(一切都是spring給我們封裝好的)
這裡的關鍵是怎麼通過spring對DAO的操作得到我們要的hibernateTemplate
我們先看spring中的一段原始碼。
還有一個final方法public final void setSessionFactory(SessionFactory sessionFactory) { if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) { this.hibernateTemplate = createHibernateTemplate(sessionFactory); } }
public final HiberanteTemplate getHibernateTemplate()。。。。
也就是要得到hibernateTemplate就要先保證sessionFactory不是NULL,但是又因為這兩個方法都是final所以,DAO層繼承了這個hibernateDAOSupport之後不能重寫,所以這裡就出現了下面幾種可以得到hibernateTemplate的方法
①採用通過spring注入sessionFactory,前提是讓DAO層繼承hibernateDAOSupport,這樣DAO類也就有了sessionFactory,然後通過在xml中編寫進行注入。
這樣使用起來的確是很方便(詳情見後面程式碼)但是有不好的地方。其一你這個DAO層繼承了hibernateDAOSupport之後,由於Java只能繼承一個父類,便失去了繼承其他的可能性。其二,這回增加耦合度,讓程式碼至少不那麼“乾淨透明”
②採用通過我不繼承hibernateDAOSupport,而是直接給我的DAO層注入一個hibernateTemplate(因為我們的最終目標就是這個hibernateTemplate,我們注入sessionFactory是一個不得不為的行為,spring給我們的就是通過只要給spring一個sessionFactory,spring就還你一個hibernateTemplate)
這樣的話每一個DAO層中都有一個對hibernateTemplate的set方法(為了注入),這樣的確不用再去繼承hibernateDAOSupport,可DAO層的程式碼中會多和關鍵操作無關的程式碼,如上面的set
還是看程式碼直接清晰,如下
採用第一種方法:
<!-- 以下為使用者管理的依賴注入 -->
<bean id="UserDao" class="org.nbu.lab1220.daoImpl.UserDaoImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
public ArrayList<User> loginVaild(String userAccount, String password) {
return (ArrayList<User>) getHibernateTemplate().find("from User p where p.userAccount=? and p.password=?",new Object[]{userAccount,password});
}}
採用第二種方法:
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="UserDao" class="org.nbu.lab1220.daoImpl.UserDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
public class UserDaoImpl implements UserDao{
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@SuppressWarnings("unchecked")
public ArrayList<User> loginVaild(String userAccount, String password) {
return (ArrayList<User>) this.hibernateTemplate.find("from User p where p.userAccount=? and p.password=?",new Object[]{userAccount,password});
}}
----------------------------------------------------------------------------------------------------------------------
今天意外發現
spring3.1裡已經不提供hibernatedaosupport,hibernateTemplete了,只能用hibernate原生的session
相關推薦
關於DAO層的sessionFactory注入和是否繼承HibernateDAOSupport
這個標題被我描述的太亂太雜了,其實要講的主要是關於怎麼得到用來操作資料層所使用的hibernateTemplate(另一個種方法是通過jdbcTemplate,但推薦使用第一種)。而hibernateTemplate是通過sessionFactory得到的,sessionF
Spring通過XML配置c3p0連線池和dao層註解注入使用 jdbcTemplate
Spring通過註解配置c3p0連線池和dao使用 jdbcTemplate 1.Spring配置c3p0連線池 第一步:匯入c3p0的jar包 第二步:建立Spring配置檔案,配置連線池 平常我們寫c3p0連線池時是這樣寫的:
JavaWeb中Dao層的介面和基本功能簡單抽取技巧
在dao層書寫具體實現類的時候會將dao層功能抽取到介面中,然後去實現該介面,實現具體方法,書寫具體功能程式碼。 抽取如圖: 但是這種抽取不是很友好,由圖可以看出,每個實現類中都要書寫共同的增刪改查方法,這樣就是使得程式碼存再冗餘,重複程式碼多次書寫。此時就需要
spring data jpa 裡 Dao層中Repository和JpaSpecificationExecutor的一個小坑
public interface LabelRepository extends Repository<Label, Lon
spring quartzy的spring注入問題(dao層和service層)
許久沒有寫博文了,今天來寫寫,畢業設計中遇到的某個小問題,及解決方法。 畢業設計中涉及到spring的定時器quartzy的使用, 遇到的問題是:quartzy中不能使用spring注入的方式注入dao層和service層,原因是spring在載入的時候先載入quarzy,後加載bean
繼承hibernateDaoSupport之後通過註解方式注入SessionFactory
因為hibernateDaoSupport中setSessionFactory()方式是final的, 不能被重寫 , 但是可以在繼承hibernateDaoSupport的子類中加入一個方法為SessionFactory注入值 程式碼如下: @Resource(name
java中Action層、Service層和Dao層的功能區分
封裝 滿足 ont 事務管理 簡單 聲明式 所在 框架搭建 調用接口 Action/Service/DAO簡介:Action是管理業務(Service)調度和管理跳轉的。Service是管理具體的功能的。Action只負責管理,而Service負責實施。DAO只完成增刪改查
Spring boot的dao層繼承jpa啟動報錯
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'xxxController': Unsatisfied dependency expressed thro
使用mybatis外掛generator生成實體類,dao層和mapper對映
本文主要講如何使用generator外掛自動生成我們所需要的實體類,Dao層和對應的mapper對映檔案,首先講一下命令列下用本地jar包使用,然後再講專案中整合進generator外掛進行生成。現在教程開始(Mysql資料庫為例) 一 本
JavaWeb三層架構中Service和Dao層物件單例化可行性
宣告:以下個人觀點,僅作參考; 閱讀正文的前提知識: 一. 單例模式: 單例概念(百度): 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類
工具類中如何注入Dao層Bean
@Component public class UserRequest { @Autowired private SysUserDao sysUserDao; private static UserRequest UserRequest; @PostConstruct pub
SSM框架下,spring中service和dao層的關係
【部分轉載】 1、java web 中dao 層和service層都使用介面,是否是為使用介面而使用介面? 一個dao或者一個service都是一個介面,然後再一個類去實現,為什麼不直接使用一個類呢?在入門級(單表)的SSM+maven程式碼裡面,我們甚至可以看到dao和service的介面
Action層、Service層和Dao層的功能區分
Action/Service/DAO簡介: Action是管理業務(Service)排程和管理跳轉的。 Service是管理具體的功能的。 Action只負責管理,而Service負責實施。 DAO只完成增刪改查,雖然可以1-n,n-n,1-1關聯,模糊、動態、子查詢都可以。但是無論多麼複雜的查詢,dao只是
使用MyBatis Generator自動生成實體、mapper和dao層
本人使用: 整合開發環境:idea 專案管理工具:maven 資料庫:oracle 框架:Spring+SpringMVC+myBatis 主要步驟: 在pom.xml中加入外掛依賴 寫mbgConfiguration.xml檔案,jdbc.propertie
spring的一個事務管理,在controller層和dao層都可以用
import org.springframework.transaction.support.DefaultTransactionDefinition; public PlatformTransactionManager getTransactionManager() { re
jdbc的dao層,和JDBCUtils
DAO層的實現: package com.qyl.dao; public class Dept { private Integer id; private String name; public Integer getId() { return id; }
JAVA中Action層, Service層 ,modle層 和 Dao層的功能區分
首先這是現在最基本的分層方式,結合了SSH架構。modle層就是對應的資料庫表的實體類。Dao層是使用了hibernate連線資料庫、操作資料庫(增刪改查)。Service層:引用對應的Dao資料庫操作,在這裡可以編寫自己需要的程式碼(比如簡單的判斷)。Action層:引用
SpringMVC Dao層注入到Service層,Service層注入到controller層及相關XML
1 本人新手,剛開始學習SringMVC框架,需要各個層之間的注入。 舉個例子: 最初,在dao層實現service的方式是,new出來一個(每個方法都要new一次)。 IServiceImpl service =new IServiceImpl(); service.fill();
框架學習(1)——service層,dao層和service實現類進行資料庫操作
最近也是比較忙,也只能忙裡偷閒地抓緊時間接著學習一下技術,自從上次學習了maven之後,越來越對框架產生了興趣,下了好多的spring視屏,聽著老師的建議,最近也萌生了看別人的程式碼進行學習的想法,然後就上了知乎搜了搜優秀的java框架,發現了一個比較感興趣的,
Spring配置事務在Dao層和Service層
【轉載自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】 【感謝原作者:hk2000c】 Spring通過AOP實現宣告式事務管理。通常通過TransactionProxyFactoryBean設