问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MyBatis面试考点

创作时间:
作者:
@小白创作中心

MyBatis面试考点

引用
CSDN
1.
https://blog.csdn.net/weixin_43785387/article/details/139578856

MyBatis面试考点

MyBatis执行流程

  1. 加载MyBatis配置文件,mybatis-config.xml加载运行环境和映射文件
  2. 构建会话工厂SqlSessionFactory
  3. 会话工厂创建SqlSession对象(包含了执行SQL语句的所有方法)
  4. 操作数据库的接口,Executor执行器,同时负责查询缓存的维护
  5. Executor接口的执行方法中有一个MappedStatement类型的参数,封装了映射信息
  6. 输入参数映射
  7. 输出结果映射

MyBatis是否支持延迟加载?

Mybatis支持延迟加载,但是默认没有开启。延迟加载是指需要用到数据时才进行加载,不需要用到数据时就不加载数据。可以在MyBatis配置文件中启用加载lazyLodingEnable=true,默认是关闭的

延迟加载的原理?

  1. 使用CGLIB创建目标对象的代理对象
  2. 当调用目标方法user.getOrderList()时,进入拦截器invoke方法,发现user.getOrderList()时null值,执行sql查询order列表
  3. 把order查询上来,然后调用user.setOrderList(List orderList),接着完成user.getOrderList()方法的调用

MyBatis的一级、二级缓存用过吗?

  • 本地缓存:基于PerpetualCache,本质是一个HashMap
  • 一级缓存:作用域时session级别,默认是开启的
  • 二级缓存:作用域时namespace和mapper的作用域,不依赖于session。默认是关闭的,需要在全局配置文件开启cacheEnable=true,然后再mapper文件加上<cache/>。只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中。

MyBatis二级缓存什么时候会清理缓存中的数据

当某一个作用域(一级缓存Session/二级缓存Namespace)进行了新增、修改、删除操作以后,默认该作用域下所有select中的缓存将被clear

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号