就是ibatis执行DB后自动执行下commit

解决方案 »

  1.   

    spring 会帮你做吧,问题是查询语句为啥还要commit呢
      

  2.   

    大哥,是啊,增删改都用了spring的事务,但是select没有用事务,但是这边因为我们用得是mysql,在执行时有可能锁表,所以我们DBA要求,在每次select之后都要执行下commit操作,这个让我写成公用的方法,就是说,在不改变别人查询方法的前提下,增加个commit语句,咋做呢?
      

  3.   

    好多人都用MySQL啊,spring的事务配好了,应该没太大问题吧。一定要加一个commit操作,可以试着自己自定义spring aop试试
      

  4.   

    但是DBA又不建议直接对select用切面编程,怕影响性能,他的意思就是我能否写出个公用的方法,在别人调用查询的方法后,自动调用,这个怎么做呀?大神
      

  5.   

    我去,这个自动调用本来就相当于面向切面了啊,不用aop,还不让人去改代码,你们的dba管的有点多了吧,面向切面咋就影响性能了?其实你这个最简单的方法就是把查询方法配到spring事务里,加个readonly。如果不用面向切面,只能在service的共同父类里边做点手脚了吧,具体实现你得自己想想了
      

  6.   

    是啊,但是假如用切面的话,怎么仅仅对select型的方法用只读的事务呢,我们的查询方法的命名是没有规范的额,什末名字都有,这个怎么配置呢
      

  7.   

    应该也有一定规范吧,例如不可能用update,del这些开头吧,把这些的配置成正常事务,剩下的  method="*" 配成只读的试试吧
      

  8.   

    改成这个鸟样了,凑合这用吧 <!--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>
      

  9.   

    这么多热心的人帮你,让我觉的你们的DBA就是个锤子。