欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis中SqlSessionFactory和SqlSession学习和原理

程序员文章站 2023-12-28 17:53:22
源码git地址:https://github.com/mybatis/mybatis-3 目标结构: mybatis是数据持久化解决方案将用户从JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无需关注底层JDBC操作,就可以以面向对象的方式来进行持久层操作,底层数据库的连接获取,数据库访 ......

源码git地址:

目标结构:

 

Mybatis中SqlSessionFactory和SqlSession学习和原理

  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 {

sqlsession opensession();//用来创建sqlsession

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

configuration getconfiguration();

}

   在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块来关闭它。

上一篇:

下一篇: