>  Q&A  >  본문

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일 전618

모든 응답(4)나는 대답할 것이다

  • 大家讲道理

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

    거래관리는 바이두봄에 문의하세요

    첫 번째는 거래 관리 규칙을 구성하는 것입니다. 구체적으로 작성하는 방법은 Baidu를 참조하면 됩니다. 한두 문장으로 설명할 수는 없습니다.

    으아아아

    두 번째 유형은 @Transactional 주석을 사용합니다

    으아아아

    회신하다
    0
  • 高洛峰

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

    프로그래밍 방식의 트랜잭션 관리 MyBatis SqlSession은
    프로그래밍 방식으로 트랜잭션을 처리하는 특정 방법을 제공합니다. 하지만
    MyBatis-Spring을 사용하면 빈은 Spring
    관리 SqlSession 또는 Spring 관리 매퍼와 함께 주입됩니다. 즉, Spring
    항상 트랜잭션을 처리합니다.

    Spring 관리 SqlSession을 통해 SqlSession.commit(), SqlSession.rollback() 또는
    SqlSession.close()를 호출할 수 없습니다. 그렇게 하려고 하면
    UnsupportedOperationException 예외가 발생합니다. 참고
    이 메소드는 삽입된 매퍼 클래스에 노출되지 않습니다.

    JDBC 연결의 자동 커밋 설정에 관계없이 SqlSession 데이터 메서드의 실행
    또는 Spring 트랜잭션 외부의 매퍼 메서드 호출
    이 자동으로 커밋됩니다.

    프로그래밍 방식으로 트랜잭션을 제어하려면
    Spring 참조 매뉴얼의 10.6장을 참조하세요. 이 코드는 섹션 10.6.2에 설명된
    PlatformTransactionManager를 사용하여 수동으로 트랜잭션을 처리
    하는 방법을 보여줍니다.

    마이바티스-봄

    회신하다
    0
  • 高洛峰

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

    Spring에서는 트랜잭션의 수동 제출을 허용하지 않는 것 같습니다. Spring 컨테이너는 자동으로 트랜잭션을 관리합니다!

    회신하다
    0
  • 阿神

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

    으아아아 으아아아

    회신하다
    0
  • 취소회신하다