2023 Java 面试题之MyBatis篇

MyBatis 面试题:1. MyBatis 是什么?MyBatis 是一个半 ORM(对象关系映射)框架,简化了 JDBC 编程,通过 SQL 语句配置和映射映射关系,提供灵活的 SQL 执行能力。2. MyBatis 的优点有哪些?优点包括:简化 SQL 编写,减少冗余代码,支持动态 SQL,提供强大的数据库兼容性,易于与 Spring 集成,...
2023 Java 面试题之MyBatis篇
MyBatis 面试题:

1. MyBatis 是什么?

MyBatis 是一个半 ORM(对象关系映射)框架,简化了 JDBC 编程,通过 SQL 语句配置和映射映射关系,提供灵活的 SQL 执行能力。

2. MyBatis 的优点有哪些?

优点包括:简化 SQL 编写,减少冗余代码,支持动态 SQL,提供强大的数据库兼容性,易于与 Spring 集成,提供 ORM 映射与对象关系维护。

3. MyBatis 的缺点是什么?

缺点主要在于 SQL 编写工作量较大,且数据库移植性差。

4. MyBatis 适用场景有哪些?

适用于性能要求高、需求变化频繁、关系数据模型不复杂的项目。

5. MyBatis 与 Hibernate 的不同点是什么?

MyBatis 需要开发者自行编写 SQL,灵活性高,但不支持数据库无关性;Hibernate 提供了强大的对象关系映射能力,兼容性好,适用于关系模型要求高的软件。

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

#{} 在 MyBatis 中用于防止 SQL 注入,自动转义 SQL 字符;${} 直接插入变量值,易引发 SQL 注入。

7. 实体类属性与数据库字段名不一致怎么办?

通过字段别名或配置实体类属性与字段映射关系解决。

8. 模糊查询如何编写?

在 SQL 语句中使用 LIKE 通配符,注意防止 SQL 注入。

9. Dao 接口的工作原理是什么?

Mapper 接口通过接口名和方法名关联对应的 MyBatis 配置,使用 JDK 动态代理生成代理对象,执行 SQL 并返回结果。

10. 如何进行分页?分页插件原理?

MyBatis 通过 RowBounds 进行内存分页,物理分页需要自定义插件实现。

11. 如何将 SQL 结果封装为目标对象?

使用标签定义映射关系,或配置列别名,MyBatis 通过反射创建对象并赋值。

12. 如何实现批量插入?

编写简单 INSERT SQL,使用 Java 代码执行批处理。

13. 如何获取自动生成的主键值?

使用 auto_increment 策略,插入操作返回影响行数,设置到参数对象。

14. 如何传递多个参数?

通过 #{n}、注解 @Param 或 Map 传递多个参数。

15. 动态 SQL 的作用和执行原理?有哪些动态 SQL 标签?

动态 SQL 根据表达式动态生成 SQL,原理是根据条件拼接 SQL,提供的标签包括 trim、where、set、foreach 等。

16. Xml 映射文件中除了常见标签外,还有哪些?

还有 insert、update、delete 等,加上动态 SQL 标签,如 if、choose、when 等。

17. 不同 Xml 映射文件中 id 是否可以重复?

如果配置了 namespace,则 id 可以重复;否则,不能重复。

18. 为什么 MyBatis 是半自动 ORM 映射工具?

MyBatis 需要开发者编写 SQL,提供 SQL 执行能力,但不完全自动化。

19. 如何进行一对一、一对多关联查询?

通过 association 和 collection 标签配置关联关系,进行联合查询或嵌套查询。

20. MyBatis 实现一对一、一对多有几种方式?

有联合查询和嵌套查询两种方式,分别适用于一对一和一对多查询。

21. MyBatis 是否支持延迟加载?实现原理是什么?

支持 association 和 collection 的延迟加载,原理是使用 CGLIB 创建代理对象,当调用对象方法时动态生成 SQL 查询关联数据。

22. MyBatis 的一级、二级缓存机制?

一级缓存基于 Session 实现,存储作用域为 Session,二级缓存基于 Namespace 实现,存储作用域为 Namespace,可自定义缓存存储源。

23. 什么是接口绑定?有哪几种实现方式?

接口绑定是任意定义接口与 SQL 语句绑定,实现灵活选择,实现方式包括注解绑定和 XML 绑定。

24. 使用 MyBatis 的 mapper 接口调用时有哪些要求?

接口方法名、参数类型、返回类型需与 SQL 映射文件对应,namespace 为接口全路径名。

25. Mapper 编写有哪几种方式?

包括 SqlSessionDaoSupport 实现类、MapperFactoryBean、扫描器实现等。

26. MyBatis 的插件运行原理及编写插件的方法是什么?

MyBatis 通过动态代理生成代理对象,拦截接口方法执行,编写插件实现特定功能,通过实现 Interceptor 接口并配置注解指定拦截。

27. MyBatis 的分页插件运行原理及编写插件的步骤是什么?

分页插件通过动态 SQL 或自定义接口实现物理分页,编写插件需实现 Interceptor 接口,配置插件并指定拦截的接口和方法。2024-09-28
mengvlog 阅读 10 次 更新于 2025-06-20 00:32:54 我来答关注问题0
檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部