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. Poj 2533 Longest Ordered Subsequence(LIS)

    一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...

  2. 用Raspberry Pi搭建Azure IOT解决方案

    Raspberry Pi是一款基于Linux的单板机电脑.它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件刺激在学校的基本计算机科学教育.树莓派配备一枚博通(Broadcom)出产的ARM架构 ...

  3. POJ3630(Trie树)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26385   Accepted: 7957 Descr ...

  4. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  5. Java中使用同步关键字synchronized需要注意的问题

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...

  6. javascript基础之回调函数

    简单来说,回调函数:也就是将要执行的函数. 回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫 ...

  7. javascript面向对象的测试实例

  8. Pycharm的远程代码编辑

    作为一个从java转到python的程序猿,一直觉得python的远程代码调试能力不如java,远程调试一把需要各种改代码,牵扯到eventlet库的时候,问题就更严重,需要调整eventlet的各种 ...

  9. Robots.txt在项目中的运用

    在开发公司一个项目的过程中,有这样一个需求 该网站上面有一个search功能,可以search该网站上的任何包括特定内容的网页 现在有一个需求,就是针对几个特定的页面,我们希望网站上的search功能 ...

  10. nginx优化配置大全

    由于面试被问到nginx优化做过哪些 后来发现,其实做过的也不少,忘了的更不少,因此写个博客记录一下(里面有一些内容来源于其他作者). 配置文件样例为生产环境样例. 1.nginx基本优化 安装方式有 ...