在使用mybatis时进行批删除或批添加用到的service层事务的理解

原创 2016年05月31日 16:30:29

事务重新理解:在执行批添加或批删除时  如果有10条数据需要处理,关系表和主键表  ,关系表操作完毕之后,在操作主键表时报错了,就需要将关系表数据复原,需要回滚事务(callback),而在这时,一个service代表一个事务,,在框架中一般在配置文件中配置了事务

<!-- 配置当出现Exception、RuntimeException、Exception时采用对应的事务操作 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="delete*" propagation="REQUIRED"
				read-only="false" rollback-for="java.lang.Exception"
				no-rollback-for="java.lang.RuntimeException" />
			<tx:method name="insert*" propagation="REQUIRED"
				read-only="false" rollback-for="java.lang.RuntimeException" />
			<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="SUPPORTS" />
			<tx:method name="select*" propagation="SUPPORTS" />
		</tx:attributes>
	</tx:advice>

在service类里以此种方式命名即为一个事务。


本人在处理以下业务时(效果好使,但是编码思路不对)

/**
	 * 条件删除 第二步:执行批量删除
	 */
	@SuppressWarnings("rawtypes")
	@RequestMapping("/deleteDispatchRuleByconditionNext")
	public String deleteByconditionNext(HttpServletRequest req,HttpServletResponse resp,Page page,WoDispatchRule dispatchRule,Model model){
		/**通过筛选条件查找出符合条件的规则**/
		page = SearchUtil.getQueryCondition(req, "deleteDispatchRuleBycondition", dispatchRule, page);
		page = dispatchRuleService.findDispatchRuleList(page);
		if(page.getData().size()>0){
			for(int i=0;i<page.getData().size();i++){
				WoDispatchRule dispatchRule2 = (WoDispatchRule)page.getResult().get(i);
				dispatchRule.setRuleId(dispatchRule2.getRuleId());
				dispatchRuleService.deleteById(dispatchRule);
			}
		}		
		model.addAttribute("message", "success");
		return "/workorder/result";
	}  

第一:查询结果集是从page中取得,但是page.data是分页后的结果,所以是不完全结果集

第二:删除没有事务  一个service方法是一个事务,因为此部分代码写在了action里


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

spring+mybatis 事务之如何在service层配置事务

如何在service层配置事务 关键是事实上,dao层只是简单的增删改查,而实际业务的一个接口肯定不止一个增删改查的一个,有可能是调A接口的删除,在调B接口的添加。这个时候前面那个配置只能保证A接口成...

mybatis事务配置

今天弄mybatis-pring的事务遇到一个问题,有问题的spring-mybatis.xml配置如下: <beans xmlns="http://www.springframework.org/...

mybatis事务总结

在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):   JDBC –  这个配置直接简单使用了JDBC 的提交和回滚设置。它依赖于从 到的连接来管...

Mybatis事务(一)事务管理方式

Mybatis管理事务是分为两种方式: (1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交 (2)使用MANAGED的事务管理机制,这种机制myb...

mybatis 事务内部获取自增主键

mybatis事务内部获取自增主键: 我用的是mysql数据库,用的是spring集成mybatis, 纠结这个问题一年多了,试了很多种方法。以下是需要注意的: 首先mapper.xml代码 ...

Mybatis遇到的问题汇总 mybatis事务探索

1.select不需要commit 2.insert返回自增id为什么老是返回1

关于Mybatis中foreach的用法以及与service中循环调用dao层中的差异

导读: 在实际开发过程中遇到需要批量插入、批量更新、批量删除等操作,纠结于是在service层中直接调用dao层的方式还是直接使用Mybatis中的标签,因此特地做了一个实验。 ...

基于MyBatis的批量插入更新实现

我的问题:如何在MyBatis下实现批量新增和更新的操作? 遇到的困惑: 1、MyBatis不支持在XML配置的SQL中带有分号“;”; 2、因为第1点原因,所以考虑如何在Oracle下通过一条语...

spring+mybatis通用dao层、service层的一些个人理解与实现

首先声明,本文所述只是鉴于本人在开发一些应用时的心得,仅供参考。 1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确 2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)