interview
mybatis
说说MyBatis的缓存机制?

MyBatis面试题, 说说 MyBatis 的缓存机制?

MyBatis面试题, 说说 MyBatis 的缓存机制?

QA

Step 1

Q:: MyBatis 的缓存机制是什么?

A:: MyBatis 提供了一级缓存和二级缓存机制。一级缓存是 SqlSession 级别的缓存,默认开启且只在一个 SqlSession 中有效。二级缓存是 Mapper 映射文件级别的缓存,需要手动配置,并且可以跨 SqlSession 使用。

Step 2

Q:: 如何配置 MyBatis 的二级缓存?

A:: 在 MyBatis 配置文件中,通过添加 <cache/> 元素到 Mapper 映射文件中来开启二级缓存。还可以通过 cache 标签的各种属性(如 eviction、flushInterval、size、readOnly 等)来控制缓存的行为。

Step 3

Q:: MyBatis 的一级缓存的作用范围是什么?

A:: MyBatis 的一级缓存作用范围是 SqlSession,意味着在同一个 SqlSession 内,相同的查询结果会被缓存。该缓存不会跨 SqlSession 使用。

Step 4

Q:: MyBatis 缓存的失效情况有哪些?

A:: MyBatis 缓存会在以下情况下失效:1. 执行了 INSERT、UPDATE、DELETE 操作;2. SqlSession 关闭或清空;3. 映射文件中的 select 语句中使用了 flushCache=true 属性;4. 手动清空缓存。

Step 5

Q:: MyBatis 二级缓存的优点和缺点是什么?

A:: 优点:提高查询效率,减轻数据库压力。缺点:数据一致性问题,需要合理设置缓存失效策略,缓存占用内存空间。

Step 6

Q:: MyBatis 如何处理缓存和事务的关系?

A:: MyBatis 的一级缓存与事务绑定,当事务提交或回滚时,一级缓存会被清空。二级缓存则需要手动控制缓存的刷新和失效。

用途

面试中考察 MyBatis 缓存机制,是因为缓存机制在提高应用性能方面起着关键作用。缓存能够显著减少数据库访问次数,提升数据查询效率。但同时,缓存机制的配置和使用也较为复杂,需要开发者对其有深入理解,特别是在处理缓存与数据一致性问题时。在实际生产环境中,尤其是高并发、高数据访问频率的场景下,MyBatis 缓存机制能够极大地提升系统的响应速度和稳定性。\n

相关问题

🦆
什么是 MyBatis?

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

🦆
MyBatis 与 Hibernate 有何区别?

MyBatis 专注于 SQL 语句本身,不进行 SQL 生成和对象关系映射,而 Hibernate 则使用 HQL 并通过 ORM 机制自动生成 SQL。MyBatis 更适合对 SQL 有较高控制要求的场景,而 Hibernate 更适合对数据库操作进行自动化管理的场景。

🦆
MyBatis 如何实现分页查询?

MyBatis 实现分页查询可以通过 RowBounds 对象,或直接在 SQL 语句中使用 LIMIT 子句进行分页。还可以结合 PageHelper 插件,实现更加方便的分页功能。

🦆
MyBatis 中的动态 SQL 是什么?

动态 SQL 是 MyBatis 提供的一种功能,允许开发者在 XML 映射文件中使用类似于编程语言中的 if、choose、when、foreach 等标签,根据条件动态生成 SQL 语句。

🦆
MyBatis 的参数映射和结果映射是如何实现的?

参数映射通过 #{paramName} 和 ${paramName} 占位符实现,分别用于预编译参数和直接拼接参数。结果映射通过 resultMap 元素定义,指定数据库字段与实体类属性的映射关系。

🦆
如何在 MyBatis 中进行批量操作?

在 MyBatis 中进行批量操作可以使用 batchExecutor 类型的 SqlSession,或者使用 foreach 标签在 SQL 语句中批量插入、更新或删除数据。