天天看點

在applicationContext.xml檔案中配置SessionFactory和dataSource的bean

在所有的ORM架構中,Spring對Hibernate的支援最好. Spring提供很多IOC特性的支援,友善處理大部分典型的Hibernate整合問題,如:sessionFactory注入,HibernateTemplate的簡化操作,及DAO支援等. applicationContext.xml檔案包含如下部分内容:

<bean id="myDataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/tenancybj" />
		<property name="username" value="root" />
		<property name="password" value="12345" />
	</bean>           
<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="myDataSource" />
		<!--  注釋原因:hibernate.cfg.xml  裡面已經存在   -->
		<!--  取消注釋原因:查詢時使用了  from ***  hql語句    -->
		<property name="mappingResources">
			<list>
				<value>domain/UserInfo.hbm.xml</value>
				<value>domain/Customer.hbm.xml</value>
				<value>domain/SupplyMan.hbm.xml</value>
				<value>domain/ProType.hbm.xml</value>
				<value>domain/ProductParam.hbm.xml</value>
				<value>domain/StorageRate.hbm.xml</value>
				<value>domain/HireRec.hbm.xml</value>
				<value>domain/RepairRec.hbm.xml</value>
				<value>domain/SalesRec.hbm.xml</value>
			</list>
		</property>

		<property name="hibernateProperties">
			<value>
				hibernate.dialect=org.hibernate.dialect.MySQLDialect
			</value>
		</property>

	</bean>           

SessionFactory由ApplicationContext管理,并随着應用啟動時自動加載,可以被處于ApplicationContext管理的任意一個Bean引用,比如DAO. Spring采用依賴注入為DAO對象注入SessionFactory的引用;   Hibernate持久層通路步驟: 1 建立Configuration執行個體 2 建立SessionFactory執行個體 3 建立Session執行個體 4 打開事務 5 開始持久化通路 6 送出事務 7 遇到異常,復原事務 8 關閉Session   Spring提供更簡單的方式操作持久層,無須顯式地打開Session,也無須在代碼中執行任何事務操作語句. Spring提供HibernateTemplate,用于持久層通路.   HibernateTemplate無須顯式打開Session及關閉Session,它隻要獲得SessionFactory的引用,将可以智能打開Session,并在持久化通路結束後關閉Session,程式開發隻需完成持久層邏輯,通用的操作則由HibernateTemplate完成   在DAO層的實作類中作如下操作:

private HibernateTemplate ht;
    private SessionFactory sessionFactory;
public void save(Person person) {
setHibernateTemplate();
ht.save(person);
System.out.println("saved");
}
public void setHibernateTemplate() {
if(ht==null)
ht = new HibernateTemplate(sessionFactory);

}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
           

解釋:定義sessionFactory,這裡的實作類就不能實作HibernateDaoSupport了,因為它裡面提供了sessionFactory 和HibernateTemplate的final的方法定義,就不能在子類中覆寫了。 更好的實作方式就是:繼承HibernateDaoSupport。

繼續閱讀