首页 > 其他分享 >SSH2配置事务的两种方式

SSH2配置事务的两种方式

时间:2023-06-27 18:07:32浏览次数:37  
标签:事务 void 配置 SSH2 user import com public User


 

 

在介绍Hibernate事务配置之前仍然要先搭建SSH2环境,在前文《Spring整合Struts2中拦截链与注解的使用 》中已经介绍过了Spring与Struts2的整合,接下来我们集成Hibernate需要做的有两件事情,第一加入Hibernate依赖包,第二是在web.xml文件中进行对Hibernate的相关配置。首先来来看需要加入的Hibernate依赖包:

         1.antlr-2.7.6.jar

         2.commons-collections-3.1.jar

         3.dom4j-1.6.1.jar

         4.hibernate-jpa-2.0-api-1.0.1.Final.jar

         5.javassist-3.12.0.GA.jar

         6.jta-1.1.jar

         7.ojdbc14.jar

         8.slf4j-api-1.6.1.jar

         9.slf4j-nop-1.6.4.jar

         10.hibernate3.jar

最后需要加入的jar包是你所使用的数据库的驱动,我使用的是mysql数据库,所以加入mysql驱动包mysql-connector-java-3.1.13-bin.jar(根据你所使用的数据库加入相关驱动jar)。接下来进行各配置文件的相关配置,web.xml文件的配置,配置方式如下:


