MyBatis源码面试题

MyBatis源码面试题

一、介绍下你对MyBatis源码的理解

  ORM框架:CRUD操作

1。SQL解析: 映射文件、注解–》映射器解析 XMLMapperBuilder MapperAnnotationBuilder

2。SQL执行: SqlSession 接口–》Executor --》 SimpleExecutor ReuseExecutor 【Statement–JDBC】

3。结果映射:ResultSetHandler

4。插件机制:Interceptor

5。缓存机制–》工作中 二级缓存 --》Redis做缓存

二、谈谈你对MyBatis中缓存的理解

  缓存的作用:不加缓存 1。查询的效率降低 2。增大了数据库的压力

一级缓存:会话级别的

二级缓存:进程级别的

1。项目中要使用缓存 全局配置文件中 settings 我们需要打开, 在对应的映射文件中

2。一级缓存是默认使用的。二级缓存我们需要自己开启:源码中是如何设计的?

一级和二级缓存的执行的先后顺序:先查二级缓存。二级缓存没有再看一级缓存。一级缓存如果还是没有那么走数据库查询

作用域:一级缓存的作用域是session级别的,命中率很低

数据同步:DML操作的时候会清空缓存的数据

三、现在都是分布式环境,MyBatis如何实现三级缓存?

  1。我们工作用到了三级缓存。通过Redis。怎么实现呢?

三级缓存的自定义实现。重写Cache接口的读写方法

四、谈谈你对日志模块的理解

  定位你对MyBatis框架的理解:

日志模块使用到了适配器模式,对于MyBatis中的数据库的相关操作通过代理模式实现了日志的监控

五、谈谈你对SqlSessionFactory的理解

  SqlSessionFactory:工厂模式:负责SqlSession对象的管理

全局的。我们应该对SqlSessionFactory做单例处理;

完成全局配置文件和映射文件的加载解析–》Configuration对象

六、谈谈你对SqlSession的理解

  SqlSession具体处理每个CRUD操作

1。生命周期:需要做数据库操作的时候会创建。不需要操作数据库就关闭

2。作用:完成数据库的操作

3。线程安全:SqlSession是线程不安全的 --》 单纯的MyBatis的应用。我们就不能把SqlSession作用成员变量来使

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JavaHxg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值