MyBatis核心对象简介说明

news2025/8/6 9:59:09

转自:

MyBatis核心对象简介说明

MyBatis 有三个基本要素:

  1. 核心接口和类
  2. MyBatis核心配置文件(mybatis-config.xml)
  3. SQL映射文件(mapper.xml)


下面首先介绍 MyBatis 的核心接口和类,如下图
 


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

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 会根据配置信息或者代码生成 SqlSessionFactory,并且提供了多个 build() 方法重载,如图。
 


从源码上,我们可以看出,可以发现以上方法都是在调用同一签名方法,即:

build(Reader reader, String environment, Properties properties)

由于参数 environment 和 properties 都可以为 null,去除重复的方法,真正的重载方法其实只有如下三种:

  1. build(InputStream inputStream, String environment, Properties properties)
  2. build(Reader reader, String environment, Properties properties)
  3. build(Configuration config)

通过上述分析,发现配置信息可使用三种形式提供给 SqlSessionFactoryBuilder 的 build() 方法,为 InputStream(字节流)、Reader(字符流)、Configuration(类)。

由于字节流和字符流都属于读取配置文件的方式,
即创建SqlSessionFactory 有两种方式,

  1.    读取 XML 配置文件
  2.    编写代码

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 的用途主要有两种

  1. 获取映射器。让映射器通过命名空间和方法名称找到对应的 SQL,并发送给数据库,执行后返回结果。
  2. 直接通过“命名空间(namespace)+SQL id”的方式执行 SQL,不需要获取映射器

SqlSession生命周期和作用域

     SqlSession 对应一次数据库会话。由于数据库会话不是永久的,
因此 SqlSession 的生命周期也不是永久的,每次访问数据库时都需要创建 SqlSession 对象

 注意事项:
       每个线程都有自己的 SqlSession 实例,SqlSession 实例不能被共享,
        也不是线程安全的。因此 SqlSession 的作用域范围是 request 作用域或方法体作用域内

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云会议网络研讨会,按次订购更方便!

如今,云会议已经成为日常办公协作的常态,但在线发布会、大型培训会、大型招聘会等大型会议,常规云会议由于会议容量有限、人多会控难、角色单一等技术限制,已经无法满足大型会议的需求,此时,网络研讨会便能…

【电商】电商后台系统整体介绍

电商后台系统支撑了电商企业亿万级的交易量,其重要性不言而喻。本文章将从电商后台系统的的各个模块来分析,让大家的后台真正”硬“起来。 当前关于产品经理的文章主要偏向方法论、业界动向、产品分析、用户体验、交互等,关于后台系统的文章比…

m在simulink进行DS-CDMA建模,然后通过MATLAB调用simulink模型进行误码率仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 研究信道编码在噪声和衰落信道条件下传输和保护数据或图像类型源的性能。在工作于AWGN和瑞利衰落信道(可根据需要选择信道类型)的Simulink中创建二进制PSK&#x…

Metabase学习教程:视图-5

用地图可视化数据 如何使用标注地图、区域地图和网格地图来可视化Metabase中的数据。 本文介绍如何在Metabase中使用地图来可视化数据。本文中使用的美国地图是使用示例数据库每次安装Metabase时都会用到。 地图类型 Metabase具有三种地图类型: 标注地图标记特…

【Spring(五)】引入篇:一文带你弄懂AOP的底层原理(动态代理)

有关Spring的所有文章都收录于我的专栏:👉Spring👈 目录 一、前言 二、使用AOP需要的依赖 三、引入 四、AOP的底层原理之动态代理 五、总结 相关文章 【Spring(一)】如何获取对象(Bean)【Sprin…

[附源码]SSM计算机毕业设计民宿客栈管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于QT封装海康SDK(MvCameraControl),访问控制海康相机

1、封装类HkCameraApi,此类可以访问控制海康的网络相机、USB相机,可以同时采集多台相机的视频、控制设置的各种属性设置。 2、采集效果如下: 3.、该类已经上传,下载地址:基于C++封装HkCameraApi类,用于访问控制海康相机-C++文档类资源-CSDN下载 4、HkCameraApi类的头文…

【附源码】计算机毕业设计JAVA疫情下的居民管理系统

【附源码】计算机毕业设计JAVA疫情下的居民管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA…

算法图解学习4 递归

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼,常常是伪装起来的好运。 递归 背景导入 在一个盒中盒找钥匙 第一种实现方法,如下图 第二种方法,如图 两种方法伪代…

6.jQuery中的Ajax上传文件

目录 1 上传文件 2 loading效果 1 上传文件 后端接到数据后保存在upload_file文件夹下 前端依然使用FormData处理文件 contentType:false的意思是 使用FormData默认的Content-Type值 processData:false的意思是 不对FormData中的数据进行url编码,而是将Form…

与专业安全厂商相比,戴尔做安全的优势是什么?

上文介绍了戴尔大谈零信任架构的原因,也提到了现代安全的三大要素,分别为:信任的基础、简化的零信任采纳和网络恢复计划。事实上,戴尔作为全球大型IT基础设施提供商,能提供多种网络安全能力来构建现代安全,…

当你碰到了MySQL中的死锁,你了解这些机制吗?

MySQL死锁怎么来的? 当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现“死锁”。 总结一下生产死锁的4个条件: 两个或者两个以上事务 每个事务都已经持有锁并且申请新的锁…

[附源码]java毕业设计游戏战队考核系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Baklib帮助中心:自助服务指南

根据 Social endurance 的调查,64%的客户希望在 Twitter 上发帖一小时内得到回复,85%的客户希望公司在6小时内回复。 虽然这种客户期望的趋势几乎适用于所有行业,但某些行业——如电子商务应用程序——的流量正创下历史新高。大多数公司可能…

如何在矩池云上安装语音识别模型 Whisper

如何在矩池云上安装语音识别模型 Whisper Whisper 是 OpenAI 近期开源的一个语音识别的模型,研究人员基于 680,000 小时的标记音频数据进行训练,它同时也是一个多任务模型,可以进行多语言语音识别以及语音翻译任务,可以将语音音频…

【CVPR 2022】QueryDet:加速高分辨率小目标检测

大连不负众望,疫情了,我们又封校了,可能初步封个5678天,微笑jpg 论文地址:https://arxiv.org/pdf/2103.09136.pdf 项目地址:https://github.com/ ChenhongyiYang/QueryDet-PyTorch 1. 简介 背景&#xf…

java中的线程池

文章目录前言线程池的优点线程池的实现原理线程池的创建线程池提交任务线程池的关闭合理配置线程池线程池的监控总结前言 在处理一些比较复杂或者费时的任务的时候,我们常常会选择多线程的方式去处理。那么怎么创建多个线程呢,当然不可能是一个一个创建…

微信如何制作自己的小程序【微信小程序】

小程序在微信的生态中,一直是比较受到企业商家的欢迎, 由于小程序的制作门槛比较低,开发人员可以根据自己喜欢的风格进行定制开发。 微信平台上,很多商家都在为制作小程序而发愁。那么微信如何制作自己的小程序呢? 一…

[附源码]java毕业设计疫情期间物资分派管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

ebay卖家开店如何做到稳定出单?自养号测评对eBay卖家有什么优势?

ebay卖家开店如何做到稳定出单,有何方法。 1、上架 ebay新账户快速下单的方式是拍卖,但拍卖价格不稳定,可能会让商家赔钱。为了快速打开新账户的局面,商家不妨在早期阶段开始拍卖,因为拍卖是最能驱动流量的。请注意&…