亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

java - mybatis怎么處理事務(wù)問題
伊謝爾倫
伊謝爾倫 2017-04-18 10:51:03
0
4
718

我用的mybatis是基于SqlSessionTemplate實(shí)現(xiàn)的,如下:

@Repository("daoSupport")
public class DaoSupport implements BaseDAO {

    @Resource(name = "sqlSessionTemplate")
    private SqlSessionTemplate sqlSessionTemplate;
    
    /**
     * 保存對(duì)象
     * @param str
     * @param obj
     * @return
     * @throws Exception
     */
    public Object save(String str, Object obj){
        return sqlSessionTemplate.insert(str, obj);
    }
    
    /**
     * 批量更新
     * @param str
     * @param obj
     * @return
     * @throws Exception
     */
    public Object batchSave(String str, List objs){
        return sqlSessionTemplate.insert(str, objs);
    }
    
    /**
     * 修改對(duì)象
     * @param str
     * @param obj
     * @return
     * @throws Exception
     */
    public Object update(String str, Object obj){
        Integer count=sqlSessionTemplate.update(str, obj);

@Service

public class OrderInfoService  {

    @Resource(name = "daoSupport")
    private DaoSupport dao;
        
    
    @SuppressWarnings("unchecked")
    public List<PageData> getPerson() {
         List<PageData> a =(List<PageData>)dao.findAllList(
                    "OrderInfoMapper.getOrderInfo");
         return a;
            
        }
    public void save(PageData pd){
        dao.save("OrderInfoMapper.saveOrderInfo", pd);
    }
    public void update(PageData pd){
        dao.update("OrderInfoMapper.updateOrder", pd);
    }
    
    @SuppressWarnings("unchecked")
    public List<PageData> list(PageData pd){
        return (List<PageData>)dao.findForList("OrderInfoMapper.getOrderInfo", pd);
    }

在xml文件里面寫對(duì)應(yīng)sql的Mapper,
我想在調(diào)用service層的方法操作數(shù)據(jù)庫時(shí),幾條sql語句同時(shí)commit,其中有一條失敗則全部不執(zhí)行,就和jdbc那樣先設(shè)置不自動(dòng)commit,然后在commit那種,要在哪里配置或調(diào)用啥方法實(shí)現(xiàn)?

伊謝爾倫
伊謝爾倫

小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。

reply all(4)
大家講道理

Please use Baidu spring’s transaction management

The first one is to configure transaction management rules. You can search on Baidu on how to write it specifically. I can’t explain it in one or two sentences

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <aop:config>
        <aop:pointcut id="interceptorPointCuts" expression="execution(* com.web..*.services..*Impl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts"/>
    </aop:config>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>for="java.lang.Exception"/> -->
        </tx:attributes>
    </tx:advice>

The second way to use the annotation @Transactional

   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--聲明使用注解式事務(wù)-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
小葫蘆

Programmatic Transaction Management MyBatis SqlSession provides you
with specific methods to handle transactions programmatically. But
when using MyBatis-Spring your beans will be injected with a Spring
managed SqlSession or a Spring managed mapper. That means that Spring
will always handle your transactions.

You cannot call SqlSession.commit(), SqlSession.rollback() or
SqlSession.close() over a Spring managed SqlSession. If you try to do
so, a UnsupportedOperationException exception will be thrown. Note
these methods are not exposed in injected mapper classes.

Regardless of your JDBC connection's autocommit setting, any execution
of a SqlSession data method or any call to a mapper method outside a
Spring transaction will be automatically committed.

If you want to control your transactions programmatically please refer
to chapter 10.6 of the Spring reference manual. This code shows how to
handle a transaction manually using the PlatformTransactionManager
described in section 10.6.2.

mybatis-spring

小葫蘆

Spring does not seem to allow manual submission of transactions, the Spring container will automatically manage transactions!

阿神


//使用事務(wù)處理,訂單及貨物訂單必須同時(shí)插進(jìn)2個(gè)表里面
@Transactional(rollbackFor=Exception.class)
public void save(PageData pd,Map<String,Integer> map,String uuid,int Uid){
    dao.save("OrderInfoMapper.saveOrderInfo", pd);
    OrderGood orderGood=new OrderGood();
    for(String gid:map.keySet()){
        Goods good=goodService.findOne(gid);
        orderGood.setGname(good.getGname());
        //Integer a=map.get(gid);
        orderGood.setOgamount(map.get(gid));
        orderGood.setGid(Integer.parseInt(gid));                
        orderGood.setOgtotalprize(map.get(gid)*good.getGprice());
        orderGood.setUid(Uid);
        orderGood.setOid(uuid);
        dao.save("OrderInfoMapper.saveOrderGood", orderGood);
        }          
               
}
使用@Transactional  注解則成功解決問題,此注解是spring 的事務(wù)管理,使用前先配置如下:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--聲明使用注解式事務(wù)-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
        
    
    
    只需要在service層方法中執(zhí)行多條mybatis的mapper并加上注解即可,發(fā)生異常則此方法的事務(wù)會(huì)回滾
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template