框架学习系列 mybatis 第二篇 mybatis的工作原理

本节主要内容

1:mybatis的原理介绍

2:总结&下节预告

本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第二篇 mybatis的工作原理

声明:本文系凯哥原创。转载请注明出处

一:mybatis的原理介绍

mybatis 框架整体的话,先上一张图吧。然后通过这张图对于mybatis的框架原理进行一下展开。

框架学习系列 mybatis 第二篇 mybatis的工作原理

流程说明:

1:加载配置并初始化

通过读取mybatis全局配置文件(mybatisConfig.xml 可以不是这个名字。)从中获取需要的参数。比如:数据源、事物、映射文件(也就是mapper文件。执行statement的相关信息,包括执行sql语句、输入参数、输出结果)等信息后加载到内存中。

其中来源有多种方式:通过配置文件或者是通过主角方式获取

在项目中如下图:

框架学习系列 mybatis 第二篇 mybatis的工作原理

2:由sqlSessionFactory(会话工程)根据获取到的数据库连接信息创建出访问数据库所需要的sqlSession会话对象。

3:通过sqlSession会话对象,程序开发者可以进行CRUD(增删改查)操作。

该接口有一个默认的实现:DefaultSqlSeesion.

4:有获取到的sqlsession对象调用executor接口进行对数据库正在的操作。

需要注意的是:sqlsession对象是不能够直接操作数据库的。

executor(执行器)有两个实现:基本执行器和缓存执行器。其中缓存执行器是默认的

5:执行器会根据配置和sqlsession对象中的信息查找到对应的毛片儿Statement(就是对应的mapper.xml)执行相应的语句。

mappedStatemen会查找对应mapper.xml中对应id的sql执行语句。会根据输入参数+sql语句执行数据库操作后,返回对应的输出结果。

其中,输入参数的类型:

1:简单类型

2:pojo对象

3:hashMap等

输出结果类型:

1:简单类型

2:pojo

3:hashmap

换言之:

我们知道,持久层的工作就是和数据库打交道,将我们的数据从系统中存入数据库,或者是将数据库中的内容取出。这也是持久层框架干的事情。在mybatis中,mapped statement(底层封装对象)和Executor(执行器),对用户是透明不可见的。也就是说,我们用户不需要知道我们传入的各种参数是如何被mapped statement 进行封装成为一个可以被数据库是别的sql语句的参数的。也不用知道Executor是如何在sqlSession内部通过一系列的执行去操作数据库的。

我们需要做的是,创建一个sqlSession(链接数据库的会话)的对象,通过这个sqlSession接口提供给程序员的一些方法,传入相应的映射文件(这个文件包含有我们要执行的sql语句)及对应的参数。然后在mybatis内部,将传入的映射文件的内容和传入参数进行解析,然后通过执行器去发送sql语句。再将得到的结果通过底层封装对象进行封装。返回给sqlSession方法的调用方。

这里需要注意一个地方:sqlSession默认情况下是不会自动提交事务的,所以,在我们跟数据库链接的时候,如果需要提交事务,需要手动的进行提交。而且我们在手动提交sql语句的时候,是需要和数据库建立连接的。那么问题来了,我们的sqlSession这个会话是怎么来的呢?它又是在什么时候和数据库建立了链接呢?

在我们的mybatis中,有一个会话工厂,它是一个全局只需要一个的工厂。它的作用就是创建sqlsession。和数据库链接的数据源对象就是通过sqlSessionFactory这个工厂进行的创建时,赋值给了sqlSession这个会话对象的。所以一般sqlSessionFactory一般都是配置为单例的。而我们的整个mybatais的所有配置,并不是由sqlSessionFactory去进行读取的,根据单一职责原则,在mybatis中,是由SqlSessionFactoryBuilder去进行读取的,当然,它读取的配置信息是有很多的,将mybatis的运行环境信息读取完成之后,然后创建一个SqlSessionFactory。由于这些读取环境不是mybatis的核心,我们的图上就没有体现。

那么,这些配置文件写在哪了呢?我们一般写在SqlMapConfig.xml这个文件中。(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境。

那么,mybatis在运行的时候是怎么执行的呢呢?

mybatis的执行流程

首先呢,我们配置mybatis的配置文件,sqlmapConfig.xml这个文件(虽然名称不固定,但是这是约定成俗的写法)。

然后,通过配置文件,加载mybatis的运行环境,创建SqlSessionFactory的会话工厂(按照单例方式创建,多例也可以,不过浪费资源严重)。

接下来,通过会话工厂(SqlSessionFactory)去创建会话(SqlSession)。这个接口是线程不安全的,所以建议应用在方法体内。

剩下的就是,调用sqlSession的方法去操作数据库了。操作完成后,进行下事务的commit()的方法。然后释放资源关闭sqlSession。

其中我们程序开发者关注的:

1:配置文件的配置等

2:根据自身业务在mapper.xml中编写的对应CRUD执行的sql语句。

二:总结&下节预告

通过本文学习,我们需要知道mybatis具体的工作原理。这样有利于我们更好的去学习mybatis

下节预告:现在我们了解了mybatis的工作原理,那么接下来我们需要干嘛呢?《mybatis入门程序之工程项目的搭建》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值