首页 > 其他 > 详细

Mybatis框架

时间:2021-02-27 23:59:03      阅读:42      评论:0      收藏:0      [点我收藏+]

连接数据库层的框架,ORM类型的框架(对象关系映射类型)

ORM:用于实现面向对象编程语言里不同类型系统的数据之间的转换

其实就是将java和mysql类型一一对应。

Mybatis底层实现:

有几种方式解析mappers文件

答:4种   1.resource     2.url    3.class     4.package

优先级:  package最高

Mybatis是如何获取sql的

Mybatis有多少种执行器

三种:simple(默认)   reuse   batch

一级缓存是开启的

 问题:A系统sql ,B系统判断sql是否正确? 答:语法引擎会去改写sql,把占位符的sql会变成?号格式的sql,jdbc可以识别?号

 MyBatis缓存:作用(优点):提高查询的效率和减少数据库的压力,MyBatis也有一级缓存和二级缓存,还预留了集成第三方缓存的接口

MyBatis缓存都在cache包里面,其中有一个cache接口,只有一个默认的实现类Perpetualcache

所有的缓存实现类总体上可分为三类:基本缓存、淘汰算法缓存、装饰器缓存。

一级缓存也叫本地缓存,MyBatis的一级缓存是在会话(sqlSession)层面进行缓存的,默认开启的也是一级缓存,每当我们使用MyBati开启一次和数据库的会话,MyBatis会创建一个SqlSession对象表示一次数据库会话。

一级缓存

一级缓存的生命周期?

  1. 开启一次会话创建一个新的SqlSession对象,SqlSession对象钟会有一个新的Executor对象,Executor对象,就会有一个新的PerpetualCache对象,当会话结束时,sqlSession对象及内部的Executor对象还有PerpetualCache对象一起释放
  2. 如果sqlsession调用close()方法,会释放一级缓存PerpetualCache对象,一级缓存不可以用
  3. 如果SqlSession调用clearCache(),会清空PerpetualCache对象数据,但是该对仍可以使用

4.SqlSession中执行任何一个update操作(update(),delete(),insert()),都会情况PerpetualCache对象数据,但是该对象可以继续使用

SqlSession一级缓存的工作流程

  1. 对于某个查询,根据StatementId,params,rowBounds来构建一个key值,根据这个key值去缓存cache中取出对应值存储缓存结果
  2. 判断从Cache中根据特定的key值取的数据数据是否为空,即是否命中;?

 如果命中,则直接将缓存结果返回;?

. 如果没命中: 去数据库中查询数据,得到查询结果; 将key和查询到的结果分别作为key,value对存储到Cache中;将查询结果返回

同一个session中共享(不同session不能共享)

一级缓存缺点:缓存不能跨会话共享,不同的会话之间对于相同的数据可能有不一样的缓存

在有多个会话或者分布式环境下,会存在脏读数据的问题,这个问题可以使用二级缓存解决

 

 

二级缓存

二级缓存是来解决一级缓存不能跨会话共享的问题,范围是namespace级别的,可以被多个sqlsession共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步,如果你的myBatis使用二级缓存,并且Mapper和select语句也配置使用二级缓存,那么在执行查询的时候,会先从二级缓存中取出输入,其次才是一级缓存,mybatis查询数据顺序是:二级缓存---->一级缓存---->数据库

  1. 实际上Mybatis用了一个装饰器的类来维护,就是cachingExecutor,如果启动了二级缓存,MyBatis在创建Executor对象的时候会对Executor进行装饰,CachingExecutor 对于查询请求,会判断二级缓存是否有缓存结果,如果有就直接返回,如果没有委派交给真正的查询器Executor 实现类,比如SimpleExecutor 来执行查询,再走到一级缓存的流程。最后会把结果缓存起来,并且返回给用户。

Mybatis框架

原文:https://www.cnblogs.com/yswsxf/p/14456476.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!