1. <?xml version="1.0" encoding="UTF-8"?>  
2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
3. <display-name>SSH2</display-name>  
4. <welcome-file-list>  
5. <welcome-file>index.html</welcome-file>  
6. <welcome-file>index.htm</welcome-file>  
7. <welcome-file>index.jsp</welcome-file>  
8. <welcome-file>default.html</welcome-file>  
9. <welcome-file>default.htm</welcome-file>  
10. <welcome-file>default.jsp</welcome-file>  
11. </welcome-file-list>  
12.     
13. <context-param>  
14. <param-name>contextConfigLocation</param-name>  
15. <param-value>classpath:config/applicationContext-*.xml</param-value>  
16. </context-param>  
17.     
18.     
19. <filter>  
20. <filter-name>characterEncoding</filter-name>  
21. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
22. <init-param>  
23. <param-name>encoding</param-name>  
24. <param-value>UTF-8</param-value>  
25. </init-param>  
26. <init-param>  
27. <param-name>forceEncoding</param-name>  
28. <param-value>true</param-value>  
29. </init-param>  
30. </filter>  
31.     
32. <filter-mapping>  
33. <filter-name>characterEncoding</filter-name>  
34. <url-pattern>/*</url-pattern>  
35. </filter-mapping>  
36.     
37. <filter>  
38. <filter-name>openSession</filter-name>  
39. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
40. </filter>  
41.     
42. <filter-mapping>  
43. <filter-name>openSession</filter-name>  
44. <url-pattern>/*</url-pattern>  
45. </filter-mapping>  
46.     
47. <filter>  
48. <filter-name>struts2</filter-name>  
49. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
50. <init-param>  
51. <param-name>config</param-name>  
52. <param-value>struts-default.xml,struts-plugin.xml,config/struts.xml</param-value>  
53. </init-param>  
54. </filter>  
55.     
56. <filter-mapping>  
57. <filter-name>struts2</filter-name>  
58. <url-pattern>/*</url-pattern>  
59. </filter-mapping>  
60.     
61. <listener>  
62. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
63. </listener>  
64. </web-app>



struts.xml文件的配置内容:





1. <?xml version="1.0" encoding="UTF-8" ?>  
2. <!DOCTYPE struts PUBLIC  
3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
4. >  
5.   
6. <struts>  
7. <constant name="struts.action.extension" value=","></constant>  
8. <package name="testregist" namespace="/" extends="struts-default">  
9. <action name="regist" class="registAction">  
10. <result name="success">/success.jsp</result>  
11. <result name="error" type="redirect">/error.jsp</result>  
12. </action>  
13. </package>  
14. </struts>



applicationContext-bean.xml文件的配置内容:



1. <?xml version="1.0" encoding="UTF-8"?>  
2. <beans xmlns="http://www.springframework.org/schema/beans"  
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4. xmlns:aop="http://www.springframework.org/schema/aop"  
5. xmlns:context="http://www.springframework.org/schema/context"  
6. xmlns:tx="http://www.springframework.org/schema/tx"  
7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
8.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
9.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
10. >  
11.       
12. <!-- Spring管理Struts2的Action -->  
13. <bean name="registAction" class="com.action.UserManagerAction" scope="prototype">  
14. <property name="userManager" ref="userManager"></property>  
15. </bean>  
16.       
17. <bean name="userManager" class="com.service.UserManager" scope="prototype">  
18. <property name="userDao" ref="userDao"></property>  
19. </bean>  
20.       
21. <bean name="userDao" class="com.dao.impl.UserDaoImpl">  
22. <property name="sessionFactory" ref="sessionFactory"></property>   
23. </bean>  
24.       
25. </beans>


applicationContext-commons文件的配置内容:


 


1. <?xml version="1.0" encoding="UTF-8"?>  
2. <beans xmlns="http://www.springframework.org/schema/beans"  
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4. xmlns:aop="http://www.springframework.org/schema/aop"  
5. xmlns:context="http://www.springframework.org/schema/context"  
6. xmlns:tx="http://www.springframework.org/schema/tx"  
7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
8.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
9.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
10. >  
11.   
12. <!-- 配置sessionFactory的方式 -->  
13.        
14. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
15. <property name="configLocation">  
16. <value>classpath:config/hibernate.cfg.xml</value>  
17. </property>  
18. </bean>  
19.       
20. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
21. <property name="sessionFactory" ref="sessionFactory"></property>  
22. </bean>  
23.       
24. <!-- 第一种配置事务的方式 ,tx-->  
25.     <!--    
26. <tx:advice id="txadvice" transaction-manager="transactionManager">  
27. <tx:attributes>  
28. <tx:method name="add*" propagation="REQUIRED" no-rollback-for="com.exception.MyRuntimeException"/>  
29. <tx:method name="modify*" propagation="REQUIRED" no-rollback-for="com.exception.MyRuntimeException"/>  
30. <tx:method name="del*" propagation="REQUIRED"/>  
31. <tx:method name="*" propagation="REQUIRED" read-only="true"/>  
32. </tx:attributes>  
33. </tx:advice>  
34.       
35. <aop:config>  
36. <aop:pointcut expression="execution(* com.dao.*.*(..))" id="daoMethod"/>  
37. <aop:advisor advice-ref="txadvice" pointcut-ref="daoMethod"/>  
38. </aop:config>  
39. >  
40. <!-- 第二种配置事务的方式,代理 -->  
41.       
42. <bean id="transactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  
43.        
44.         <!-- 使用cglib方式实现动态代理  
45. <property name="proxyTargetClass" value="true"></property>  
46. >  
47.            
48. <property name="transactionManager" ref="transactionManager"></property>  
49. <property name="transactionAttributes">  
50. <props>  
51. <prop key="add*">PROPAGATION_REQUIRED, +RuntimeException</prop>  
52. <prop key="modify*">PROPAGATION_REQUIRED, +com.exception.MyRuntimeException</prop>  
53. <prop key="del*">PROPAGATION_REQUIRED</prop>  
54. <prop key="*">PROPAGATION_REQUIRED, readOnly</prop>  
55. </props>  
56. </property>  
57. </bean>  
58.       
59. <bean id="userDao" parent="transactionProxy">  
60. <property name="target">  
61.            
62. <!-- 直接写bean来代替ref标签的链接方式 -->  
63.                
64. <bean class="com.dao.impl.UserDaoImpl">  
65. <property name="sessionFactory" ref="sessionFactory"></property>  
66. </bean>              
67. </property>  
68. </bean>  
69.        
70. </beans>



hibernate.cfg.xml文件的配置内容:



 

1. <?xml version="1.0" encoding="ISO-8859-1"?>  
2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
3.   
4. <hibernate-configuration>  
5. <session-factory>  
6. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
7. <property name="hibernate.connection.url">jdbc:mysql://localhost/mytest</property>  
8. <property name="hibernate.connection.username">root</property>  
9. <property name="hibernate.connection.password">123456</property>  
10. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
11. <property name="hibernate.show_sql">true</property>  
12. <property name="hibernate.hbm2ddl.auto">update</property>  
13. <mapping resource="com/entity/User.hbm.xml"/>  
14. </session-factory>  
15. </hibernate-configuration>



以上配置文件除web.xml文件外均存在于src目录下得config文件夹中。

最后是相关Java类的编写(UserDao):





1. package com.dao;  
2.   
3. import com.entity.User;  
4.   
5. public interface UserDao {  
6.       
7. public void addUser(User user) throws Exception;  
8.       
9. public void modifyUser(User user);  
10.       
11. public void delUser(String username);  
12. }



UserDaoImpl类实现UserDao接口:



 

1. package com.dao.impl;  
2.   
3. import org.hibernate.SessionFactory;  
4. import org.springframework.orm.hibernate3.HibernateTemplate;  
5.   
6. import com.dao.UserDao;  
7. import com.entity.User;  
8. import com.exception.MyRuntimeException;  
9.   
10. public class UserDaoImpl extends HibernateTemplate implements UserDao {  
11.       
12. private SessionFactory sessionFactory;  
13.       
14. @Override  
15. public void addUser(User user) throws Exception {  
16. this.save(user);  
17. //throw new Exception();  
18. throw new RuntimeException();  
19.     }  
20.   
21. @Override  
22. public void modifyUser(User user) {  
23. this.update(user);  
24. throw new MyRuntimeException();  
25.     }  
26.   
27. @Override  
28. public void delUser(String username) {  
29. this.delete(this.load(User.class, username));  
30.     }  
31.   
32. public void selectUser() {  
33.   
34.     }  
35. }


 

两个自定义的异常,MyException和MyRuntimeException:


 


1. package com.exception;  
2.   
3. import java.io.PrintStream;  
4. import java.io.PrintWriter;  
5.   
6. public class MyException extends Exception {  
7.   
8. @Override  
9. public void printStackTrace() {  
10. super.printStackTrace();  
11.     }  
12.   
13. @Override  
14. public void printStackTrace(PrintStream arg0) {  
15. super.printStackTrace(arg0);  
16.     }  
17.   
18. @Override  
19. public void printStackTrace(PrintWriter arg0) {  
20. super.printStackTrace(arg0);  
21.     }  
22.   
23. }


 


 


1. package com.exception;  
2.   
3. public class MyRuntimeException extends RuntimeException {  
4.       
5. }



UserManager类,UserManager通过调用UserDaoImpl类的addUser()方法对数据进行持久化:


 

1. package com.service;  
2.   
3. import javax.annotation.Resource;  
4.   
5. import com.dao.UserDao;  
6. import com.entity.User;  
7.   
8. public class UserManager {  
9.       
10. private UserDao userDao;  
11.   
12. public UserDao getUserDao() {  
13. return userDao;  
14.     }  
15.   
16. public void setUserDao(UserDao userDao) {  
17. this.userDao = userDao;  
18.     }  
19.   
20. public void addUser(User user) throws Exception {  
21.         userDao.addUser(user);  
22.     }  
23.   
24. public void modifyUser(User user) {  
25.         userDao.modifyUser(user);  
26.     }  
27.   
28. public void delUser(String username) {  
29.         userDao.delUser(username);  
30.     }  
31. }


 

UserManagerAction类,该类介于jsp页面与UserManager类之间,通过接收jsp页面传过来的数据作为调用UserManager类的addUser()方法的参数:



 

1. package com.action;  
2.   
3. import javax.annotation.Resource;  
4.   
5. import com.entity.User;  
6. import com.opensymphony.xwork2.ActionSupport;  
7. import com.service.UserManager;  
8.   
9. public class UserManagerAction extends ActionSupport {  
10.       
11. private User user;  
12.   
13. private UserManager userManager;  
14.   
15. public User getUser() {  
16. return user;  
17.     }  
18.   
19. public void setUser(User user) {  
20. this.user = user;  
21.     }  
22.       
23.       
24.   
25. public UserManager getUserManager() {  
26. return userManager;  
27.     }  
28.   
29. public void setUserManager(UserManager userManager) {  
30. this.userManager = userManager;  
31.     }  
32.   
33. public String addUser() throws Exception {  
34. "---------UserAction.addUser()-----------");  
35.         userManager.addUser(user);  
36. return "success";  
37.     }  
38.       
39. public String modifyUser() {  
40. "---------UserAction.modifyUser()-----------");  
41.         userManager.modifyUser(user);  
42. return "success";  
43.     }  
44.       
45. public String delUser() {  
46. "---------UserAction.delUser()-----------");  
47.         userManager.delUser(user.getUsername());  
48. return "success";  
49.     }  
50.   
51. @Override  
52. public String execute() throws Exception {  
53. return addUser();  
54.     }  
55. }



 

User实体类:



 

1. package com.entity;  
2.   
3. import javax.persistence.Column;  
4. import javax.persistence.Entity;  
5. import javax.persistence.Id;  
6. import javax.persistence.Table;  
7.   
8. /**
9.  * 
10.  * @author yang
11.  * @hibernate.class table="T_User"
12.  */  
13. public class User {  
14.   
15. /**
16.      * @hibernate.id
17.      *   generator-class="native"
18.      */  
19. private int id;  
20.       
21. /**
22.      * @hibernate.property
23.      */  
24. private String username;  
25.   
26. /**
27.      * @hibernate.property
28.      */  
29. private String password;  
30.   
31. /**
32.      * @hibernate.property
33.      */  
34. private int age;  
35.   
36. public int getId() {  
37. return id;  
38.     }  
39.   
40. public void setId(int id) {  
41. this.id = id;  
42.     }  
43.   
44. public String getUsername() {  
45. return username;  
46.     }  
47.   
48. public void setUsername(String username) {  
49. this.username = username;  
50.     }  
51.   
52. public String getPassword() {  
53. return password;  
54.     }  
55.   
56. public void setPassword(String password) {  
57. this.password = password;  
58.     }  
59.   
60. public int getAge() {  
61. return age;  
62.     }  
63.   
64. public void setAge(int age) {  
65. this.age = age;  
66.     }  
67. }


 

