亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java - mybatis怎么處理事務問題

瀏覽:145日期:2024-01-21 11:38:58

問題描述

我用的mybatis是基于SqlSessionTemplate實現的,如下:

@Repository('daoSupport')public class DaoSupport implements BaseDAO { @Resource(name = 'sqlSessionTemplate') private SqlSessionTemplate sqlSessionTemplate;/** * 保存對象 * @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); }/** * 修改對象 * @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文件里面寫對應sql的Mapper,我想在調用service層的方法操作數據庫時,幾條sql語句同時commit,其中有一條失敗則全部不執行,就和jdbc那樣先設置不自動commit,然后在commit那種,要在哪里配置或調用啥方法實現?

問題解答

回答1:

請百度spring的事務管理

第一種,配置事務管理的規則,具體怎么寫可以再百度,一兩句說不清

<bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'><property name='dataSource' ref='dataSource'/> </bean> <aop:config><aop:pointcut expression='execution(* com.web..*.services..*Impl.*(..))'/><aop:advisor advice-ref='txAdvice' pointcut-ref='interceptorPointCuts'/> </aop:config> <tx:advice 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>

第二種使用注解@Transactional

<bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'><property name='dataSource' ref='dataSource'/> </bean> <!--聲明使用注解式事務--> <tx:annotation-driven transaction-manager='transactionManager'/>回答2:

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

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

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

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

mybatis-spring

回答3:

Spring好像不允許手動提交事務,Spring容器會自動管理事務!java - mybatis怎么處理事務問題

回答4:

//使用事務處理,訂單及貨物訂單必須同時插進2個表里面@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 的事務管理,使用前先配置如下:

<bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'><property name='dataSource' ref='dataSource'/> </bean> <!--聲明使用注解式事務--> <tx:annotation-driven transaction-manager='transactionManager'/> 只需要在service層方法中執行多條mybatis的mapper并加上注解即可,發生異常則此方法的事務會回滾

標簽: java
相關文章:
主站蜘蛛池模板: 欧美一区二区三区久久久 | 亚洲精品你懂的 | 日本黄色免费网站 | 成人综合在线视频 | 伊人久久精品 | 欧美成人乱弄视频 | 黄色免费小视频 | 精品久久久影院 | www.久久视频| 国内精品一区二区 | 成人做爰免费视频免费看 | 综合久久一区二区三区 | 日本欧美韩国专区 | 亚洲看 | 亚洲色图吧 | 1024手机在线 | 丁香婷婷久久大综合 | 亚洲综合激情另类专区 | 中国一级黄色录像片 | 欧美成人一区二区三区不卡 | 欧美.成人.综合在线 | 久久久国产精品网站 | 国产chiese在线视频 | 免费看三级全黄 | 国产综合色在线视频播放线视 | 国产成人精品一区 | 欧美午夜艳片欧美精品 | 亚洲 欧美 日韩在线 | 韩国十八禁毛片无遮挡 | 久久99精品福利久久久 | 成年人午夜网站 | 亚洲国产高清美女在线观看 | 91青青国产在线观看免费 | 亚洲精品久久久久福利网站 | 一级s片| 国产午夜影院 | 青青青青爽极品在线视频 | 免费在线观看a级片 | 农村妇女又色黄一级毛片 | 中文字幕亚洲综合久久男男 | 一级毛片欧美 |