spring--整合hiberante struts2

整合hibernate:


集成hibernate3 和4有一定的區別
目前基本使用三 所以該部分類容以3位基礎


1導包 
  1.1 導入hibernate3.導入 (hibernate3.jar required文件的所有 slf4j-api.jar jpa文件夾中的包(用於註解))
  1.2 log4j包  log4j的配置文件
  1.3 還有spring的依賴包 
  1.4 導入dpcp的依賴包
2 創建beans.xml
  2.1創建datasource  使用dbcp(和集成jdbc一樣)
  2.2 在beans裏面 也就是不要hibernate的配置文件了  創建hibernateSessionFactory(用springframe裏面的hibernateFacotory)
      jdbc裏面的數據源是直接注入到jdbcTemplate裏面的  沒有sessionFactory
      
      <!-- 如果使用annotation的方式 不能使用LocalSessionFactoryBean 而應該使用 annotation.AnnotationSessinFactoryBean
  因爲一個是掃描hibernate註解packagesToScan掃描entity  一個是掃描普通xml的hbm文件
-->
<!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<!-- 注入數據源 -->
<property name="dataSource" ref="dataSource" />
<!-- 設置spring去哪個包中查找相應的實體類 -->
<property name="packagesToScan">
<value>com.itany.model</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hinernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hinernate.show_sql">true</prop>
<prop key="hinernate.hbm2ddl.auto">update</prop>
<prop key="hinernate.format_sql">false</prop>
</props>
</property>
</bean>
      
3 爲實體類添加hibernate的annotataion 或者hbm.xml  
4 創建基於hibernate的DAO
  4.1在相應的dao中注入相應的sessionFactory
  4.2 如果通過spring來管理相應的sessionFactory  不再使用factory.openSession
      而是應該使用facorty.getCurrentSession來打開一個session
      這個session就會被spring所管理  此時開發人員就不用進行事物控制 也不要關閉Session 都由spring所完成
      因爲這個sessionFactory對象是由springframework.hibernate類進行生成的
      getCurrentSession才能被spring所管理
 
5配置spring的事物處理 只有配置了事物處理之後,spring纔能有效的進行事物管理
<!-- 配置 spring和Hiberanet集成的切面處理
    如果不想用HIbernate就進行事物處理 spring直接配置也是可以的 在spring_aop_xml中就可以 不用Hibernate 直接配置
    切面 和 前後方法
    <aop:config>
    注意肯定在前面裏面寫切點 在哪些位置加入相應aspect
<aop:aspect id="myLogAspect"  ref="aspectLog">
<aop:pointcut expression="execution(* com.itany.dao.*.add*(..))||
execution(* com.itany.dao.*.delete*(..))" id="logPoint"/>
因爲一個切面裏面比如日誌 可能需要加入日誌的有好幾個切點需要 所以要輸入在哪個切點加 
<aop:before method="logStart" pointcut-ref="logPoint"/>
<aop:around method="logAround" pointcut-ref="logPoint"/>
<aop:after method="logEnd" pointcut-ref="logPoint"/>
</aop:aspect>
</aop:config>
    -->

<!-- 配置spring和hibernate集成進行事物的處理 -->

<!-- 聲明事務 -->
<!-- 第一步,聲明事務管理器 -->
<bean id="txmanager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 第二步,創建事務通知 在哪些方法上加上事物-->
<tx:advice id="txadvice" transaction-manager="txmanager">
<tx:attributes>
<!-- get,find用只讀事務 -->
<tx:method name="get*"   read-only="true"/>
<tx:method name="find*"  read-only="true"/>
<!-- 其餘的方法用事務處理 -->
<!-- <tx:method name="*" propagation="NOT_SUPPORTED"/> -->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>

</tx:advice>

<!-- 第三步,配置aop事務  表明哪些方法加入事物處理-->
<aop:config proxy-target-class="true">
<aop:pointcut  id="pointcut" expression="execution(* com.itany.dao.*.*(..))"/>

<aop:advisor  pointcut-ref="pointcut" advice-ref="txadvice"  />
</aop:config>

6 spring整合hibernate 操作數據庫時候 提供了三種方式 當然spring也可以直接使用jdbc操作數據庫 也整合了:
1 一種是直接使用getCurrentSession 進行session.upadte load delete等等操作
2 一種是使用了HibernateTemplate
3 一種是使用了HibernateDaoSupport


整合struts2
1 導入structs2包  檢查是否有衝突
2 導入struts2-spring-plugin的整合包
3 配置struts2的struts.xml文件
<!--表示action由spring來創建 可以使用spring的依賴注入 -->
<constant name="struts.objectFactory"
value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
4創建action  配置基於通配符的訪問方式
5因爲總要獲取spring的bean 因此在web.xml中配置獲取BeanFactor的操作
   5.1
  <!-- 創建spring的監聽器 獲取spring的工廠-->
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 上下文參數
  監聽器監聽哪些東西  初始化參數 因此要配置spring哪些文件被監聽(spring的BEAN文件) 啓動
  classpath* 是classpath開頭  -->
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <!-- 指定了兩個路徑去搜索配置項 -->
  <param-value>/WEB-INF/applicationContext-*.xml,classpath*:beans.xml</param-value>
  </context-param>
  
  5.2創建struts2的過濾器
  <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>


<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章