最后是jsp页面代码:



 

1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
2. pageEncoding="UTF-8"%>  
3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
4. <html>  
5. <head>  
6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
7. <title>Insert title here</title>  
8. </head>  
9. <body>  
10. <form action="regist">  
11. <input name="user.username" type="text"><br>  
12. <input name="user.password" type="password"><br>  
13. <input name="user.age" type="text"><br>  
14. <input type="submit" value="注册">  
15. </form>  
16. </body>  
17. </html>



上面是添加整个用户的流程,简单来讲就是regist.jsp页面将页面数据提交到UserManagerAction,通过一系列的调用过程实现数据的持久化。在applicationContext-commons.xml文件中列举了两种配置事务的两种方式,这两种方式总的来讲本质上是一样的,只不过第二种是用代理方式。说到事务这里不得不提一句Spring的回滚机制。Spring对Exception和RuntimeException的处理方式是不一样的,如果是出现的是Exception(包含其子类)Spring会认为其是可修复的异常,这样的异常在默认情况下是不回滚的,而RuntimeException(包含其子类)则会被认为是不可恢复的异常,遇到这样的异常默认情况下是进行回滚的,所以如果我们根据自己的需要,想在抛出Exception的时候也想回滚,或在抛出RuntimeException的时候不想回滚的话就可以在applicationContext-commons.xml文件的事务配置部分配置roll-back-for(针对第一种事务配置方式),或以+,-方式(针对第二种事务配置方式)进行自定义配置即可。

