MyBatis核心对象
MyBatis 有三个基本要素:
核心接口和类
MyBatis核心配置文件(mybatis-config.xml)
SQL映射文件(mapper.xml)
下面首先介绍 MyBatis 的核心接口和类,如下所示。

首先获取 SqlSessionFactoryBuilder 对象,可以根据 XML 配置文件或者 Configuration 类的实例构建该对象。
然后获取 SqlSessionFactory 对象,该对象实例可以通过 SqlSessionFactoryBuilder 对象来获取。
有了 SqlSessionFactory 对象之后,就可以进而获取 SqlSession 实例。SqlSession 对象中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句。
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder 会根据配置信息或者代码生成 SqlSessionFactory,并且提供了多个 build() 方法重载,如图。
通过源码分析,可以发现以上方法都是在调用同一签名方法,即:
build(Reader reader, String environment, Properties properties)
由于参数 environment 和 properties 都可以为 null,去除重复的方法,真正的重载方法其实只有如下三种:
build(InputStream inputStream, String environment, Properties properties)
build(Reader reader, String environment, Properties properties)
build(Configuration config)
通过上述分析,发现配置信息可以以三种形式提供给 SqlSessionFactoryBuilder 的 build() 方法,分别是 InputStream(字节流)、Reader(字符流)、Configuration(类)。
由于字节流和字符流都属于读取配置文件的方式,所以就很容易想到构建一个 SqlSessionFactory 有两种方式,即:读取 XML 配置文件和编写代码。一般习惯为采取 XML 配置文件的方式来构造 SqlSessionFactory,这样一方面可以避免硬编码,另一方面方便日后配置人员修改,避免重复编译代码。
SqlSessionFactoryBuilder的生周期和作用域
SqlSessionFactoryBuilder 的特点就是用过即丢。创建 SqlSessionFactory 对象之后,这个类就不存在了,因此 SqlSessionFactoryBuilder 的范围就是存在于方法体内,也就是局部变量。SqlSessionFactory
SqlSessionFactory 是工厂接口而不是现实类,他的任务就是创建 SqlSession。所有的 MyBatis 应用都以 SqlSessionFactory 实例为中心,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 对象来获取。有了它以后,顾名思义,就可以通过 SqlSession 提供的 openSession() 方法来获取 SqlSession 实例。源码如下。
public interface SqlSessionFactory {
SqlSession openSession();
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();
}
SqlSessionFactory的生周期和作用域
SqlSessionFactory 对象一旦创建,就会在整个应用程序过程中始终存在。没有理由去销毁或再创建它,并且在应用程序运行中也不建议多次创建 SqlSessionFactory。因此 SqlSessionFactory 的作用域是 Application,即随着应用程序的生周期一直存在。这种“存在于整个应用运行期间,并且只存在一个对象实例”的模式就是所谓的单例模式(指在运行期间有且仅有一个实例)。SqlSession
SqlSession 是用于执行持久化操作的对象,类似于 JDBC 中的 Connection。它提供了面向数据库执行 SQL 令所需的所有方法,可以通过 SqlSession 实例直接运行已映射的 SQL 语句。
void clearCache();
Configuration getConfiguration();
void rollback(boolean force);
void commit(boolean force);
int delete(String statement, Object parameter);
...
SqlSession 的用途主要有两种。
获取映射器。让映射器通过名空间和方法名称找到对应的 SQL,并发送给数据库,执行后返回结果。
直接通过“名空间(namespace)+SQL id”的方式执行 SQL,不需要获取映射器。这是 iBatis 版本留下的方式。例如《个MyBatis程序》一节的示例就是这种方式执行的 SQL 语句。
SqlSession生周期和作用域
SqlSession 对应一次数据库会话。由于数据库会话不是的,因此 SqlSession 的生周期也不是的,每次访问数据库时都需要创建 SqlSession 对象。需要注意的是:每个线程都有自己的 SqlSession 实例,SqlSession 实例不能被共享,也不是线程安全的。因此 SqlSession 的作用域范围是 request 作用域或方法体作用域内。
- 随机文章
- 安丘 马尔代夫(安丘旅游集团计划在马尔代夫建设度假村)
- 电信 马尔代夫 流量(电信提供马尔代夫流量专属服务,让您畅享海岛生活)
- 中国马尔代夫直飞(直飞中国马尔代夫:开启梦幻海岛之旅)
- 传统钓鱼马尔代夫(体验传统钓鱼文化,马尔代夫海钓之旅)
- 小苍马尔代夫写真(小苍的马尔代夫旅拍,仙女般的美照!)
- 保罗乔治马尔代夫(保罗乔治度假马尔代夫,晒出健身照片)
- 河北 马尔代夫(河北游客前往马尔代夫度假)
- 孟津马尔代夫湿地(孟津湿地成为马尔代夫海洋保护区新宠)
- 军舰 马尔代夫(马尔代夫海军将添一艘战舰)
- 清晨马尔代夫的画(清晨的马尔代夫:一个美不胜收的画。)
- 浪漫马尔代夫旅行(体验马尔代夫之旅:浪漫蓝色海洋之旅)
- 唐县东方马尔代夫(唐县东方马尔代夫:避暑季度梦幻之选)
- 碧绿海水马尔代夫(美丽的碧绿海水,魅力满满的马尔代夫)
- 心里若有马尔代夫(心中有马尔代夫,如何度过疫情假期?)
- 皖南马尔代夫景点(建议:探秘中国马尔代夫:皖南五青湖)
- 美丽玉溪马尔代夫(玉溪:“中国马尔代夫”彰显绿色美丽)
- 贵定马尔代夫温泉(马尔代夫温泉体验:放松身心尽在其中)
- 潜水马尔代夫简介(探索马尔代夫——这个印度洋上的瑰宝)
- 广州马尔代夫花园(广州马尔代夫花园:享受浪漫私密空间)
- 丽芙 马尔代夫(丽芙度假村:享受极致马尔代夫之旅)
- 马尔代夫主场没人(马尔代夫主场比赛空荡以至于无人问津)
- 露营马尔代夫图片(壮丽岛屿露营:探索马尔代夫美丽风景)
- 山东 马尔代夫(山东豪华旅游项目仿马尔代夫落地)
- 宁德时代马尔代夫(宁德时代荣膺马尔代夫纯电动巴士合约)
- 美丽马尔代夫视频(美丽马尔代夫:令人神往的海底世界。)
- 马律 马尔代夫(马尔代夫引领全球无需注射疫苗的旅游新趋势)
- 瓦度 马尔代夫(后的:瓦度岛:探寻马尔代夫最美丽的度假胜地)
- 心有 马尔代夫(探秘浪漫马尔代夫:一击中心脏的度假胜地)
- 马尔代夫保险价格(马尔代夫保险费用:您需要支付多少?)
- 马尔代夫出行感受(走进马尔代夫:我的度假胜地探索之旅)
