-
spring3 struts2 ibatis3 整合 在使用事物时对异常的处理30
我现在故意执行sql报错 测试事物的
我要执行两次添加操作 两次添加同样的数据 报唯一约束的错 然后让他回滚 返回 根据条件返回值这是我想要的效果
现在是 发现有异常就回滚 可是由于有异常
方法中的
if(res1==res2&&res1==1)
return 0;else return -1;
就不执行了
现在想让事物可以正常使用,也能根据执行sql的结果进行判断。
对于异常该怎么处理。
--------------------------------------------------------------------------------userdao
package com.haitu.dao.impl;
import java.sql.SQLException;
import java.util.List;import org.apache.ibatis.session.SqlSession;
import com.haitu.model.UserInf;
public class UserDao implements com.haitu.dao.UserDaoInf{
private SqlSession sqlSession ;
public UserDao(SqlSession sqlSession) {
// TODO Auto-generated constructor stub
this.sqlSession=sqlSession;
}
public int addUser(UserInf userInf) {
int res1= sqlSession.update("UserInf.addUser",userInf);
int res2= sqlSession.update("UserInf.addUser",userInf);//??????此处执行事物问题 执行两次添加操作 两次添加同样的数据 报唯一约束的错 然后让他回滚
//由于出现异常下面的判断代码执行不了if(res1==res2&&res1==1)
return 0;else return -1;
}
public List<UserInf> selectUser() {
return sqlSession.selectList("UserInf.selectUser");
}
}------------------------------------------------------------------spring配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="WEB-INF/jdbc.properties"></property>
</bean>
<!-- 配置数据库 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driverClass}"> </property>
<property name="jdbcUrl" value="${jdbcUrl}"> </property>
<property name="user" value="${user}"> </property>
<property name="password" value="${password}"> </property>
<property name="maxPoolSize" value="${maxPoolSize}"> </property>
<property name="minPoolSize" value="${minPoolSize}"> </property>
<property name="maxIdleTime" value="${maxIdleTime}"> </property>
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"> </property>
</bean>
<!-- 加载 abities
SqlSessionFactoryBean 这里是与ibatis以前版本区别的地方
这里不是继承 sprig的FactoryBean 因为spring的版本没有更新 由ibatis jar包自己开发类继承了
spring的FactoryBean类
另外 必备属性:dataSource
-->
<bean id="sqlMapClient"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="configLocation" value="classpath:ibatis.xml"></property>
</bean>
<!-- 把加载了 配置文件的 sqlMapClient 注入 SqlSessionTemplate模板-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlMapClient" />
</bean>
<!-- 通过spring 把已经加载ibatis配置文件sqlMapClient bean 注入到 dao类 供
dao类查询数据 -->
<bean id="UserDao" class="com.haitu.dao.impl.UserDao">
<!-- 使用构造器注入 -->
<constructor-arg ref="sqlSession" />
</bean>
<!-- pojo -->
<bean id="UserAction" class="com.haitu.action.UserAction" scope="prototype" >
<property name="userDao" ref="UserDao"></property>
</bean>
<!-- 事务的定义 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<aop:config>
<aop:pointcut id="daoMethods" expression="execution(public * com.haitu.dao.UserDaoInf.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods"/>
</aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
</beans>--------------------------------------------------------------------------------struts2配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
<!-- 将json串作为text返回-->
<action name="userinf_*" class="UserAction" method="{1}">
<result type="stream" name="plain">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
</package>
</struts>--------------------------------------------------------------------------------ibatis配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><configuration>
<!-- 对应一些POJO类 然后可以在mapper中引用Emp 等就等于引用这个类类型-->
<typeAliases>
<typeAlias type="com.haitu.model.UserInf" alias="UserInf" />
</typeAliases>
<!-- 加载相关ibatis的映射文件 -->
<mappers>
<mapper resource="com/haitu/model/UserInf.xml" />
</mappers></configuration>
--------------------------------------------------------------------------------useraction 中的方法
public String addUserInf() {
try {
inputStream = new StringBufferInputStream(new String("{success: true, msg:\"添加成功\"}".getBytes("utf-8"),"iso-8859-1"));
} catch (Exception e) {
// TODO: handle exception
}
int res=userDao.addUser(userinf);
System.out.println("----------------"+res);
return "plain";}
2012年3月28日 17:00
3个答案 按时间排序 按投票排序
-
public int addUser(UserInf userInf) throws Exception{ try { int res1= sqlSession.update("UserInf.addUser",userInf); int res2= sqlSession.update("UserInf.addUser",userInf); if(res1==res2&&res1==1) return 0; else return -1; } } catch(Exception e){throw new Exception(e);}
应该要将RuntimeException抛出!2012年3月30日 19:06
-
呃。。。错了,没注意return。
你又想容易处理发生的异常,又要返回,肯定不可能的。因为发生异常后,不处理的话,你的return就没有意义了,程序已经跳转到别的逻辑了。
你可以把我上面的代码里面的catch里面不要抛出来异常,让程序返回,但是,也要把异常返回回来,你可以把参数改成map,把需要返回的正常结果,和异常对象都放进map里面,程序执行完以后,从map里取return的值,然后看是否有异常,有的话,就再抛出去,让容器给你处理,回滚事物什么的。
但是。。。。这样的程序。。。太烂了,会被后面维护的人骂死。2012年3月28日 19:03
-
都异常了,后面的代码必然执行不了,如果一定要执行,可以这样:
public int addUser(UserInf userInf) { try{ int res1= sqlSession.update("UserInf.addUser",userInf); int res2= sqlSession.update("UserInf.addUser",userInf); //??????此处执行事物问题 执行两次添加操作 两次添加同样的数据 报唯一约束的错 然后让他回滚 } catch (Exception e) { //由于出现异常下面的判断代码执行不了 if(res1==res2&&res1==1) return 0; else return -1; throw e; //重新把异常抛出去 } }
2012年3月28日 18:56
相关推荐
当我们把Spring、Struts2和iBatis整合在一起时,可以构建出一个高效、模块化的Web应用。Spring作为整体的框架容器,负责管理所有的Bean,包括Struts2和iBatis的相关组件。Struts2处理HTTP请求,调用Spring管理的业务...
在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...
此外,还需要设置好数据源、事务管理器以及各框架之间的集成点,如使用Spring的DelegatingFilterProxy实现Struts2的过滤器配置。 总的来说,"spring+struts+ibatis"是一个成熟的Java Web开发解决方案,它提供了良好...
**Spring、Struts2 和 iBatis 整合详解** 在Java Web开发中,Spring、Struts2 和 iBatis 是三个非常重要的框架。它们分别负责不同层面的任务:Spring 提供了全面的依赖注入(DI)和面向切面编程(AOP),用于管理...
在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...
【Spring_Struts_Ibatis_Mysql Demo】是一个典型的Java Web应用程序示例,它整合了四个关键的技术框架:Spring、Struts、iBatis和MySQL数据库。这个项目旨在展示如何在实际开发中有效地集成这些组件,创建一个功能...
《Spring3+Struts2+Ibatis:企业级应用开发框架整合详解》 在现代企业级Web应用开发中,Spring、Struts2和Ibatis是常见的三大组件,它们各自负责不同的职责,共同构建出高效、灵活的应用架构。Spring作为全能型的...
在"Spring+Struts2+Ibatis"的整合中,通常会使用Spring作为整个应用的基础架构,提供DI和AOP功能,管理Struts2的Action和iBatis的SqlSession。Struts2作为前端控制器,处理HTTP请求,调用Spring管理的Service层方法...
在本项目整合中,我们将探讨如何将三个著名的技术框架——Spring、Struts2和IBatis——集成在一起,创建一个高效且灵活的企业级Web应用程序。这个整合通常被称为SSH(Spring、Struts2、Hibernate或iBatis)框架栈,...
在IT行业中,构建Web应用程序是一项常见的任务,而Spring、iBatis和Struts2是三个非常流行的开源框架,它们在Java EE开发中扮演着重要角色。这个“spring3 ibatis struts2 搭建的简单项目”就是一个利用这三个框架...
Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的动作控制、依赖注入及持久层操作。本项目整合了这三个框架,并使用MySQL作为数据库,实现了一个基础的用户登录注册查询删除的功能...
struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例
在这个特定的案例中,我们关注的是"Ibatis Spring Struts"的整合。这三个框架分别是:Ibatis(一个轻量级的持久层框架),Spring(一个全面的企业级应用开发框架),以及Struts(一个用于构建MVC(Model-View-...
《基于Maven的Spring、Struts2、iBatis与Velocity整合实践》 在Web开发领域,Spring、Struts2、iBatis和Velocity是四个非常重要的组件,它们各自承担着不同的职责,共同构建出高效、灵活的Web应用程序。本实例以...
本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...
在与Struts2和iBatis的整合中,Spring主要负责管理Bean的生命周期和依赖关系,以及事务的统一管理。Spring的事务管理可以基于编程式或者声明式,后者通过@Transactional注解实现,更符合开闭原则,降低了代码的耦合...
在构建基于Spring、Struts和iBatis的项目时,首先需要下载这些框架的最新版本,并进行相应的准备工作。 ##### 1. Struts2框架 Struts2是一个流行的Java Web应用开发框架,它继承了WebWork的特性并得到了Apache基金...
5. **整合Spring和Struts2**:使用Spring插件Struts2-Spring-plugin,将Spring管理的Bean注入到Struts2的Action中。 6. **配置数据源**:在Spring中配置数据源,以便iBatis能够连接数据库。 7. **编写Mapper接口和...
这个名为"SpringStruts2IBatis"的项目整合了这三个框架,为开发者提供了一个快速开发CRUD(创建、读取、更新、删除)功能的基础平台,可以直接在MyEclipse环境中部署和运行。 **Spring框架**:Spring是Java领域最...
在"Struts2+Spring+iBatis整合的小例子"中,开发者通常会做以下工作: 1. **环境配置**:首先,确保JDK、Tomcat、MySQL等基础环境的安装和配置。然后,将Struts2、Spring、iBatis的相关jar包添加到项目的类路径中。...