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

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

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

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

問題描述

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

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

問題解答

回答1:

請百度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好像不允許手動提交事務(wù),Spring容器會自動管理事務(wù)!java - mybatis怎么處理事務(wù)問題

回答4:

//使用事務(wù)處理,訂單及貨物訂單必須同時插進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 的事務(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ù)會回滾

標簽: java
相關(guān)文章:
主站蜘蛛池模板: 日韩性生活大片 | 日韩精品亚洲专区在线影视 | 色噜噜国产在线91蝌蚪 | 免费在线视频一区 | 国产麻豆视频免费观看 | 亚洲国产成a人v在线观看 | 亚洲女人毛片 | 国产a级免费 | 国产美女亚洲精品久久久毛片 | www.夜夜骑| 在线观看91精品国产不卡免费 | 在线播放国产色视频在线 | 日韩免费一区二区三区 | 欧美一级三级 | 日本大片在线观看 | www.啪| 亚洲黄色美女 | 极品美女一级毛片免费 | 888午夜不卡理论久久 | 久久日本精品国产精品白 | 亚洲一区欧洲一区 | 中文字幕在亚洲第一在线 | 日韩三区| 欧美亚洲国产一级毛片 | 国产欧美精品三区 | 午夜在线播放免费人成无 | a级毛片黄 | 国产精品你懂的 | 成 人色 网 站www | 视频在线观看一区二区三区 | japanese无码中文字幕 | 免费三级网站 | 久久国产电影 | 免费国产成人手机在线观看 | 免费一级a毛片在线搐放正片 | 国产情趣酒店鸳鸯浴在线观看 | 精品一久久香蕉国产线看观 | 国产亚洲玖玖玖在线观看 | 日韩一级片在线免费观看 | 九九久久久久久久爱 | 麻豆果冻精品一区二区 |