大家好啊,今天呢来说下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()方法重载.如图:

通过源码分析,可以发现都是在调用同一签名方法:

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,即随着应用程序的生命周期一直存在。那么这种"存在于整个应用运行期间,并且只存在一个对象实例"的模式就是所谓的单列模式(指在运行期间有且仅有一个实例):下面举个例子:

package com.company;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.InputStream; public class MybatisUtil {
private static SqlSessionFactory factory; static {//在静态代码块下,factory只会被创建一次 try {
InputStream is = Resources.getResourceAsStream("mybatis-congif.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
} //创建和关闭
public static SqlSession createSqlSession() {
return factory.openSession(false);//true为自动提交事务
}
public static void closeSqlSession(SqlSession sqlSession){
if (null!=sqlSession){
sqlSession.close();
}
}
}

  通过以上静态类的方式来保证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作用域或者方法体作用域内。

今天就说这么多,一次写太多怕读者们消化不了,下章是详解MyBatis配置文件,敬请关注。

最新文章

  1. Python-Jenkins API使用 —— 在后端代码中操控Jenkins
  2. JS中如何输出空格
  3. tp生成验证码
  4. 关于python文件操作
  5. WPF NotifyIcon and Taskbar 任务栏示例
  6. js调试-定位到函数所在文件位置
  7. [AngularJS] Lazy Loading modules with ui-router and ocLazyLoad
  8. P65
  9. Go 语言函数
  10. 07 设置View的显示与隐藏
  11. java中<T> T和T的区别
  12. 一种基于python的人脸识别开源系统
  13. JAVA 的输入与输出流当中,什么时候该使用字符流?什么时候该使用字节流?
  14. Swift 命令行输入输出
  15. datagridview表头全选
  16. ctf入门常见类别
  17. Codeforces 352B - Jeff and Periods
  18. Flume性能测试报告(翻译Flume官方wiki报告)
  19. Bean Definition从加载、解析、处理、注册到BeanFactory的过程。
  20. 如何在WIndows电脑上安装 SVN Server 实现代码版本控制

热门文章

  1. 钉钉开发获取APPKEY, APPSECRET, CorpId和SSOSecret
  2. Shell学习心得(一):变量
  3. 使用Kubernetes演示金丝雀发布
  4. CSharpGL(53)漫反射辐照度
  5. 入门系列之使用Sysdig监视您的Ubuntu 16.04系统
  6. 来聊一聊不low的Linux命令——find、grep、awk、sed
  7. Spring Boot整合Mybatis并完成CRUD操作
  8. 设计模式之Singleton模式和Strategy模式是什么
  9. jqgrid three 树形结构
  10. JS,JQ 格式化小数位数