av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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

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

問(wèn)題描述

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

問(wèn)題解答

回答1:

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

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

<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ù)問(wèn)題

回答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 注解則成功解決問(wèn)題,此注解是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)文章:
主站蜘蛛池模板: 找个黄色片 | 亚洲欧美日本在线 | 免费观看www7722午夜电影 | 久热国产在线 | 日本中出视频 | 成人福利网站 | 久久久久久一区 | 国产粉嫩尤物极品99综合精品 | 99精品久久 | 久草精品视频 | 日韩欧美亚洲 | 羞羞视频网站 | 精品国产一区二区 | 久久亚洲天堂 | 欧美一级特黄aaa大片在线观看 | 国产精品久久一区二区三区 | 精品九九| 久久最新 | 免费观看成人鲁鲁鲁鲁鲁视频 | 天天爱av| 日日噜噜噜夜夜爽爽狠狠视频, | 在线观看免费高清av | 久久亚洲一区二区三区四区 | 一区二区三区精品在线视频 | 欧美mv日韩mv国产网站91进入 | 毛片在线免费播放 | 久久久久久久国产精品视频 | 日韩一区二区三区在线看 | 欧美8一10sex性hd | 天堂素人约啪 | 午夜视频免费在线观看 | 欧美性视频在线播放 | 国产黄色大片 | 免费看一区二区三区 | 91网视频| 凹凸日日摸日日碰夜夜 | 一区二区三区日本 | 亚洲不卡在线观看 | 国产精品一区二区三区久久久 | 99精品国产一区二区青青牛奶 | 亚洲黄色成人网 |