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;
}

最新文章

  1. 【WP开发】记录屏幕操作
  2. js封装包
  3. JAVA IO 序列化与设计模式
  4. JS常用方法函数整理
  5. jQuery获取Ajax函数的返回值
  6. Swift - 实现点击cell动态修改高度
  7. java日期的运用(DateUtils工具类)
  8. Nodejs in Visual Studio Code 04.Swig模版
  9. nm命令
  10. C# 截取图片区域,并返回所截取的图片
  11. 论文写作office实用技巧
  12. PHP算法之冒泡排序
  13. npm火速上手
  14. getRealPath函数编译报错问题
  15. C语言强化——链表(2)
  16. FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决
  17. XML—代码—DOM4J解析
  18. SpringMVC的实现过程
  19. 【agc019D】Shift and Flip
  20. Spoken English Practice (yesterday) (Look, I just wanted to apologize again for yesterday? It&#39;s fine, I know you didn&#39;t mean it. / when I say it, I mean it.)

热门文章

  1. AtCoder Grand Contest 015 题解
  2. 快速排序的JavaScript实现
  3. navicat导入sql文件
  4. 如何在windows 2003(虚拟主机)上面部署MVC3
  5. 上传下载,使用,commons-fileupload,commons-io来加载上传下载
  6. Select\Poll\Epoll异步IO与事件驱动
  7. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 &amp; PopUp菜单
  8. hdu 5616 Jam&#39;s balance 正反背包+转换
  9. redhat无法注册RHN的解决办法
  10. [51nod1267]4个数和为0(预处理+双指针)