• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

struts+spring+hibernate感悟

武飞扬头像
autumn
帮助1

struts spring hibernate感悟

width="336" height="280" align="center,center" id="iframeu1788635_0" src="http://pos.百度.com/hczm?rdid=1788635&dc=2&di=u1788635&dri=0&dis=0&dai=2&ps=236x946&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1459231222423&ti=struts+spring+hibernate感悟 | 学步园&ari=1&dbv=0&drs=1&pcs=1440x763&pss=1440x763&cfv=20&cpl=2&chi=1&cce=true&cec=utf-8&tlm=1459231222&ltu=http://www.xuebuyuan.com/1113325.html&ltr=http://www.xuebuyuan.com/1064700.html&ecd=1&psr=1440x900&par=1440x818&pis=-1x-1&ccd=24&cja=true&cmi=4&col=zh-CN&cdo=-1&tcn=1459231222&qn=c71da1bd85203e85&tt=1459231222396.88.153.154" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true">

三者的结合堪称完美, 整合三者关键是配置文件
1.web.xml 用于web服务器装载过滤器,servlet,以及配置文件
struts 在此被装载org.apache.struts.action.ActionServlet,还有它的配置参数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这个文件
这个是strust专有配置文件,配置form,全局转发,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
这个是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.hbm.xml,POJOClassName是你定义的一个javabean,你可以把这个配置文件放在和pojobean一个目录下,也可以放在其他目录,然后引用,格式如下:

<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>

上面的所有配置信息是我从自己做的一个项目中抽取出来的
spring中的依赖注入/控制反转是不错的,你可以定义任何接口,然后实现接口里面的方法,通过spring的配置文件把你的接口注入到任何地方,前提是你引用的必须是接口,在引用的地方必须有接口定义以及getter方法,不过你可以把这个接口当作类似javabean的一个属性一样来使用,javabean都有getter和setter方法的
spring里面的事务代理也挺挺不错的

<property name="target">
    <ref local="bookTypeDAO" />
 </property>
target它是指向要注入的类,代理这个类所实现的接口
<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是对所代理的方法哪些方法提供事务,比如你定义一个以add开头的方法,那它就可以有事务管理了,对于它里面的所有操作,都可以实现事务机制,若有异常就回滚事务
hibernate的映射机制是orm,面向对象的数据库查询,查询时必须提供查询类(如find方法"from Book"hql语句中的Book不是表名而是类名),以得到它的实例,对应数据库的javabean的属性必须都是对象型的,int、double必须定义为Integer和Double类型,映射表有个lazy属性应该设置false,不然在查询数据库后加载一条记录时会报错。一对多双相关联:
一对多映射,复杂

<set name="borrowBills" lazy="false"
    inverse="true" cascade="none">
    <key column="readerid" />
    <one-to-many
     class="com.binghe.hibernate.borrowbill.BorrowBill" />
   </set>

cascade属性不好用,如果有删除记录操作时我都把它设置成none值,双方都要设置,否则报错,因为没法相互通知
多对一映射,简单

<many-to-one name="name" type="com.ClassName" update="false" insert="false">
 <column name="nameId" />
 </many-to-one>

返回

三者的结合堪称完美, 整合三者关键是配置文件
1.web.xml 用于web服务器装载过滤器,servlet,以及配置文件
struts 在此被装载org.apache.struts.action.ActionServlet,还有它的配置参数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这个文件
这个是strust专有配置文件,配置form,全局转发,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
这个是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.hbm.xml,POJOClassName是你定义的一个javabean,你可以把这个配置文件放在和pojobean一个目录下,也可以放在其他目录,然后引用,格式如下:

<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>

上面的所有配置信息是我从自己做的一个项目中抽取出来的
spring中的依赖注入/控制反转是不错的,你可以定义任何接口,然后实现接口里面的方法,通过spring的配置文件把你的接口注入到任何地方,前提是你引用的必须是接口,在引用的地方必须有接口定义以及getter方法,不过你可以把这个接口当作类似javabean的一个属性一样来使用,javabean都有getter和setter方法的
spring里面的事务代理也挺挺不错的

<property name="target">
    <ref local="bookTypeDAO" />
 </property>


target它是指向要注入的类,代理这个类所实现的接口

<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是对所代理的方法哪些方法提供事务,比如你定义一个以add开头的方法,那它就可以有事务管理了,对于它里面的所有操作,都可以实现事务机制,若有异常就回滚事务
hibernate的映射机制是orm,面向对象的数据库查询,查询时必须提供查询类(如find方法"from Book"hql语句中的Book不是表名而是类名),以得到它的实例,对应数据库的javabean的属性必须都是对象型的,int、double必须定义为Integer和Double类型,映射表有个lazy属性应该设置false,不然在查询数据库后加载一条记录时会报错。一对多双相关联:
一对多映射,复杂

<set name="borrowBills" lazy="false"
    inverse="true" cascade="none">
    <key column="readerid" />
    <one-to-many
     class="com.binghe.hibernate.borrowbill.BorrowBill" />
   </set>


cascade属性不好用,如果有删除记录操作时我都把它设置成none值,双方都要设置,否则报错,因为没法相互通知
多对一映射,简单

<many-to-one name="name" type="com.ClassName" update="false" insert="false">
 <column name="nameId" />
 </many-to-one>

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibckki
系列文章
更多 icon
同类精品
更多 icon
继续加载