SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
public class MybatisUtils {
    //获得SqlSession工厂
    private static SqlSessionFactory factory;

    //创建ThreadLocal绑定当前线程中的SqlSession对象
    private static final ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();

    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获得连接(从tl中获得当前线程SqlSession)
    private static SqlSession openSession(boolean AutoCommit){
        SqlSession session = tl.get();
        if(session == null){
            session = factory.openSession(AutoCommit);
            tl.set(session);
        }
        return session;
    }
    //提供设置手动提交的sqlsession对象(如果需要手动提交事务,则调用该方法)
    public static SqlSession getSqlSession(){
        return openSession(false);
    }

    //获得接口实现类对象(如果通过该方法获取实现类对象,则表示需要自动提交事务)
    public static <T extends Object> T getMapper(Class<T> clazz){
        SqlSession session = openSession(true);
        return session.getMapper(clazz);
    }
}

以上封装可以根据需要灵活调用自动事务提交与手动提交的方法。

 

posted on 2021-12-23 20:13  SentralLiu  阅读(167)  评论(0)    收藏  举报