关闭

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

776人阅读 评论(0) 收藏 举报
分类:

事务重新理解:在执行批添加或批删除时  如果有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里


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10706次
    • 积分:319
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:13篇
    • 译文:1篇
    • 评论:4条
    最新评论