ibatis执行查询后自动执行一个commit

咱家少爷 2014-07-09 05:53:07
各位大牛,公司要求,在ibatis执行查询后,都要执行下一个提交语句,那些更改数据的sql,应用了事务控制,用的是spring管理的,现在对于这个在每个查询方法执行后,都要执行个提交操作,咋办呀?
...全文
324 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsongiu86 2014-07-10
  • 打赏
  • 举报
回复
应该也有一定规范吧,例如不可能用update,del这些开头吧,把这些的配置成正常事务,剩下的 method="*" 配成只读的试试吧
咱家少爷 2014-07-10
  • 打赏
  • 举报
回复
是啊,但是假如用切面的话,怎么仅仅对select型的方法用只读的事务呢,我们的查询方法的命名是没有规范的额,什末名字都有,这个怎么配置呢
lsongiu86 2014-07-10
  • 打赏
  • 举报
回复
我去,这个自动调用本来就相当于面向切面了啊,不用aop,还不让人去改代码,你们的dba管的有点多了吧,面向切面咋就影响性能了?其实你这个最简单的方法就是把查询方法配到spring事务里,加个readonly。如果不用面向切面,只能在service的共同父类里边做点手脚了吧,具体实现你得自己想想了
咱家少爷 2014-07-10
  • 打赏
  • 举报
回复
但是DBA又不建议直接对select用切面编程,怕影响性能,他的意思就是我能否写出个公用的方法,在别人调用查询的方法后,自动调用,这个怎么做呀?大神
lsongiu86 2014-07-10
  • 打赏
  • 举报
回复
好多人都用MySQL啊,spring的事务配好了,应该没太大问题吧。一定要加一个commit操作,可以试着自己自定义spring aop试试
咱家少爷 2014-07-10
  • 打赏
  • 举报
回复
大哥,是啊,增删改都用了spring的事务,但是select没有用事务,但是这边因为我们用得是mysql,在执行时有可能锁表,所以我们DBA要求,在每次select之后都要执行下commit操作,这个让我写成公用的方法,就是说,在不改变别人查询方法的前提下,增加个commit语句,咋做呢?
lsongiu86 2014-07-10
  • 打赏
  • 举报
回复
spring 会帮你做吧,问题是查询语句为啥还要commit呢
咱家少爷 2014-07-10
  • 打赏
  • 举报
回复
就是ibatis执行DB后自动执行下commit
  • 打赏
  • 举报
回复
这么多热心的人帮你,让我觉的你们的DBA就是个锤子。
咱家少爷 2014-07-10
  • 打赏
  • 举报
回复
改成这个鸟样了,凑合这用吧
	<!--Spring申明式事务,AOP切面切入 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="userdataSource" />
		</property>
	</bean>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* com.paic.icore.aops.*.dao.*(..))" />
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />
    </aop:config>
百里马 2014-07-09
  • 打赏
  • 举报
回复
没看明白。。。
咱家少爷 2014-07-09
  • 打赏
  • 举报
回复
先顶下,别沉下去了

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