• 近期将进行后台系统升级,如有访问不畅,请稍后再试!
  • 极客文库-知识库上线!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 每日更新优质编程文章!
  • 更多功能模块开发中。。。

Mybatis的基本要素–核心对象


大家好啊,今天呢来说下 Mybatis 的核心对象,也就是说基本三要素.
  • 核心接口和类。
  • Mybatis核心配置文件(mybatis-config.xml)
  • SQL 映射文件

一、下面首先介绍Mybatis的核心接口和类。

(1) 每个 MyBatis 的应用程序都以一个 SqlSessionFactory 对象的实例为核心.
(2) 首先获取 SqlSessionFactoryBuilder 对象,可以根据 XML 配置文件或者 Configuration 类的实例构建该对象。
(3) 然后获取 SqlSessionFactory 对象,该对象实例可以通过 SqlSessionFactoryBuilder 对象来获取得。
(4) 有了 SqlSessionFactory 对象之后,就可以进而获取 SqlSession 实例,SqlSession 对象中完全包含以数据库为背景的所有执行 SQL 操作的方法。就可以用该实例来直接执行已映射的 SQL 语句。

二、SqlSessionFactoryBuilder

1、SqlSessionBuider 的作用

SqlSessionFactoryBuilder 负责构建 SqlSessionFactory,并且提供了多个 build()方法重载.如图:
通过源码分析,可以发现都是在调用同一签名方法:
  1. build(Rrader reader,String environment,Properties properties)
由于参数 environment 和 properties 都可以为 null,那么去除重复的,真正的重载方法其实只有如下三种:


通过上述分析,发现配置信息可以以三种形式提供给 SqlSessionFactoryBuilder 的 build()方法,分别是 InputStream(字节流),Reader(字符流),Configuration(类),由于字节流与字符流都属于读取配置文件的方式,所以从配置信息的来源就很容易想到构建一个 SqlSessionFactory 有两种方式:读取 XML 配置文件构建和编程构造方式。我们一般习惯为采取 XML 配置文件的方式来构造 SqlSessionFactory.

2、SqlSessionFactoryBuider 的声明周期和作用域

SqlSessionFactoryBuilder 的最大特点是:用过即丢。一旦创建了 SqlSessionFactory 对象之后,这个类就不再需要存在了,因此 SqlSessionFactoryBuilder 的最佳范围就是存在于方法体内,也就是局部变量而已。

三、SqlSessionFactory 的作用

1、SqlSessionFactory 的作用

SqlSessionFactory 简单的理解就是创建 SqlSession 实例的工厂。所有的 MyBatis 应用都是以 SqlSessionFactory 实例为中心,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 对象来获取。有了它以后,顾名思义,就可以通过 SqlSession 提供的 openSession()方法来获取 SqlSession 实例。如图:

2.SqlSessionFactory 的生命周期和作用域

SqlSessionFactory 对象一旦创建,就会在整个应用程序过程中始终存在。没有理由去销毁或再创建它,并且在应用程序运行中也不建议多次创建 SqlSessionFactory。因此 SqlSessionFactory 的最佳作用域是 Application,即随着应用程序的生命周期一直存在。那么这种”存在于整个应用运行期间,并且只存在一个对象实例”的模式就是所谓的单列模式(指在运行期间有且仅有一个实例):下面举个例子:
  1. package com.company;

  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;

  6. import java.io.IOException;
  7. import java.io.InputStream;

  8. publicclassMybatisUtil{
  9.    privatestaticSqlSessionFactory factory;

  10.    static{//在静态代码块下,factory 只会被创建一次

  11.        try{
  12.            InputStreamis=Resources.getResourceAsStream("mybatis-congif.xml");
  13.            factory =newSqlSessionFactoryBuilder().build(is);
  14.        }catch(IOException e){
  15.            e.printStackTrace();
  16.        }
  17.    }


  18.    //创建和关闭
  19.    publicstaticSqlSession createSqlSession(){
  20.        return factory.openSession(false);//true 为自动提交事务
  21.    }
  22.    publicstaticvoid closeSqlSession(SqlSession sqlSession){
  23.        if(null!=sqlSession){
  24.            sqlSession.close();
  25.        }
  26.    }
  27. }
通过以上静态类的方式来保证 SqlSessionFactory 实例只被创建一次,当然,最佳的解决方案是使用依赖注入–Spring 框架来管理 SqlSessionFactory 的单例生命周期。关于整合 SSM 会在之后写出.

四、SqlSession

1.SqlSession 的作用

SqlSession 是用于执行持久化操作的对象,类似于 JDBC 中的 Connection。它提供了面向数据库执行 SQL 命令所需的所有方法,可以通过 SqlSession 实例直接运行已映射的 SQL 语句。如图:

2.SqlSession 生命周期和作用域

正如其名,SqlSession 对应着一次数据库会话。由于数据库会话不是永久的,因此 SqlSession 的生命周期也不应该是永久的。相反,在每次访问数据库时需要创建它(注意:并不是说在 SqlSession 里执行一次 SQL,是完全可以执行多少次的,但是若是关闭了 SqlSession,那么就要重新创建它).创建 SqlSession 的地方只有一个,那就是 SqlSessionFactory 对象的 openSession 方法。
需要注意的是:每个线程都有自己的 SqlSession 实例,SqlSession 实例不能被共享,也不是线程安全的。因此最佳的作用域范围是 request 作用域或者方法体作用域内。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Mybatis 的基本要素–核心对象
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00