`
toknowme
  • 浏览: 140737 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring+Mybatis 手动控制事务

 
阅读更多

@Override

   public boolean testDelete(String jobCodethrows Exception {

      boolean flag = false;

      //1.获取事务控制管理器

      DataSourceTransactionManager transactionManager = HqznContext.getBean(

           "transactionManager", DataSourceTransactionManager.class);

      //2.获取事务定义

      DefaultTransactionDefinition def = new DefaultTransactionDefinition();

      //3.设置事务隔离级别,开启新事务

      def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

      //4.获得事务状态

      TransactionStatus status = transactionManager.getTransaction(def);

      try {

        //5.具体的数据库操作(多个)

        BOBaseJob r = new BOBaseJob();

        r.setJobCode("SW001");

        r.setJobName("事务001");

        BOBaseJobMapper.deleteByPrimaryKey(jobCode);

        BOBaseJobMapper.insert(r);

        flag = true;

        transactionManager.commit(status);

      catch (Exception e) {

        transactionManager.rollback(status);

      }

      return flag;

   }

 

结合日志分析:

 

 

(1)获取Mybatis下的sqlSession

DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Creating SqlSession with JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@64861c5d]


DEBUG: [java.sql.Connection.(28)debug] - ooo Connection Opened

(2)Spring控制事务

DEBUG: [org.mybatis.spring.transaction.SpringManagedTransaction.(28)debug] - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@64861c5d] will be managed by Spring

(3)事务开启

DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eed9a0e]

DEBUG: [java.sql.PreparedStatement.(28)debug] - ==>  Executing: update BASE_JOB set FLAG_YN = 'N' where JOB_CODE = ? 
DEBUG: [java.sql.PreparedStatement.(28)debug] - ==> Parameters: 10(String)

(4)释放SqlSession

DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eed9a0e]

(5)获取当前事务

DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eed9a0e] from current transaction


DEBUG: [java.sql.PreparedStatement.(28)debug] - ==>  Executing: insert into BASE_JOB (JOB_CODE, JOB_NAME, CREATE_PERSON, FLAG_YN, MODIFY_PERSON, CREATE_TIME, MODIFY_TIME) values (?, ?, ?, 'Y', ?, ?, ?) 
DEBUG: [java.sql.PreparedStatement.(28)debug] - ==> Parameters: SW001(String), 事务001(String), null, null, null, null

 

异常信息:

DEBUG: [com.alibaba.druid.pool.PreparedStatementPool.(123)put] - {conn-10002, pstmt-20007} enter cache
INFO : [org.springframework.beans.factory.xml.XmlBeanDefinitionReader.(317)loadBeanDefinitions] - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
INFO : [org.springframework.jdbc.support.SQLErrorCodesFactory.(126)<init>] - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d595930]
事务回滚:
### Error updating database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 违反了 PRIMARY KEY 约束“PK_BASE_JOB”。不能在对象“dbo.BASE_JOB”中插入重复键。重复键值为 (SW001)。
### The error may involve com.hqzn.mybatis.dao.interfaces.BOBaseJobMapper.insert-Inline
### The error occurred while setting parameters
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 违反了 PRIMARY KEY 约束“PK_BASE_JOB”。不能在对象“dbo.BASE_JOB”中插入重复键。重复键值为 (SW001)。
; SQL []; 违反了 PRIMARY KEY 约束“PK_BASE_JOB”。不能在对象“dbo.BASE_JOB”中插入重复键。重复键值为 (SW001)。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 违反了 PRIMARY KEY 约束“PK_BASE_JOB”。不能在对象“dbo.BASE_JOB”中插入重复键。重复键值为 (SW001)。

 

 

(6)释放SqlSession
DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eed9a0e]
DEBUG: [org.mybatis.spring.SqlSessionUtils.(28)debug] - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eed9a0e]

2
3
分享到:
评论

相关推荐

    struts2+spring+mybatis框架

    MyBatis消除了几乎所有的JDBC代码和参数手动设置,以及结果集的解析。在Struts2+Spring+MyBatis的架构中,MyBatis负责与数据库交互,通过XML或注解方式配置SQL语句,使得数据库操作更加灵活且易于维护。 **整合过程...

    《spring+mybatis 企业应用实战》源码、类库全资料

    1. **配置文件**:包括Spring的bean配置文件(如`applicationContext.xml`)和MyBatis的配置文件(如`mybatis-config.xml`),它们定义了数据源、事务管理器、SqlSessionFactory以及Mapper接口的扫描路径。...

    springmvc+spring+mybatis开发框架搭建代码,已使用,完美运行。

    SSM(Spring MVC + Spring + MyBatis)是Java Web开发中常见的三层架构组合,它将Spring MVC作为表现层框架,Spring作为业务层容器,MyBatis作为数据访问层框架。下面将详细介绍这三个组件以及它们如何协同工作。 *...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。 业务方案: 1、批处理定期提交。 2、并行批处理:并行处理工作。 3、...

    Spring+Mybatis+Mysql项目框架

    1. **Spring框架**:Spring是一个开源的Java平台,它为开发人员提供了全面的应用程序框架服务,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。Spring的核心特性可以用来创建轻量级、松耦合的Java应用程序。...

    SpringMVC+Spring+Mybatis集成开发环境

    此外,Spring还提供了事务管理、AOP(面向切面编程)等功能,可以方便地管理和控制业务逻辑。 Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置...

    SSM框架-详细整合教程(Spring+SpringMVC+MyBatis).pdf

    - `spring-mybatis.xml`中配置数据源、事务管理器、MyBatis的SqlSessionFactory以及Mapper扫描器。 - `spring-mvc.xml`中配置DispatcherServlet、视图解析器、拦截器等。 6. **资源文件** - 配置数据库连接的`...

    Spring+MYBatis企业应用实战pdf

    Spring是一个全面的Java应用框架,提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等,而MyBatis则是一个轻量级的持久层框架,它专注于SQL映射,将数据库操作与业务逻辑分离。...

    spring+mybatis项目简单例子

    Spring是一个全面的后端框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,而MyBatis则是一个强大的持久层框架,简化了SQL操作与Java对象之间的映射。下面将详细解释这些知识点。 1. **...

    ssm(Spring+SpringMVC+MyBatis)整合框架

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它允许开发者直接编写SQL语句,既保持了SQL的灵活性,又简化了与数据库交互的工作。 在SSM整合中,Spring作为整体的容器,负责管理所有组件,包括...

    eclipse+maven+springmvc+spring+mybatis案例附带mysql数据库

    【标题】"eclipse+maven+springmvc+spring+mybatis案例附带mysql数据库"是一个典型的Java Web开发项目,它涵盖了多个关键的技术栈,包括Eclipse IDE、Maven构建工具、Spring MVC作为MVC框架、Spring核心框架以及...

    基于maven+spring+spring mvc+mybatis 框架web项目

    在IT行业中,构建Web应用程序是一项常见的任务,而“基于maven+spring+spring mvc+mybatis框架web项目”提供了一个适用于初学者的学习路径。这个项目利用了四个关键的技术组件,它们分别是Maven、Spring、Spring MVC...

    spring+mybatis+maven

    2. **配置整合**:Spring的ApplicationContext配置文件可以管理MyBatis的SqlSessionFactory,通过Spring的Bean定义来配置数据源、事务管理器以及MyBatis的SqlSessionTemplate或SqlSessionDaoSupport,实现Spring与...

    maven+spring MVC+Mybatis+jetty+mysql

    "maven+spring MVC+Mybatis+jetty+mysql" 的组合是常见的开发栈,它涵盖了项目管理、前端控制器、持久层操作、应用服务器以及数据库管理等多个层面。下面将详细介绍这些关键技术及其在实际应用中的作用。 1. Maven...

    maven+struts2+spring+mybatis+springMVC

    Spring 提供了对事务管理、数据访问/集成(包括JDBC、ORM)、Web应用、任务调度等多方面的支持,是整个应用的基础架构。 4. MyBatis:MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...

    springMVC+spring+mybatis+maven框架代码

    【标题】"springMVC+spring+mybatis+maven框架代码"所涉及的知识点主要集中在四个核心组件上:Spring MVC、Spring、MyBatis和Maven。这些是Java Web开发中常用的四大框架,它们共同构建了一个高效、灵活的后端应用...

    spring+springMvc+mybatis完美整合项目

    3. 配置MyBatis:编写MyBatis的配置文件,包括数据源、事务管理器、SqlSessionFactory,以及Mapper接口和Mapper XML文件的映射。 4. 整合MyBatis与Spring:使用Spring的SqlSessionTemplate或者SqlSessionDaoSupport...

    SpringMvc+Spring+MyBatis+Maven项目

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它允许开发者编写动态的SQL,简化了数据库操作,使得数据库访问更加简单高效。 4. **Maven**:Maven是Java项目管理工具,主要用于项目的构建、依赖...

    spring+springmvc+mybatis完整包

    MyBatis与Spring框架结合使用时,可以实现声明式事务管理,简化了事务处理的代码。 这个压缩包中的“3.1.1jar”可能是Spring、SpringMVC和MyBatis的特定版本的库文件,这些库文件是集成这三个框架所必需的。确保...

    Springmvc+Spring+Mybatis+Maven简单的增删改查

    Spring MVC、Spring、MyBatis 和 Maven 是Java开发中非常重要的四大组件,它们共同构建了一个高效、灵活的Web应用程序框架。下面将详细解释这四个组件的功能及其在项目中的作用。 **1. Spring MVC** Spring MVC 是 ...

Global site tag (gtag.js) - Google Analytics