Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計(jì)

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評(píng)論排行榜

          struts+spring+hibernate感悟 (轉(zhuǎn))

          三者的結(jié)合堪稱完美
          整合三者關(guān)鍵是配置文件
          1.web.xml
          用于 web 服務(wù)器裝載過濾器, servlet ,以及配置文件
          struts
          在此被裝載 org.apache.struts.action.ActionServlet ,還有它的配置參數(shù) config 文件 struts-config.xml spring 在此被裝載 org.springframework.web.context.ContextLoaderServlet 還有它的配置文件 applicationContext.xml ,其他省略不列出
          例子:
          <context-param>
          ??<param-name>contextConfigLocation</param-name>
          ??<param-value>/WEB-INF/applicationContext.xml</param-value>
          ?</context-param>
          ?<servlet-name>action</servlet-name>
          ??<servlet-class>
          ???org.apache.struts.action.ActionServlet
          ??</servlet-class>
          ??<init-param>
          ???<param-name>config</param-name>
          ???<param-value>/WEB-INF/struts-config.xml</param-value>
          ??</init-param>
          ??<load-on-startup>1</load-on-startup>
          ?</servlet>
          ?<servlet>
          ??<servlet-name>context</servlet-name>
          ??<servlet-class>
          ???org.springframework.web.context.ContextLoaderServlet
          ??</servlet-class>
          ??<load-on-startup>1</load-on-startup>
          ?</servlet>
          ?
          ?<!-- Action Servlet Mapping -->
          ?<servlet-mapping>
          ??<servlet-name>action</servlet-name>
          ??<url-pattern>*.do</url-pattern>
          ?</servlet-mapping>
          2.struts-config.xml 這個(gè)文件

          這個(gè)是 strust 專有配置文件,配置 form, 全局轉(zhuǎn)發(fā), action,message-resources( 用于顯示提示信息 ) ,插件
          格式如下:
          <struts-config>
          ?<form-beans>
          ??<form-bean name="logonform" type="com.binghe.forms.LogonForm" />
          ? .....
          </form-beans>
          <global-forwards>
          ??<forward name="logon" path="/login.jsp" />
          ? .......
          </global-forwards>
          <action-mappings>
          ??<action path="/logon"
          ???type="org.springframework.web.struts.DelegatingActionProxy" name="logonform"
          ???input="/login.jsp" scope="request" validate="true">
          ???<forward name="logon" path="/login.jsp" />
          ?? .....
          ??</action>
          ? ......
          </action-mappings>
          <controller locale="true" />
          <message-resources parameter="com.binghe.struts.ApplicationResources" />
          <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
          ??<set-property property="pathnames"
          ???value="/WEB-INF/validator-rules.xml,
          ??????????????????????????? /WEB-INF/validation.xml" />
          ?</plug-in>
          ?<plug-in
          ??className="org.springframework.web.struts.ContextLoaderPlugIn">
          ??<set-property property="contextConfigLocation"
          ???value="/WEB-INF/applicationContext.xml" />
          ?</plug-in>
          </struts-config>
          3.applicationContext.xml.xml?
          這個(gè)是 spring 的專有配置文件,里面配置代理 hibernate 資源和 struts
          action
          格式如下:

          <beans>
          ?<bean id="dataSource"
          ??class="org.apache.commons.dbcp.BasicDataSource"
          ??destroy-method="close">
          ??<property name="driverClassName">
          ???<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
          ??</property>
          ??<property name="url">
          ???<value>jdbc:microsoft:sqlserver://127.0.0.1:1400;DatabaseName=books</value>
          ??</property>
          ??<property name="username">
          ???<value>sa</value>
          ??</property>
          ??<property name="password">
          ???<value>123</value>
          ??</property>
          ?</bean>

          ?<bean id="sessionFactory"
          ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          ??<property name="dataSource">
          ???<ref local="dataSource" />
          ??</property>
          ??<property name="mappingResources">
          ???<list>
          ????<value>
          ?????com/binghe/hibernate/booktype/BookType.hbm.xml
          ????</value>
          ????<value>
          ?????com/binghe/hibernate/book/Book.hbm.xml
          ????</value>
          ??</list>
          ??</property>
          ??<property name="hibernateProperties">
          ???<props>
          ????<prop key="hibernate.dialect">
          ?????org.hibernate.dialect.SQLServerDialect
          ????</prop>
          ????<prop key="hibernate.show_sql">false</prop>
          ???</props>
          ??</property>
          ?</bean>
          ?<bean id="transactionManager"
          ??class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>
          ?<bean id="bookTypeDAO"
          ??class="com.binghe.spring.booktype.BookTypeDAOImp">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>
          ?<bean id="bookDAO"
          ??class="com.binghe.spring.book.BookDAOImp">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ??<property name="bookTypeDAO">
          ???<ref bean="bookTypeDAOProxy" />
          ??</property>
          ?</bean>
          ???<bean id="bookTypeDAOProxy"
          ??class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ??<property name="transactionManager">
          ???<ref bean="transactionManager" />
          ??</property>
          ??<property name="target">
          ???<ref local="bookTypeDAO" />
          ??</property>
          ??<property name="transactionAttributes">
          ???<props>
          ????<prop key="add*">PROPAGATION_REQUIRED</prop>
          ????<prop key="update*">PROPAGATION_REQUIRED</prop>
          ????<prop key="delete*">PROPAGATION_REQUIRED</prop>
          ????<prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
          ????<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          ???</props>
          ??</property>
          ?</bean>
          ?<bean id="bookDAOProxy"
          ??class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ??<property name="transactionManager">
          ???<ref bean="transactionManager" />
          ??</property>
          ??<property name="target">
          ???<ref local="bookDAO" />
          ??</property>
          ??<property name="transactionAttributes">
          ???<props>
          ????<prop key="add*">PROPAGATION_REQUIRED</prop>
          ????<prop key="update*">PROPAGATION_REQUIRED</prop>
          ????<prop key="delete*">PROPAGATION_REQUIRED</prop>
          ????<prop key="zhuxiao*">PROPAGATION_REQUIRED</prop>
          ????<prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
          ????<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          ???</props>
          ??</property>
          ?</bean>
          ??<bean name="/booktype"
          ??class="com.binghe.struts.action.booktype.BookTypeAction"
          ??singleton="false">
          ??<property name="bookTypeDAO">
          ???<ref bean="bookTypeDAOProxy" />
          ??</property>
          ?</bean>
          ?<bean name="/book"
          ??class="com.binghe.struts.action.book.BookAction"
          ??singleton="false">
          ??<property name="bookDAO">
          ???<ref bean="bookDAOProxy" />
          ??</property>
          ?</bean>
          ?</beans>
          4.hibernate 的配置文件為 POJOClassName.bhm.xml POJOClassName 是你定義的一個(gè) javabean ,你可以把這個(gè)配置文件放在和 pojobean 一個(gè)目錄下,也可以放在其他目錄,然后引用,格式如下:

          <hibernate-mapping package="com.binghe.hibernate.reader">
          ?<class name="Reader" table="reader" lazy="false">
          ??<id name="id" column="id" type="integer">
          ???<generator class="native" />
          ??</id>
          ??<property name="code" column="code" type="string"
          ???not-null="false" />
          ??<property name="name" column="name" type="string"
          ???not-null="false" />
          ??<property name="userId" column="userid" type="integer"
          ???not-null="false" />
          ??<property name="typeId" column="typeid" type="integer"
          ???not-null="false" />
          ??<many-to-one name="user" class="com.binghe.utils.UserBean"
          ???insert="false" update="false">
          ???<column name="userid" />
          ??</many-to-one>
          ??<many-to-one name="readerType"
          ???class="com.binghe.hibernate.readertype.ReaderType" insert="false"
          ???update="false">
          ???<column name="typeid" />
          ??</many-to-one>
          ??<set name="borrowBills" lazy="false"
          ???inverse="true" cascade="none">
          ???<key column="readerid" />
          ???<one-to-many
          ????class="com.binghe.hibernate.borrowbill.BorrowBill" />
          ??</set>
          </hibernate-mapping>
          上面的所有配置信息是我從自己做的一個(gè)項(xiàng)目中抽取出來的

          spring 中的依賴注入 / 控制反轉(zhuǎn)是不錯(cuò)的,你可以定義任何接口,然后實(shí)現(xiàn)接口里面的方法,通過 spring 的配置文件把你的接口注入到任何地方,前提是你引用的必須是接口,在引用的地方必須有接口定義以及 getter 方法,不過你可以把這個(gè)接口當(dāng)作類似 javabean 的一個(gè)屬性一樣來使用, javabean 都有 getter setter 方法的
          spring
          里面的事務(wù)代理也挺挺不錯(cuò)的
          <property name="target">
          ???<ref local="bookTypeDAO" />
          </property>
          target 它是指向要注入的類,代理這個(gè)類所實(shí)現(xiàn)的接口
          <property name="transactionAttributes">
          ???<props>
          ????<prop key="add*">PROPAGATION_REQUIRED</prop>
          ????<prop key="update*">PROPAGATION_REQUIRED</prop>
          ????<prop key="delete*">PROPAGATION_REQUIRED</prop>
          ????<prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
          ????<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          ???</props>
          ??</property>
          transactionAttributes 是對(duì)所代理的方法哪些方法提供事務(wù),比如你定義一個(gè)以 add 開頭的方法,那它就可以有事務(wù)管理了,對(duì)于它里面的所有操作,都可以實(shí)現(xiàn)事務(wù)機(jī)制,若有異常就回滾事務(wù)
          hibernate
          的映射機(jī)制是 orm ,面向?qū)ο蟮臄?shù)據(jù)庫查詢,查詢時(shí)必須提供查詢類(如 find 方法 "from Book"hql 語句中的 Book 不是表名而是類名),以得到它的實(shí)例,對(duì)應(yīng)數(shù)據(jù)庫的 javabean 的屬性必須都是對(duì)象型的, int double 必須定義為 Integer Double 類型,映射表有個(gè) lazy 屬性應(yīng)該設(shè)置 false ,不然在查詢數(shù)據(jù)庫后加載一條記錄時(shí)會(huì)報(bào)錯(cuò)。一對(duì)多雙相關(guān)聯(lián):
          一對(duì)多映射,復(fù)雜
          <set name="borrowBills" lazy="false"
          ???inverse="true" cascade="none">
          ???<key column="readerid" />
          ???<one-to-many
          ????class="com.binghe.hibernate.borrowbill.BorrowBill" />
          ??</set>
          cascade 屬性不好用,如果有刪除記錄操作時(shí)我都把它設(shè)置成 none 值,雙方都要設(shè)置,否則報(bào)錯(cuò),因?yàn)闆]法相互通知

          多對(duì)一映射,簡單
          <many-to-one name="name" type="com.ClassName" update="false"?insert="false">
          <column name="nameId" />
          </many-to-one>
          ??

          posted on 2007-02-02 09:19 都市淘沙者 閱讀(275) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永胜县| 大邑县| 文登市| 彰化市| 巴里| 金沙县| 柳州市| 中卫市| 博罗县| 东台市| 洞头县| 靖江市| 高要市| 阿城市| 镇赉县| 平山县| 英吉沙县| 镇宁| 周至县| 淮阳县| 宁乡县| 新乡市| 墨脱县| 明水县| 黔西县| 清流县| 栾城县| 荆州市| 沈丘县| 剑河县| 新田县| 夏邑县| 神木县| 辉南县| 西峡县| 开阳县| 霸州市| 全椒县| 平乐县| 邻水| 洪雅县|