spring事物的管理方式
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;
}
最新文章
- 【WP开发】记录屏幕操作
- js封装包
- JAVA IO 序列化与设计模式
- JS常用方法函数整理
- jQuery获取Ajax函数的返回值
- Swift - 实现点击cell动态修改高度
- java日期的运用(DateUtils工具类)
- Nodejs in Visual Studio Code 04.Swig模版
- nm命令
- C# 截取图片区域,并返回所截取的图片
- 论文写作office实用技巧
- PHP算法之冒泡排序
- npm火速上手
- getRealPath函数编译报错问题
- C语言强化——链表(2)
- FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决
- XML—代码—DOM4J解析
- SpringMVC的实现过程
- 【agc019D】Shift and Flip
- 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.)
热门文章
- AtCoder Grand Contest 015 题解
- 快速排序的JavaScript实现
- navicat导入sql文件
- 如何在windows 2003(虚拟主机)上面部署MVC3
- 上传下载,使用,commons-fileupload,commons-io来加载上传下载
- Select\Poll\Epoll异步IO与事件驱动
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 &; PopUp菜单
- hdu 5616 Jam&#39;s balance 正反背包+转换
- redhat无法注册RHN的解决办法
- [51nod1267]4个数和为0(预处理+双指针)