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();
    


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM