本篇文章整理了2021年MyBatis面试中常见的问题及答案,帮助您更好地准备面试。

1. 什么是MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通 Java 对象)为数据库中的记录。

2. MyBatis 的优点有哪些?

  • 简单易学: MyBatis 相对简单,学习成本低,容易上手。
  • 灵活强大: MyBatis 提供了强大的映射机制,支持自定义 SQL 和存储过程,能够满足各种复杂的数据库操作需求。
  • 性能优异: MyBatis 在处理大量数据时表现出色,能够有效提高数据库访问性能。
  • 解耦性好: MyBatis 将 SQL 语句与 Java 代码分离,提高了代码的可维护性和可读性。

3. MyBatis 中的 #{} 和 ${} 有什么区别?

  • #{} 是预编译参数,MyBatis 会将其替换为占位符,然后将预编译后的 SQL 语句发送给数据库执行,能够有效防止 SQL 注入攻击。
  • ${} 是字符串替换,MyBatis 会将 ${} 中的内容直接替换到 SQL 语句中,存在 SQL 注入的风险,一般用于传递数据库对象名等场景。

4. MyBatis 如何实现一对一、一对多、多对多关系映射?

MyBatis 提供了多种方式实现对象关系映射:

  • 一对一: 可以使用 resultMapassociation 标签或者 resultTypeassociation 标签进行映射。
  • 一对多: 可以使用 resultMapcollection 标签或者 resultTypecollection 标签进行映射。
  • 多对多: 通常需要借助中间表来实现,可以使用 resultMapcollection 标签嵌套 association 标签或者 association 标签嵌套 collection 标签进行映射。

5. MyBatis 的缓存机制了解吗?

MyBatis 提供了一级缓存和二级缓存两种机制:

  • 一级缓存: 是指 SqlSession 级别的缓存,默认开启。 同一个 SqlSession 对同一个 SQL 语句的多次查询,只会查询一次数据库,后续查询会从缓存中获取。
  • 二级缓存: 是指 Mapper 级别的缓存,需要手动开启。 不同的 SqlSession 对同一个 SQL 语句的查询,如果开启了二级缓存,会先从二级缓存中获取数据。

6. MyBatis 的动态 SQL 如何实现?

MyBatis 使用 XML 中的动态 SQL 元素来实现动态 SQL,常用的动态 SQL 元素有:

  • : 用于根据条件判断是否执行 SQL 语句片段。
  • : 用于实现多条件选择执行不同的 SQL 语句片段。
  • : 用于遍历集合,动态生成 SQL 语句片段。
  • : 用于动态更新语句中需要更新的字段。
  • : 用于去除 SQL 语句中多余的关键字或符号。

7. MyBatis 如何处理事务?

MyBatis 默认情况下不提交事务,需要手动提交或者配置自动提交。MyBatis 支持两种事务管理方式:

  • JDBC 事务: 使用 JDBC 的 Connection 对象管理事务。
  • 托管事务: 将事务管理委托给 Spring 等容器框架进行管理。

8. MyBatis 与 Hibernate 的区别有哪些?

| 特性 | MyBatis | Hibernate |

| -------- | ------------------------------- | -------------------------------- |

| 学习曲线 | 较低 | 较高 |

| 控制力度 | 对 SQL 语句有完全的控制权 | 对 SQL 语句的控制权较低 |

| 缓存机制 | 两级缓存 | 一级缓存、二级缓存、查询缓存 |

| 复杂查询 | 需要手动编写 SQL 语句 | 支持 HQL 查询 |

| 对象关系 | 更侧重于 SQL 映射 | 更侧重于对象关系映射 |

9. MyBatis Plus 了解吗?

MyBatis-Plus (简称 MP) 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatis-Plus 的优点:

  • 强大的 CRUD 操作: 内置通用 Mapper,提供丰富的 CRUD 操作方法,无需编写 XML 文件。
  • 代码生成器: 提供代码生成器,可以快速生成实体类、Mapper 接口、XML 文件。
  • 分页插件: 提供分页插件,简化分页查询操作。
  • 性能分析插件: 提供性能分析插件,可以分析 SQL 语句执行效率。

10. MyBatis 如何进行分页?

MyBatis 可以通过以下两种方式进行分页:

  • 逻辑分页: 先查询所有数据,然后在内存中进行分页,适用于数据量较小的情况。
  • 物理分页: 使用数据库提供的分页机制,只查询指定页码的数据,适用于数据量较大的情况。 MyBatis 可以使用插件或者手动编写 SQL 语句实现物理分页。

总结

介绍了 2021 年 MyBatis 面试中常见的十个问题及答案,涵盖了 MyBatis 的基础知识、核心概念、高级特性等方面,希望能够帮助您更好地准备面试。