Supwb的gravatar头像
Supwb 2015-03-22 14:20:46

java web开发中事务的封装在Service层还是在DAO层做?那种比较常见?

如题

所有回答列表(8)
最代码官方的gravatar头像
最代码官方  LV167 2015年3月22日

这个没有绝对的在哪层控制的说法吧。

按我的理解,dao层增加默认的事务来控制,service按需来增加事务控制。

dao层是简单的增删改查的事务。service层是多个业务的事务控制。

比如最代码某个service类的save方法

	@Override
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public T save(T t) {
		beforeSave(t);
		baseRepository.save(t);
		afterSave(t);
		return t;
	}

事务方面我理解的也只是业务方面的,可以参考下百科:java事务处理_百度百科

评论(0) 最佳答案
一牛牛的gravatar头像
一牛牛  LV4 2015年3月22日

一般都封装在service层中的

masque的gravatar头像
masque  LV16 2015年3月23日

~正常的开发Service是编写业务逻辑的地方.应该在这添加必要的事务控制,但是我们平时开发过程中大部分人都是把业务逻辑写在action中,这个是极不规范的写法.

 

DrSoul的gravatar头像
DrSoul  LV4 2015年3月23日

事务,如果你使用的是hibernate,jpa,mybatis,默认在dao调用的方法都会默认给你开启相应的事务,底层的jdbcdriver决定的,而当你需要决定一个业务逻辑必须有多个地方要保证数据一致或是具有ACID特性,此时,你要指定事务,而这个必定是在service中或者domain中,然而即使在dao中,在分表的情况下,或是mysql使用sequence的情况下,也会要求开启事务,因为必须保证并下数据的一致性,所以,事务的开启和层没有关系,只要情景需要,就需要使用。

kaka的gravatar头像
kaka  LV19 2015年3月24日

我们的事务使用spring控制的,service层,给业务层面加事务

幼儿园保安队长的gravatar头像
幼儿园保安队长  LV7 2015年3月26日

明显在service层啊,在dao层会有一个问题,比如,你dao层有两个save方法,在servie层同时调用这两个方法,如果a方法保存成功,b方法失败,那你的dao层a就会提交,b回滚,显然会出现问题。  所以说,1楼那个最佳答案在实际开发中,肯定会出问题

摆渡的虫的gravatar头像
摆渡的虫  LV6 2015年4月1日

DAO层是干什么的?先回答这个问题,问题就解决了。我认为它就是个管家,负责跟数据库交互,是一个数据库操作的最小单位。你干一件事应该不止一个数据库操作吧?那就应该在service层,保证实务连续。

洪斌Hb的gravatar头像
洪斌Hb  LV2 2015年4月3日

个人认为是写在Service中的,但是我们有时候都是写在action中的  这个就是比较尴尬的地方了

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友