色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

java - mybatis怎么處理事務(wù)問題

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

問題描述

我用的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)?

問題解答

回答1:

請(qǐng)百度spring的事務(wù)管理

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

<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> <!--聲明使用注解式事務(wù)--> <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好像不允許手動(dòng)提交事務(wù),Spring容器會(huì)自動(dòng)管理事務(wù)!java - mybatis怎么處理事務(wù)問題

回答4:

//使用事務(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 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ì)回滾

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 美国毛片免费看 | 国产小视频在线高清播放 | 女人张开腿让男人桶免费最新 | 中文字幕亚洲综合久久男男 | 殴美一级 | 日本一级全黄大片 | 一区二区三区欧美 | 亚洲在线精品 | 正在播放国产一区 | 日韩美香港a一级毛片 | 日韩一级欧美一级毛片在 | 久久久久久久久久毛片精品美女 | 91精品久久久久含羞草 | 日本一区二区三区欧美在线观看 | 亚洲一区在线视频 | 加勒比日本道 | 午夜国产精品久久久久 | 欧美透逼视频 | 国产日本韩国不卡在线视频 | 91免费永久国产在线观看 | 精品一区二区影院在线 | 成人三级精品视频在线观看 | 国产成人mv在线观看入口视频 | 一级片在线观看视频 | 国产视频综合 | 在线观看亚洲免费视频 | 日韩欧美一及在线播放 | 黄视频在线免费 | 制服诱惑中文字幕 | 亚洲成人在线视频播放 | 日本特爽特黄特刺激大片 | 黄视频欧美 | 五月激激激综合网色播免费 | 直接在线观看的三级网址 | 男女免费在线视频 | 日本精品一区二区三区在线视频一 | 免费看特级淫片日本 | 成年人在线观看免费 | 精品在线一区 | 日韩激情无码免费毛片 | 久久国产欧美 |