mybatis常见面试题

mybatis常见面试题

#{}和${}的区别是什么?

Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set方法来赋值;能够防止sql注入.

Mybatis 在处理\({}时,就是把\){}替换成变量的值。

mybatis的一级缓存和二级缓存

https://www.bilibili.com/video/BV1sM4m1f7L1/?spm_id_from=333.337.search-card.all.click&vd_source=273847a809b909b44923e3af1a7ef0b1

1。缓存的作用

缓存的作用:减低数据源的访问频率。从而提高数据源的处理能力。或者提高服务器的响应速度

2。MyBatis中的缓存设计

  • MyBatis中的缓存的架构设计:装饰器模式

  • MyBatis中的一级缓存和二级缓存

  • 一级缓存:session级别

    一级缓存是SqlSession级别的缓存,它默认是开启的,当同一个sqlsession执行相同的sql语句时,会先从缓存中查找,如果找到了对应的结果。则直接返回缓存中的结果,而不会再次访问数据库。

    在实际项目开发中一级缓存一般没有什么作用。

    要关闭一级缓存:
    //还有一个值是SESSION,也就是默认是开启的。

  • 二级缓存:SqlSessionFactory级别

    二级缓存是Mapper级别的缓存(说白了就是进程级别的缓存),它默认是关闭的。当不同的sqlsession执行相同的sql语句时,如果开启了二级缓存,则会先从缓存中查找,如果找到了对应的结果,则直接返回缓存中的结果,而不会再次访问数据库。

    要开启二级缓存:

    首先是在全局配置文件中设置:

    然后要在具体的映射文件中设置cache标签

    如果映射文件中的某个方法不想开启缓存可以设置useCache = "false"处理。

​ 缺点:二级缓存在单体架构中是不会出现问题的,但是在集群架构中就可能会出现数据不一致的问题。

  • 三级缓存:需要我们自定义实现,需要重写一个Cache接口。

缓存的设计

	通过装饰模式实现缓存功能扩展

缓存的应用

	一级缓存和二级缓存

一级缓存和二级缓存的顺序问题:先二级缓存再一级缓存

为什么会先走二级缓存再走一级缓存?

二级缓存的作用域是SqlSessionFactory级别-90%找到

一级缓存是SqlSession级别的-5%找到

一级缓存和二级缓存底层默认都是基于PerpetualCache来实现的,底层用的是HashMap.

Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么

底层基于CGLIB来实现。

posted on 2024-09-09 18:34  ~码铃薯~  阅读(3)  评论(0编辑  收藏  举报

导航