SqlSession接口|学习笔记

简介: 快速学习SqlSession接口

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术SqlSession接口学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15945


SqlSession接口


已经把类图给大家画出来了,此图并不是全部的类图,

image.png

因为在 SqlSession框架中间,至少有100多个类图,但老师的图已经涵盖了 MyBatis主要的功能,且标成了不同的颜色代表不同的功能;其中两个白色的类并不是 MyBatis框架里面的类,上面白色的类是 Spring里面的类,MyBatis 的框架不局限于用在Spring的框架中间,它可以独立来使用;写任何一个Java程序需要访问

数据库、需要用面向对象的方式来访问数据库里都可以直接把MyBatis引进来写。

但是在 Spring的框架中间,为了更好的去使用 MyBatis,是不需要去做一些初始化工作的,而是由 Spring的框架来完成的:包括配置数据的读入以及所有Mapper接口

的发现,都是由Spring框架来完成的。

MyBatis 在 Spring有一个独立的包,叫做 Spring MyBatis。因为我们都是用Starter,Starter 里面已经把这个包给涵盖了,所以 MyBatis 包的作用就是读入

MyBatis配置信息和搜索并创建Mapper对象。

①上面那个白色的部分就是 Spring MyBatis 包的一个类,因为在讲 MyBatis时,大部分都是讲其在Spring框架中间怎么去用,所以从那个类上可以说是一个 Spring的

Bean,而且是一个FactoryBean。我们通常用的就是Bean,FactoryBean和Bean的差别在于它是用来构造其他Bean,是可以用来去造其他Bean的Bean;MyBatis并主

要的作用就是造出SqlSessionFactoryBean ,就是下图蓝色部分的SqlSession。

我们整个使用MyBatis的入口,就是从蓝色的这一组类进入的(如下图),

image.png

蓝色的类中有两个最主要的接口,一个是 SqlSession:我们做任何数据库访问都是通过它来完成的;而另外一个就是 SqlSessionFactory:它是用来构造出 SqlSession的。如果我们要构造出 SqlSession,就需要拿到一些数据库的设置,例如:数据库的jdbc设置、用户名、密码和连接池等。这些都是会用在 SqlSessionFactory 里面,用来去构造出我们做查询的时所用到的SqlSessionFactory。

左上角蓝色是 SqlSessionFactoryBuilder,它用在这个 FactoryBean里面去构造Factory,所以 Factory所需要的属性或者特征是通过这个 Builder做出来的。我们可以看到在 SqlSessionFactoryBean里面,它所关联的是 Builder。因为这是个FactoryBean,其目的是构造出一个 Bean,而它要构造出来的Bean是SqlSessionFactory,所以它是通过这个 SqlSessionFactoryBuilder来构造出这个

SqlSessionFactory。

这就是上面白色的类和蓝色的类的作用。

②下面白色的类,这个就是我们所定义的接口。

image.png

这些接口不属于 Spring的框架,也不属于 MyBatis的框架,所以我们要使用MyBatis时需要去定义这些接口,然后给接口定义它的配置信息,两种配置方式:一种是在接口上写注解,另一种是定义一个独立的 XML,针对每个接口定义XML去说这个方法如何去用。这个部分是属于我们自己要写的部分,所以老师同样也用白

色去标识了,但这只是类图上面标的接口的定义。

接下来逐一介绍上面的类的作用,以及它们是怎样协作完成 MyBatis框架的一些功能,然后再介绍它的动态模型。具体来讲两个例子:一个是 Spring框架中间是如何把一个 Mapper对象驻进来,另一个是当你拿到一个驻的 Mapper对象以后怎么去

调它的一个方法,最后它会变成一个 sql语句去执行。这其实也是在用 MyBatis时主要的两个过程。

