连接数据库层的框架,是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对象表示一次数据库会话。
一级缓存
一级缓存的生命周期?
4.SqlSession中执行任何一个update操作(update(),delete(),insert()),都会情况PerpetualCache对象数据,但是该对象可以继续使用
SqlSession一级缓存的工作流程
如果命中,则直接将缓存结果返回;?
. 如果没命中: 去数据库中查询数据,得到查询结果; 将key和查询到的结果分别作为key,value对存储到Cache中;将查询结果返回
同一个session中共享(不同session不能共享)
一级缓存缺点:缓存不能跨会话共享,不同的会话之间对于相同的数据可能有不一样的缓存
在有多个会话或者分布式环境下,会存在脏读数据的问题,这个问题可以使用二级缓存解决
二级缓存
二级缓存是来解决一级缓存不能跨会话共享的问题,范围是namespace级别的,可以被多个sqlsession共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步,如果你的myBatis使用二级缓存,并且Mapper和select语句也配置使用二级缓存,那么在执行查询的时候,会先从二级缓存中取出输入,其次才是一级缓存,mybatis查询数据顺序是:二级缓存---->一级缓存---->数据库
原文:https://www.cnblogs.com/yswsxf/p/14456476.html