spring struts2 mybatis相关疑问
数据库采用连接池,事务在service上。今天在开会的时候,有个同事说事务在service上,当调用该service的方法是就打开了该连接,离开方法时才关闭该连接,影响效...
数据库采用连接池,事务在service上。
今天在开会的时候,有个同事说事务在service上,当调用该service的方法是就打开了该连接,离开方法时才关闭该连接,影响效率,应该把事务放在dao上。我想说的是在采用连接池时连接其实是一直打开的,并不是在调用service时才打开,所以不存在上述效率问题。我的理解对吗? 展开
今天在开会的时候,有个同事说事务在service上,当调用该service的方法是就打开了该连接,离开方法时才关闭该连接,影响效率,应该把事务放在dao上。我想说的是在采用连接池时连接其实是一直打开的,并不是在调用service时才打开,所以不存在上述效率问题。我的理解对吗? 展开
展开全部
对不起,你的理解错了。你的意思是数据库链接一直打开(一直链接浪费资源),其实不需要。工作中也不是的(至少我不是)当调用到数据库操作是才连接。至于事务的问题,个人觉得应该放在接口上(即dao)上。如果你对spring事务管理了解的话,就很明白它为何这么设计。我理解其实是一种设计模式(工厂)。控制接口来达到控制服务的目的。比如一个造鞋的工厂,只需要改变模具(接口)就行,不需要考虑是造运动鞋还是休闲鞋(service)。
如果想彻底了解的话,建议你看看spring底层的事务控制的源码。希望可以帮到你~
如果想彻底了解的话,建议你看看spring底层的事务控制的源码。希望可以帮到你~
追问
还是关于连接池
连接池在初始化的时候就生成N个连接在池子里,你操作数据库的时候拿来就可以用,而当你事务结束的时候只是释放了连接把它重新放回到池子里,并不是这个链接就关闭了,也就是说连接池里的连接始终都是处于连接状态的。
我以上的理解不对吗?如果对的话,跟事务放在service上有关系吗?影响效率从何谈起?有点不懂,
追答
链接池的机制处理不太清楚,我们一般事务控制都是在接口层次的(dao)。具体的你可以问问技术牛逼的。感觉控制接口比控制接口下调用的service要好,可能是经验让我们这么做的。但是还要具体情况具体分析。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询