首先讲静态模型,刚刚老师已经讲过蓝色部分主要的两个接口,一个是SqlSessionFactory,另一个是 SqlSession。SqlSession 是我们用来去访问 MyBatis的一个门户,我们目前在访问 MyBatis的时候,可能更多的是通过Mapper的接口来访问的,而不是通过 SqlSession来访问的。实际上来说在MyBatis中间,它是提供了通过 SqlSession来直接来访问 MyBatis一种途径。如下图在 SqlSession

上提供了一系列的方法:select、insert、update等。

我们在xml中间所定义的标签,比如 select 标签、insert 标签、update 标签,其实对应的就是在 SqlSession上面的一个方法,只不过是我们想用面向对象的方式、更友好的方式来使用 SqlSession,所以我们通过定义这个接口来使用 SqlSession。这样使用的方式也是更加友好的,我们不需要去想调 SqlSession需要哪一个方法,要去给它传什么样的参数;直接以面向对象的方式去调接口里头的某一个方法,然后接口传过去的值也是对象,这是 SqlSession的作用。所以无论是我们直接调SqlSession还是通过那些接口,它归根结底还是通过 SqlSession所提供的一系列方来访问 MyBatis、去操作数据库。SqlSession 和 SqlSessionFactory 是两个接口,在 MyBatis 包里面各自只有一个实现类,一个是DefaultSqlSessionFactory,另一个是 DefaultSqlSession,这样设计的目的是在考虑未来可能会有一种新的访问

MyBatis的方式,就是在 SqlSession接口上去做一个新的实现;但是这种新的实现如果需要一种新的构造方式,就在 SqlSessionFactory下面构造一个新的Factory来构造这种新的实现。但目前来说 MyBatis就是用来访问基于sql关系数据库的,所以

说就只有 DefaultSqlSessionFactory 和 DefaultSqlSession是我们使用的入口。

相关文章
|
9月前
|
SQL XML Java
Mybatis的mapper接口实现原理
Mybatis的mapper接口实现原理
186 0
|
1月前
|
Java 数据库连接 mybatis
MyBatis中Mapper接口和dao区别是什么?
MyBatis中Mapper接口和dao区别是什么?
|
1月前
|
SQL Java 数据库连接
一篇看懂Mybatis的SqlSession运行原理
SqlSession是Mybatis最重要的构建之一,可以简单的认为Mybatis一系列的配置目的是生成类似 JDBC生成的Connection对象的SqlSession对象,这样才能与数据库开启“沟通”,通过SqlSession可以实现增删改查(当然现在更加推荐是使用Mapper接口形式),那么它是如何执行实现的,这就是本篇博文所介绍的东西,其中会涉及到简单的源码讲解。
71 1
|
1月前
|
缓存 Java 数据库连接
一文彻底搞懂Mybatis系列(十)之SqlSession、SqlSessionFactory和SqlSessionFactoryBuilder详解
一文彻底搞懂Mybatis系列(十)之SqlSession、SqlSessionFactory和SqlSessionFactoryBuilder详解
607 1
|
10月前
|
SQL 缓存 Java
MyBatis核心 - SqlSession如何通过Mapper接口生成Mapper对象
从 SqlSessionFactoryBuilder - SqlSessionFactory - SqlSession - Mapeper实例对象 的过程
121 0
|
1月前
|
Java 数据库连接 mybatis
Mybatis源码细节探究:sqlSessionFactory.openSession()这个方法到底发生了什么?
Mybatis源码细节探究:sqlSessionFactory.openSession()这个方法到底发生了什么?
|
1月前
|
设计模式 缓存 Java
MyBatis原理分析之获取SqlSession
MyBatis原理分析之获取SqlSession
134 0
|
11月前
|
Java 数据库连接 数据库
mybatis plus中BaseMapper接口
在使用的过程中,BaseMapper会指定范型T,T又通过TableName关联了某个数据库的某张表,因此实际上BaseMapper的所有操作都是针对某个数据库的某张表来执行。
|
Java 数据库连接 mybatis
MyBatis实现基于Mapper接口代理Dao的CURD
MyBatis实现基于Mapper接口代理Dao的CURD
|
SQL Java 数据库连接