Spring整合hibernate-dataSource、sessionFactory的依賴注入


這些內容都是我自己手寫的,其實術語不多,最重要的是配置

我說明下第一注意的是加包與刪除包:
需要手動加載的包名(必須加)在lib目錄下加:commons-dbcp.jar 和commons-pool.jar包
需要刪除的(必須刪除)的包在lib目錄下刪:asm-2.2.3.jar包

第二我們就開始搭建拉!(順便告訴你下,你可以先把struts和Spring和hibernate導入進來 ,不懂沒關系 你看我的)
(ssh包導入進來后)你先按照樣子導入如果不知道搭的話也很簡單可以學會的那我們就開始寫了:
1.寫 基類時(beasDAo(父類)應該會寫)也就是你要寫的增刪改的方法必須繼承:HibernateDaoSupport (Spring來管理hibernate)
得到相應的方法為:
protected void add(T obj) throws Exception {
try {
super.getHibernateTemplate().save(obj);
} catch (Exception e) {
throw e;
}

}
增刪改的方法都一樣super.getHibernateTemplate().update(obj);
super.getHibernateTemplate().delete(obj);

但查詢方法則要new個接口 如查詢所有:
protected List<T> getAll(final Class T) {
return super.getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query q = session.createQuery("from " + T.getName());
return q.list();
}

});
根據id也查詢則是如下方法 其實也沒什么可概括的:
protected T getObjById(Class T, Serializable id) {
return (T) super.getHibernateTemplate().get(T, id);
}

寫好這個之后你要寫相應的DAO繼承 基類得到此方法 這個我就不說了
就是得到剛剛自己寫的beasDao的方法

描述相應的DAO的和接口IDAO(這個接口必須有,因為Spring中不能有
IDAO dao=new DAo();的出現(不過你先寫着,等下再來改) 這就是為什么要有接口了 Spring說句白的就是針對接口編程


Service也是一同樣有IService接口(這個和DAO一個原理一樣 等下我們在來寫Service怎么運用DAO的方法)

寫好之后我們就開始注入了(這個就是開始配置了)

在Spring的配置文件applicationContext.xml中則寫入這段話,其實意思很見簡單,你不要把他搞的太復雜了,我來解釋下,原來的時候你是用Hibernate來連接數據庫,還有映射相應的pojo對象 是吧 ,但現在我們有了spring就把以前的hibernate的文件給干掉 讓Spring去管理 但spring如何去管理 我們先寫着:
<?xml version="1.0" encoding=" UTF-8"?>
<beans
xmlns=""
xmlns:xsi=""
xmlns:util=""
xmlns:p=""
xmlns:aop=""
xmlns:tx=""
xsi:schemaLocation="

">
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"> (這里是數據 連接池
</property>
<property name="url"
value="jdbc:mysql:// 127.0.0.1:3306/crmdb"> (這個是不是很眼熟)
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="maxActive" value="10"></property>
<property name="initialSize" value="2"></property>
</bean>
<bean id="sessionFactory" (呵呵 這個就是我們以前來創建Session的工廠了,現在也來了)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" /> (這里就是把 連接池 給注入進來了)
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop> (你仔細看下都很眼熟)
</props>
</property>
<!--<property name="mappingDirectoryLocations">
<list>
<value>com/crm/pojos</value>
</list>
</property>-->
<property name="mappingResources">
<list>
<value>com/crm/pojos/Zongjie.hbm.xml對應的pojo映射文件路徑有多少寫多少</value> (這里就是管理映射文件了)

</list>
</property>
</bean>
(而從這里開始就是事務管理。聽我的 死記下 呵呵 )
<!-- 事務管理器 apring2.0中間事務的配置和處理-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 事務屬性:通知/處理/橫切關注點
<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" />
以add開頭 事務傳播屬性(沒有事務就創建) 事務隔離級別(數據庫默認)
-->
<tx:advice id="mytx">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="upd*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="se*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 織入 -->
<aop:config>
<aop:advisor advice-ref="mytx" pointcut="execution(* com.crm.service.*.*(..))"/>
</aop:config>
</beans>

寫后之后我們就開始注入對應的DAO 你可以自己創建一個daobean.xml文件里面是這樣寫的
<?xml version="1.0" encoding=" UTF-8"?>

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean id="Factory" abstract="true">(這里一定要看請,不錯 這就是我們剛剛的sessionFactory 他為什么來這里了勒 因為你以前寫 基類的時候就是用他來創建session 但現在我們有了spring怕他不認識 所以 我們給他提個醒創建個模板)
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="CustomerDao" class="com.crm.dao.CustomerDao" parent="Factory"></bean>有多少DAO注入多少 呵呵
</beans>

在Service中導 我們要把以前的new(IDao dao=new Dao();)不要
如下面顯示:IDAO idao;提供對應的get 與set方法就可以了

然后類我們自己創建個servicebean.xml配置文件注入相應的DAO到Service中

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean id="CustomerService" class="com.crm.service.CustomerService">
<property name="icustomerdao" ref="CustomerDao"></property>
<property name="idao" ref="UserDao"></property> 你看的沒name=idao;就是我剛剛定義的 我們要的就是他提供的set方法 ,而ref="UserDao"這就是我剛剛上面自己的啊
</bean>
</beans>
在你寫的action中我們要和寫Service里面的DAO一樣但要繼承DispatchActionSupport
然后在
IService customerservice;提供get 與set 方法

再來我們創建個strutsbean.xml配置文件寫入:
<?xml version="1.0" encoding=" UTF-8"?>

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean name="/customer" class="com.crm.struts.action.CustomerAction">
<property name="customerservice" ref="CustomerService"></property>
</bean>
</beans>

然后我們在Struts的配置文件中加如個插件:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/strutsbean.xml"/>
</plug-in>
這是加載strutsbean.xml的配置文件

最后就是在 web.xml中加載我們自己創建的daobean.xml和servicebean.xml
web.xml 文件中加入

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/daobean.xml,/WEB-INF/servicebean.xml</param-value>
</context-param>
<servlet>
<servlet-name>ContextLoaderServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM