Spring事务配置的五种方式

转载大神总结:

https://blog.csdn.net/xuanjiewu/article/details/51604967;

自己总结:这里只总结spring编程时事物管理

附上源码加注释

两个方法放到一个类中,直接写你的逻辑调用即可。

/**
* jdbc批量处理插入操作
* @param list
* @return
*/
public int setOneExtractSetTwoTemplate(List<TwoQuotation> list){
List<List<Object>> listListTwo = new ArrayList<List<Object>>();
String sqlTwo ="";
List<List<Object>> listList = new ArrayList<List<Object>>();
for (int i = 0; i < list.size(); i++) {
List<Object> list1 = new ArrayList<Object>();
list1.add(list.get(i).getProjId());
.............
listList.add(list1);
}

String sql ="INSERT INTO DOC_SXJJHDXM_PBJL_repeated (docid,zbcs, bdh, bdname,"+
"tbdwname,wzbm,product, ggxh,"+
"jldw, dwnum, zzdj, wzth, ysccj, ppxh, chandi, taxes, tjsx, gys_uuid,"+
" wz_uuid,"+
"remark, repeate, address, starttime, endtime )"+
"VALUES"+
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

String flag = collectiveTransaction(listList, sql, listListTwo, sqlTwo);
if(flag.equals("yes")){
return 1;//代表成功
}
return 0;//0代表失败
}

/*parms
*
* 批量操作数据*/
@SuppressWarnings("unchecked")
public String collectiveTransaction(final List<List<Object>> listList,String sql,final List<List<Object>> listListTwo,
String sqlTwo) {

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//事务的隔离级别,开启新事物
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
TransactionStatus status = transactionManager.getTransaction(def);//获得事务的状态
String flag = "yes";
try{

if(listListTwo.size()>0){
jdbcTemplate.execute(sqlTwo, new PreparedStatementCallback() {
public Object doInPreparedStatement(PreparedStatement ps) throws SQLException {
for (List<Object> list : listListTwo) {
for (int i = 0; i < list.size(); i++) {
ps.setString(i+1, (String) list.get(i));
}
ps.addBatch();
}
ps.executeBatch(); // 数据不会持久化到数据库中
return null ;
}
});
}

if(listList.size()>0){
jdbcTemplate.execute(sql, new PreparedStatementCallback() {
public Object doInPreparedStatement(PreparedStatement ps) throws SQLException {
for (List<Object> list : listList) {
for (int i = 0; i < list.size(); i++) {
ps.setString(i+1, (String) list.get(i));
}
ps.addBatch();
}
ps.executeBatch(); // 数据不会持久化到数据库中
return null ;
}
});
}
transactionManager.commit(status); // 持久化所有数据

}catch (Exception e){
transactionManager.rollback(status); // 所有的数据都会rollback
e.printStackTrace();
flag = "no";
}
return flag;
}

spring事物的管理方式的更多相关文章

  1. Spring框架——事务管理方式搭建一个小的项目

    学习Spring框架,通过事务管理的方式搭建一个小的项目,该项目可以查询对数据库中的图书库存数量进行修改. 首先,使用MVC分层的设计模式思想搭建项目目录结构. 此部分代码源码之中都有相关注释,所以尽 ...

  2. Spring管理事物两种方式

    Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...

  3. Spring事物管理--相关要点及配置事物管理器

    事务的四大特征 1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并 ...

  4. java陷阱之spring事物管理导致锁无效

    模拟锁情况无效 1.创建一个表 SET NAMES utf8mb4; ; DROP TABLE IF EXISTS `demo`; CREATE TABLE `demo` ( `id` ) NOT N ...

  5. Spring事物管理简介 (转)

    一.事物1.什么是事物 事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败 2.事物的特性 原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生 一致性:事物前后数据 ...

  6. spring 事物(三)—— 声明式事务管理详解

    spring的事务处理分为两种: 1.编程式事务:在程序中控制事务开始,执行和提交:详情请点此跳转: 2.声明式事务:在Spring配置文件中对事务进行配置,无须在程序中写代码:(建议使用) 我对&q ...

  7. Spring事物管理机制简单学习

    首先spring并不直接管理事物,而是提供了多种事物管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现. Spring管理事物的接口是org.s ...

  8. 尚硅谷spring 事物管理

    接下来我们重点来学习spring中的事务管理 接下来我们通过代码来实现 spring实现事物我们采用aop的方式来实现 获得连接和手动设置事物相当于@before标注的前置通知,conn.commit ...

  9. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

随机推荐

  1. How to manage concurrency in Django models

    How to manage concurrency in Django models The days of desktop systems serving single users are long ...

  2. POJ3087(模拟)

    #include"iostream" #include"string" #include"map" using namespace std; ...

  3. java流类

    总结:new FileInputStream package com.ds; import java.io.*; import com.da.fgbv; public class rter { pub ...

  4. translate 实现元素垂直居中

    <div class="demo2"> <span>about me</span> </div> css .demo2{ width ...

  5. rails Ajax--利用Jquery

    view function init_tree(product_name) { var htmlobj=$.ajax({url: "get_all_file?param=" + p ...

  6. Jquery隐藏相同name的div

    $("div:[name=divName]").hide(); divName(自己div的Name)

  7. makefile基本语法

    多文件编程的小例子功能:在main.c里面调用其他两个源文件里面的函数,然后输出字符串. 1.main.c    #include"mytool1.h"#include" ...

  8. [51nod1106]质数检测

    解题关键: 根据质数的定义,在判断一个数n是否是质数时,我们只要用1至n-1去除n,看看能否整除即可.但我们有更好的办法.先找一个数m,使m的平方大于n,再用<=m的质数去除n(n即为被除数), ...

  9. springboot thymeleaf org.xml.sax.SAXParseException错误

    SpringBoot越来越受欢迎,而官方推荐的模板是thymeleaf ,但是其语法太过严格,使用过程中一不留心就会出现org.xml.sax.SAXParseException错误 其中主要是下面这 ...

  10. e.key && e.which && e.keyCode

    官方推荐用e.key来描述状态码,其他两种属性可能会在未来被废弃. 且key,keyCode和which 为只读属性   但是会有浏览器兼容性的问题,可以采用如下代码:   let key = ''; ...