Mybatis中SqlSessionFactory和SqlSession学习和原理
源码git地址: 目标结构:
mybatis是数据持久化解决方案将用户从jdbc访问中解放出来,用户只需要定义需要操作的sql语句,无需关注底层jdbc操作,就可以以面向对象的方式来进行持久层操作,底层数据库的连接获取,数据库访问的实现,事务控制等都无须用户关心。本章学习mybatis中的常见对象sqlsessionfactory和sqlsession
一、sqlsessionfactory sqlsessionfactory是mybatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像,sqlsessionfactory可以通过sqlsessionfactorybuild对象类获取,而sqlsessionfactorybuild则可以从xml配置文件或一个预先定制的configuration的实例构建出sqlsessionfactory的实例,每一个mybatis的应用程序都以一个sqlsessionfactory对象的实例为核心,sqlsessionfactory也是线程安全的,sqlsessionfactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,sqlsessionfactory是创建sqlsession的工厂。 sqlsessionfactory:接口源码 public interface sqlsessionfactory { 在spring中构建sqlsessionfactory: 通过@bean配置一个datasource类,构造一个sqlsessionfactorybean实例通过setdatasource()将datasource绑定,通过getobject()方法创建sqlsessionfactory对象 二、sqlsession sqlsession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是mybatis执行持久化操作的关键对象,sqlsession对象完全包含以数据库为背景的所执行sql操作方法。底层封装了jdbc连接,可以用sqlsession的实例对来执行被映射的sql语句,每个线程有他自己的sqlsession实例,sqlsession的实例不能被共享,sqlsession也不是线程安全的,绝对不能将sqlsession实例的引用放在任何类型的管理范围中,使用完sqlsession之后关闭session很重要,放在finally块来关闭它。 |