ホームページ  >  に質問  >  本文

java - mybatis怎么处理事务问题

我用的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那种,要在哪里配置或调用啥方法实现?

伊谢尔伦伊谢尔伦2743日前614

全員に返信(4)返信します

  • 大家讲道理

    大家讲道理2017-04-18 10:53:03

    Baidu springのトランザクション管理をご利用ください

    最初はトランザクション管理ルールの設定です。具体的な書き方は、一言や二文では説明できません

    。 リーリー

    アノテーション @Transactional を使用する 2 番目の方法

    リーリー

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:53:03

    プログラムによるトランザクション管理 MyBatis SqlSession は、
    トランザクションをプログラム的に処理するための特定のメソッドを提供します。ただし、MyBatis-Spring を使用する場合、Bean には Spring
    管理の SqlSession または Spring 管理のマッパーが注入されます。つまり、Spring
    が常にトランザクションを処理します

    Spring が管理する SqlSession 上で SqlSession.commit()、SqlSession.rollback()、または

    SqlSession.close() を呼び出すことはできません。そうしようとすると、UnsupportedOperationException 例外がスローされます。注: これらのメソッドは、挿入されたマッパー クラスでは公開されません。
    JDBC 接続の自動コミット設定に関係なく、SqlSession データ メソッドの実行
    、または
    Spring トランザクション外のマッパー メソッドの呼び出しは、自動的にコミットされます。

    トランザクションをプログラムで制御したい場合は、Spring リファレンス マニュアルの 10.6 章を参照してください。このコードは、セクション 10.6.2 で説明されている PlatformTransactionManager を使用してトランザクションを手動で処理する方法を示しています

    mybatis-春

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:53:03

    Spring ではトランザクションを手動で送信できないようです。Spring コンテナはトランザクションを自動的に管理します。

    返事
    0
  • 阿神

    阿神2017-04-18 10:53:03

    リーリー リーリー

    返事
    0
  • キャンセル返事