MyBatis的面试题以及详细解答
1. 介绍下 MyBatis
MyBatis 是一个半自动化的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库的交互。它通过 XML 或注解为 Java 方法配置 SQL 语句,并负责执行这些语句以及将结果映射到 Java 对象。
2. MyBatis 框架的应用场景
- 需要对 SQL 进行精细控制的应用。
- 数据库查询非常复杂,不适合使用全自动 ORM 工具的情况。
- 数据库结构经常变动,使用静态 SQL 更加灵活。
- 对性能要求较高,需要直接优化 SQL 的项目。
3. MyBatis 有哪些优点
- 灵活性:允许开发者编写自定义 SQL、存储过程和高级映射。
- 易于上手:基于 SQL 知识,容易学习和使用。
- 支持动态 SQL:可以根据参数条件动态构建 SQL 语句。
- 与数据库无关:可以轻松切换不同类型的数据库。
4. MyBatis 有哪些缺点
- 手工编写 SQL:需要手动编写 SQL 语句,增加了工作量并且可能引入错误。
- 维护成本:SQL 和代码分离,可能导致维护困难。
- 不适合小型项目:对于简单应用来说,可能会增加不必要的复杂度。
5. MyBatis 用到了哪些设计模式
- 建造者模式:用于创建复杂的不可变对象,如
SqlSessionFactory
的创建。 - 工厂模式:
SqlSession
的获取是通过SqlSessionFactory
来实现的。 - 代理模式:MyBatis 使用 JDK 动态代理来实现 Mapper 接口的功能。
- 适配器模式:用于适配不同的数据库操作。
6. MyBatis 常用注解有哪些
@Select
,@Insert
,@Update
,@Delete
:用于定义 CRUD 操作。@ResultMap
和@Results
:用于映射查询结果到实体类。@Param
:用于指定方法参数名称,以便在 SQL 中引用。@CacheNamespace
:用于定义二级缓存的命名空间。
7. MyBatis 有哪些核心组件
SqlSessionFactory
:创建SqlSession
的工厂。SqlSession
:执行持久化操作的对象。Mapper Interface
:定义了与数据库交互的方法。Configuration
:包含了 MyBatis 系统的核心设置信息。
8. MyBatis 编程步骤是什么样的
- 创建 MyBatis 配置文件 (
mybatis-config.xml
)。 - 定义映射文件 (XML 文件或注解)。
- 创建数据访问接口 (Mapper Interface)。
- 实现业务逻辑,使用
SqlSessionFactory
获取SqlSession
。 - 使用
SqlSession
执行 CRUD 操作。 - 提交事务并关闭会话。
9. MyBatis 和 JDBC 有什么区别
- SQL 管理:JDBC 要求程序员管理所有 SQL 语句,而 MyBatis 将 SQL 语句写在 XML 或注解中。
- 结果集映射:JDBC 需要手动解析结果集,MyBatis 自动映射结果到 Java 对象。
- 事务管理:MyBatis 可以更容易地集成 Spring 等框架进行事务管理。
- 连接池:MyBatis 内置了简单的连接池功能,而 JDBC 需要额外集成第三方连接池。
10. MyBatis 中的缓存机制有啥用
MyBatis 的缓存机制用于减少数据库访问次数,提高查询效率。一级缓存默认开启,作用于同一个 SqlSession
内;二级缓存则是在命名空间级别,可以在多个 SqlSession
之间共享。通过缓存,MyBatis 可以避免重复执行相同的查询,从而提升应用程序的性能。