SqlSession与SqlSessionFactory
2.2.3 SqlSession
SqlSession是MyBatis框架中极其重要的接口。SqlSession类似于JDBC中的Connection,它代表MyBatis和数据库的一次会话,主要用于执行持久化操作。SqlSession对象底层封装了JDBC连接,所以可以直接使用SqlSession对象执行已映射的SQL语句。SqlSession中包含了所有执行SQL语句的方法、提交或回滚事务的方法、获取映射器实例的方法。SqlSession不是线程安全的,每个线程都应有一个属于自己的SqlSession实例并且该实例不能够被共享。在使用SqlSession执行相关操作后应将其关闭,释放资源。
2.2.2 SqlSessionFactory
我们单从字面意思就可大概揣测出SqlSessionFactory接口的用途在于创建SqlSession。
SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其核心作用就是创建SqlSession。SqlSessionFactory 一旦被创建就应伴随应用程序的运行而长期一直存在,我们没有任何理由对它进行清除或重建,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。为避免资源的浪费和过度开销,在项目中最好使用单例模式创建和获取SqlSessionFactory。
SqlSessionFactory使用openSession( )方法创建SqlSession实例。使用openSession( )重载之后共有8个方法,代码如下:
SqlSession openSession();
SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);
在以上方法中我们使用最多的是第2个。利用该方法获得的SqlSession实例可帮助我们自动提交事务。也就是说,在该方式下执行insert、update、delete操作后不需执行commit( )提交事务亦可自动生效。