0 0

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个答案 按时间排序 按投票排序

0 0

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

呃。。。错了,没注意return。
你又想容易处理发生的异常,又要返回,肯定不可能的。因为发生异常后,不处理的话,你的return就没有意义了,程序已经跳转到别的逻辑了。

你可以把我上面的代码里面的catch里面不要抛出来异常,让程序返回,但是,也要把异常返回回来,你可以把参数改成map,把需要返回的正常结果,和异常对象都放进map里面,程序执行完以后,从map里取return的值,然后看是否有异常,有的话,就再抛出去,让容器给你处理,回滚事物什么的。

但是。。。。这样的程序。。。太烂了,会被后面维护的人骂死。

2012年3月28日 19:03
0 0

都异常了,后面的代码必然执行不了,如果一定要执行,可以这样:

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整合的jar包

    当我们把Spring、Struts2和iBatis整合在一起时,可以构建出一个高效、模块化的Web应用。Spring作为整体的框架容器,负责管理所有的Bean,包括Struts2和iBatis的相关组件。Struts2处理HTTP请求,调用Spring管理的业务...

    struts2+spring3+ibatis项目整合案例

    在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...

    spring+struts+ibatis

    此外,还需要设置好数据源、事务管理器以及各框架之间的集成点,如使用Spring的DelegatingFilterProxy实现Struts2的过滤器配置。 总的来说,"spring+struts+ibatis"是一个成熟的Java Web开发解决方案,它提供了良好...

    Spring+Struts2+Ibatis整合例子

    **Spring、Struts2 和 iBatis 整合详解** 在Java Web开发中,Spring、Struts2 和 iBatis 是三个非常重要的框架。它们分别负责不同层面的任务:Spring 提供了全面的依赖注入(DI)和面向切面编程(AOP),用于管理...

    Spring+Struts+ibatis讲解

    在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...

    Spring_Struts_Ibatis_Mysql Demo

    【Spring_Struts_Ibatis_Mysql Demo】是一个典型的Java Web应用程序示例,它整合了四个关键的技术框架:Spring、Struts、iBatis和MySQL数据库。这个项目旨在展示如何在实际开发中有效地集成这些组件,创建一个功能...

    spring3+struts2+ibatis

    《Spring3+Struts2+Ibatis:企业级应用开发框架整合详解》 在现代企业级Web应用开发中,Spring、Struts2和Ibatis是常见的三大组件,它们各自负责不同的职责,共同构建出高效、灵活的应用架构。Spring作为全能型的...

    Spring+Struts2+Ibatis

    在"Spring+Struts2+Ibatis"的整合中,通常会使用Spring作为整个应用的基础架构,提供DI和AOP功能,管理Struts2的Action和iBatis的SqlSession。Struts2作为前端控制器,处理HTTP请求,调用Spring管理的Service层方法...

    Spring+Struts2+IBatis 项目整合(四)

    在本项目整合中,我们将探讨如何将三个著名的技术框架——Spring、Struts2和IBatis——集成在一起,创建一个高效且灵活的企业级Web应用程序。这个整合通常被称为SSH(Spring、Struts2、Hibernate或iBatis)框架栈,...

    spring3 ibatis struts2 搭建的简单项目

    在IT行业中,构建Web应用程序是一项常见的任务,而Spring、iBatis和Struts2是三个非常流行的开源框架,它们在Java EE开发中扮演着重要角色。这个“spring3 ibatis struts2 搭建的简单项目”就是一个利用这三个框架...

    Struts2 Spring Ibatis mysql 项目整合

    Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的动作控制、依赖注入及持久层操作。本项目整合了这三个框架,并使用MySQL作为数据库,实现了一个基础的用户登录注册查询删除的功能...

    struts2、spring、ibatis整合实例

    struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例

    ibatis spring struts 整合案例

    在这个特定的案例中,我们关注的是"Ibatis Spring Struts"的整合。这三个框架分别是:Ibatis(一个轻量级的持久层框架),Spring(一个全面的企业级应用开发框架),以及Struts(一个用于构建MVC(Model-View-...

    maven构建spring struts2 ibatis velocity小实例

    《基于Maven的Spring、Struts2、iBatis与Velocity整合实践》 在Web开发领域,Spring、Struts2、iBatis和Velocity是四个非常重要的组件,它们各自承担着不同的职责,共同构建出高效、灵活的Web应用程序。本实例以...

    ibatis+Spring+struts2整合实例

    本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...

    struts2、spring、ibatis整合

    在与Struts2和iBatis的整合中,Spring主要负责管理Bean的生命周期和依赖关系,以及事务的统一管理。Spring的事务管理可以基于编程式或者声明式,后者通过@Transactional注解实现,更符合开闭原则,降低了代码的耦合...

    spring、struts、ibatis框架搭建流程

    在构建基于Spring、Struts和iBatis的项目时,首先需要下载这些框架的最新版本,并进行相应的准备工作。 ##### 1. Struts2框架 Struts2是一个流行的Java Web应用开发框架,它继承了WebWork的特性并得到了Apache基金...

    struts2 spring ibatis 整合架构

    5. **整合Spring和Struts2**:使用Spring插件Struts2-Spring-plugin,将Spring管理的Bean注入到Struts2的Action中。 6. **配置数据源**:在Spring中配置数据源,以便iBatis能够连接数据库。 7. **编写Mapper接口和...

    SpringStruts2IBatis

    这个名为"SpringStruts2IBatis"的项目整合了这三个框架,为开发者提供了一个快速开发CRUD(创建、读取、更新、删除)功能的基础平台,可以直接在MyEclipse环境中部署和运行。 **Spring框架**:Spring是Java领域最...

    Struts2+Spring2+iBatis2整合的例子

    在"Struts2+Spring+iBatis整合的小例子"中,开发者通常会做以下工作: 1. **环境配置**:首先,确保JDK、Tomcat、MySQL等基础环境的安装和配置。然后,将Struts2、Spring、iBatis的相关jar包添加到项目的类路径中。...

Global site tag (gtag.js) - Google Analytics