标签:事务,void,配置,SSH2,user,import,com,public,User
From: https://blog.51cto.com/nethub/6564712

相关文章

  • CAS SSO配置
    基于CAS+Tomcat配置SSO一、系统配置casserver3.1.1casclient2.1.1tomcat5.5二.Tomcat配置,启用SSLa.在要安装CAS的机器上为Tomcat生成用于SSL通讯的密钥:%JAVA_HOME%/bin/keytool-genkey-aliastomcat-keyalgRSA这时需要输入密钥密码和其他参数(第一个参数CN必须设置为CAS机......
  • 怎么部署代码到git上,并配置idea 拉取代码等操作
     怎么部署代码到git上,并配置idea拉取代码等操作?1要将代码部署到Git上并配置IDEA以拉取代码,您可以按照以下步骤进行操作:231.创建一个Git仓库:首先,在Git托管平台(如GitHub、GitLab、Bitbucket等)上创建一个新的仓库。请根据您的需求进行设置,并获取仓库的URL。452.......
  • HAproxy 配置
    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它......
  • Linux系统之Drone配置文件
    /usr/local/bindrone.ymlversion:'3'networks:mxy:external:falseservices:#容器名称drone-server:container_name:drone#构建所使用的镜像image:drone/drone#映射容器内80端口到宿主机的8069端口,若修改的话,那么上面Gitee上也需要......
  • Eclipse3.6 + Tomcat7 + Jdk1.6配置
     Eclipse3.6+Tomcat7+Jdk1.6配置管理Eclipse上的tomcat的插件SysdeoEclipseTomcatLauncherpluginhttp://www.eclipsetotale.com/tomcatPlugin.html-----正文开始----一直以来都是很容易的将eclipse与tomcat结合使用,但是最近想试用tomcat7的时候,却突然发现eclipse将web服务......
  • AT模式【分布式事务】
    1、导入maven依赖<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><!--版本较低,1.3.0,因此排除--><exclusion>......
  • ELK8.8部署安装并配置xpark认证
    ELK8.8部署安装并配置xpark认证介绍  主要记录下filebeat+logstash+elasticsearch+kibana抽取过滤存储展示应用日志文件的方式;版本基于8.8,并开启xpack安全认证。由于从7.X开始就自带JDK,故这里也不展示环境配置等步骤。下载服务elasticsearch:https://artifacts.elastic.......
  • docker compose 配置 mysql 容器启动时创建数据库
    要在DockerCompose中配置MySQL容器,在容器启动时创建数据库,你可以按照以下步骤进行操作:在你的DockerCompose文件中,定义一个MySQL服务。确保你已经设置了适当的环境变量,如MYSQL_ROOT_PASSWORD和MYSQL_DATABASE。下面是一个示例的DockerCompose配置:version:'3'......
  • vscode--C++配置问题
    1、#include<iostream>报红但是能正常运行解决方案:win+Rcmd进入输入gcc-v-E-xc++-将红框中数据复制进随后保存即可......
  • m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
    1.算法仿真效果 本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下: 分别进行2路,4路,8路,16路并行串行转换      Quartusii18.0+ModelSim-Altera6.6d Starter......