Mybatis的三个基本要素
核心接口和类
Mybatis
核心配置文件(mybatis-config.xml
)
SQL
映射文件(mapper.xml
)
核心接口和类
-
SqlSessionFactory
接口-
SqlSessionFactoryBuilder
实现类实现了SqlSessionFactory
接口,提供了Build
方法来返回一个SqlSessionFactory
接口对象 -
在
SqlSessionFactory
接口下定义了一些方法,这些方法返回SqlSession
接口的对象
-
-
SqlSession
接口-
接收
SqlSessionFactoryBuild
对象调用的方法返回的对象
-
SqlSessionFactory
、SqlSession
、SqlSessionFactoryBuild
三者关系图:
特点:
-
每个
Mybatis
程序都以一个SqlSessionFactory
对象的实例为核心 -
获取
SqlSessionFactoryBuilder
对象--->根据XML
或者Configuration
类的实例构建该对象 -
获取
SqlSessionFatory
对象--->通过SqlSessionFactoryBuilder
对象来获取 -
用
SqlSessionFactory
对象获取SqlSession
实例--->SqlSession
对象完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句
SqlSessionFactoryBuilder
类下的build
方法:
由于参数 environment 和 properties 都可以为 null,去除重复的方法,真正的重载方法其实只有如下三种:
-
build(InputStream inputStream, String environment, Properties properties)
-
build(Reader reader, String environment, Properties properties)
-
build(Configuration config)
由上述可知该方法的形参为三类:
-
InputStream(字节流)
-
Reader(字符流)
-
Configuration(类)
字节流和字符流都是读取配置文件的方式。一般习惯为采取 XML 配置文件的方式来构造 SqlSessionFactory。
优点:
-
避免硬编码
-
方便后续人员维护,避免重复编码
SqlSessionFactoryBuilder
的生命周期和作用域
最佳范围就是存在于方法体内,作为局部变量。--->SqlSessionFactoryBuilder 特点就是用过即丢。
SqlSessionFactory
概念及作用:
SqlSessionFactory 是工厂接口不是现实类,他的作用是创建 SqlSession。
SqlSessionFactory
的生命周期和作用域
最佳范围是Application
,作为全局变量。--->SqlSessionFactory 对象一旦创建,就会在整个应用程序过程中始终存在。无需再去销毁或再创建它,并且在应用程序运行中也不建议多次创建 SqlSessionFactory。
“存在于整个应用运行期间,并且只存在一个对象实例”的模式就是所谓的单例模式(指在运行期间有且仅有一个实例)。
SqlSession
作用:
用于执行持久化操作的对象,类似于 JDBC 中的 Connection。它提供了面向数据库执行 SQL 命令所需的所有方法,可以通过 SqlSession 实例直接运行已映射的 SQL 语句。
主要用途:
-
获取映射器。让映射器通过命名空间和方法名称找到对应的
SQL
,发送给数据库,执行后返回结果 -
直接通过
"命名空间(namespace) + SQL id"
的方式执行SQL
,不需要获取映射器。如上一篇例子
SqlSession
的生命周期和作用域
SqlSession 对应一次数据库会话,每次访问数据库时都需要创建 SqlSession 对象。
每个线程都有自己的 SqlSession 实例,SqlSession 实例不能被共享,也不是线程安全的。 SqlSession 的作用域范围是 request 作用域或方法体作用域内。