是MyBatis的关键字,它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得,而SqlSessionFactoryBuildr则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例
每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory是线程安全的,他一旦被创建,应该在应用执行期间都存在,在应用运行期间不要重复创建多次,建议使用单例模式,SqlSessionFactory是创建SqlSession的工厂。
SqlSessionFactory 是一个重量级组件,线程安全的,一般情况下一个数据库对应一个 SqlSessionFactory 对象,所以一般情况下一个应用仅需要一 个SqlSessionFactory 对象;通过 SqlSessionFactory 生成 SqlSession 对象。
SqlSession
SqlSession 是一个轻量级组件,非线程安全的,该对象通过SqlSessionFactory 对象来获得,SqlSession 对象我们可以看成一个数据库连接对象。该对象中封装了大量操作数据库的方法;由于 SqlSession 是非线程安全的,每次使用时要获得一个 SqlSession 对象,使用结束后关闭该对象;
SqlSession是MyBatis的关键对象,是执行持久化操作的对象,类似于JDBC中的Connection。
它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行已映射的SQL语句。每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,也是线程不安全的,绝对不能将SqlSession 实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet当中的HttpSession 对象中。使用完SqlSession之后关闭Session很重要,应该确保使用finally块来关闭它。