Fork me on GitHub

Mybatis系列之设置自动提交事务

@

目录

    业务描述:最近遇到业务很复杂的方法,有通过Spring的@Transactional注解开启事务的,不过在ie11出现bug,console日志打印已经update成功的SQL,方法很长,执行成功后,发现数据没有修改,这个和console日志打印不符合,问题比较难排查,然后通过网上资料个自己尝试fix bug,不过具体原因没有想清,浏览器本身就和事务处理没关系,为什么在不同浏览器会不同效果,所以本博客记录一下,方便以后自己回顾

    通过网上资料和自己尝试,初步判断是事务没提交导致的,网上资料搜索到Mybatis SqlSession默认是不自动提交事务的,所以尝试开启Mybatis SqlSession自动提交事务

    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Service;
    
    /**
     * 获取Spring上下文
     */
    @Service
    public class ApplicationContextHolder implements ApplicationContextAware {
    	
    	private static ApplicationContext ctx;
    
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext)
    			throws BeansException {
    		ctx = applicationContext;
    	}
    	
    
    	public static ApplicationContext getApplicationContext() {
    		return ctx;
    	}
    	
    
    	@SuppressWarnings("unchecked")
    	public static <T> T getBean(String beanName) {
    		return (T) ctx.getBean(beanName);
    	}
    	
    
    	public static <T> T getBean(Class<T> clazz) {
    		return ctx.getBean(clazz);
    	}
    
    	/**
    	 * 设置Mybatis自动提交事务
    	 * @Author mazq
    	 * @Date 2020/05/29 13:51
    	 * @return org.apache.ibatis.session.SqlSession
    	 */
    	public static SqlSession getSqlSession(){
    		SqlSessionFactory sqlSessionFactory  = (SqlSessionFactory)ctx.getBean("sqlSessionFactory");
    		return sqlSessionFactory.openSession(true);
    	}
    }
    
    

    然后在对应dao类后面加上代码:

    // Mybatis自动提交事务
                        SqlSession mybatisSqlSession = ApplicationContextHolder.getSqlSession();
                        mybatisSqlSession.commit();
    
    posted @ 2020-06-02 15:43  smileNicky  阅读(2954)  评论(0编辑  收藏  举报