spring与mybatis整合的事务问题记录
来源:互联网 发布:php mysql 预编译 编辑:程序博客网 时间:2024/05/16 12:50
接前文,继续将mybatis整合进入到spring3的框架中,
配置文件spring3-servlet.xml虽然用了transactionManager标记,但是总是尝试不成功事务,无论程序怎样抛出异常,插入语句都不会回滚。
<!-- ================================事务相关控制================================================= -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="userTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="insert*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="update*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="find*" propagation="SUPPORTS"/>
<tx:method name="get*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception"/>
<tx:method name="select*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pc" expression="execution(public * com.springdemo.usermgr.service.*.*(..))" /> <!--把事务控制在Service层-->
<aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />
</aop:config>
无奈之后,只好想别的办法。
最终解决方式,调用mysql存储过程,事务成功。存储过程代码如下:
DROP PROCEDURE IF EXISTS `test`;
CREATE PROCEDURE `test`(IN p1 VARCHAR(26), OUT pResult VARCHAR(512))
BEGIN
#声明变量必须在程序前面,置后会报错误
DECLARE flag INT DEFAULT 0;
DECLARE err INT DEFAULT 0; #声明一个整形变量err,默认值是0
SET pResult := NULL;
SET pResult :=CONCAT ( 'test',p1);
SELECT * FROM tb2 WHERE commet like Concat('%',p1, '%');-- this 返回一个结果集
START TRANSACTION; #声明事务开始
break_label:WHILE flag>10 DO
insert into suser(userName,pwd,signUpTime)values(CONCAT('user',flag),'8899',sysdate());
set flag = flag+1;
IF flag=5 THEN
set err=1;
LEAVE break_label; #跳出循环
END if;
END WHILE break_label;
IF err=0 THEN
commit;
ELSE
rollback;
END IF;
END
TestMyBatisDao.java调用代码
package com.springdemo.usermgr.dao;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import com.springdemo.mybatis.maper.SUserMapper;
import com.springdemo.usermgr.vo.SUser;
import com.springdemo.usermgr.vo.Stb2;
@Repository("testDao")
public class TestMyBatisDao extends SqlSessionDaoSupport{
/**
* 按主键删除一条记录,
* @param Stb2
* @return
* @throws Exception
*/
public int testSQL(String id) throws Exception{
SqlSession session =this.getSqlSession();
SUser SUser = (SUser) session.selectOne("com.springdemo.mybatis.maper.SUserMapper.selectSUser", 1);
SUser SUser2 = session.selectOne("com.springdemo.mybatis.maper.SUserMapper.selectSUser", 2);
System.out.println(SUser);
System.out.println(SUser2.getPwd());
Map<String, Object> parms = new HashMap<String, Object>();
parms.put("queryStr", "的");
SUserMapper spMapper = session.getMapper(SUserMapper.class);
List<Stb2> as=spMapper.getTestProc(parms);
String outPara=(String) parms.get("retStr");
System.out.println(outPara);
System.out.println(as.toString());
// SUser user3 = new SUser();
// user3.setUserName("中文名zhou3");
//
// user3.setSignUpTime(new Date());
// for(int i=0;i<=10;i++){ //插入10条记录
// user3.setPwd("xxxx"+i);
// System.out.println("插入前主键为:"+user3.getId());
// session.update("com.springdemo.mybatis.maper.SUserMapper.insertSUser", user3);//插入操作
// System.out.println("插入后主键为:"+user3.getId());
// if(i>5) throw new Exception("测试事务异常类"); //非事务方式将会插入6条记录
// }
return 0;
}
}
Stb2.xml存储过程的定义
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springdemo.mybatis.maper.SUserMapper">
<resultMap type="com.springdemo.usermgr.vo.Stb2" id="itemResult">
</resultMap>
<select id="getTestProc" parameterType="java.util.Map" statementType="CALLABLE"
resultMap="itemResult">
{call test.test(
#{queryStr,jdbcType=VARCHAR,mode=IN},
#{retStr,jdbcType=VARCHAR,mode=OUT})
}
</select>
</mapper>
- spring与mybatis整合的事务问题记录
- spring整合mybatis的问题记录
- spring mvc与mybatis事务整合
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- spring mvc与mybatis事务整合
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- MyBatis学习笔记(十二)spring与Mybatis整合事务
- spring整合mybatis记录
- MyBatis与Spring的整合
- mybatis与spring的整合
- mybatis与spring的整合
- Spring 与 MyBatis 的整合
- SPRING与MYbatis的整合
- Spring与MyBatis的整合
- 关于win7下修改hosts文件提示无法保存的问题
- LinearLayout中组件右对齐
- Linux网络编程(1):TCP客户服务程序设计
- 通过excel向数据库(ORACLE)里插入数据
- mysql的使用25
- spring与mybatis整合的事务问题记录
- 九度_题目1514:数值的整数次方
- 收录 Uboot 详解
- unity的character controller方法修改
- 编程算法 - 旋转矩阵 代码(C)
- iOS_38_手势
- 用户隐私谁来保障?互联网安全性堪忧
- Unicode 通用类别
- 如何使用npm来管理你的Node.js依赖