当前位置: 首页 > article >正文

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 编程步骤是什么样的

  1. 创建 MyBatis 配置文件 (mybatis-config.xml)。
  2. 定义映射文件 (XML 文件或注解)。
  3. 创建数据访问接口 (Mapper Interface)。
  4. 实现业务逻辑,使用 SqlSessionFactory 获取 SqlSession
  5. 使用 SqlSession 执行 CRUD 操作。
  6. 提交事务并关闭会话。

9. MyBatis 和 JDBC 有什么区别

  • SQL 管理:JDBC 要求程序员管理所有 SQL 语句,而 MyBatis 将 SQL 语句写在 XML 或注解中。
  • 结果集映射:JDBC 需要手动解析结果集,MyBatis 自动映射结果到 Java 对象。
  • 事务管理:MyBatis 可以更容易地集成 Spring 等框架进行事务管理。
  • 连接池:MyBatis 内置了简单的连接池功能,而 JDBC 需要额外集成第三方连接池。

10. MyBatis 中的缓存机制有啥用

MyBatis 的缓存机制用于减少数据库访问次数,提高查询效率。一级缓存默认开启,作用于同一个 SqlSession 内;二级缓存则是在命名空间级别,可以在多个 SqlSession 之间共享。通过缓存,MyBatis 可以避免重复执行相同的查询,从而提升应用程序的性能。


http://www.kler.cn/a/442276.html

相关文章:

  • VSCode 的部署
  • 网络安全面试题汇总(个人经验)
  • Axios封装一款前端项目网络请求实用插件
  • 软件设计大致步骤
  • MTK6768 Android13 亮度条均匀调节实现
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • Java学习教程,从入门到精通,Java ConcurrentHashMap语法知识点及案例代码(63)
  • 探秘 JSON:数据交互的轻盈使者
  • 学技术学英文:代码中的锁:悲观锁和乐观锁
  • docker 安装 mongo 命令
  • 使用DPO技术对大模型Qwen2.5进行微调
  • YOLOv9-0.1部分代码阅读笔记-augmentations.py
  • List接口
  • HTML5 MathML
  • 【mysql】如何解决主从架构从库延迟问题
  • MybatisPlus介绍与应用
  • 泷羽sec学习打卡-brupsuite8伪造IP和爬虫审计
  • CTF_1
  • STM32-笔记4-按键点亮led
  • Jsckson @JsonValue 注解
  • springcloud打成jar包运行在centos7
  • 使用html2canvas库对可滚动的dom节点导出全量的图片
  • 【机器人】Graspness 端到端 抓取点估计 | 论文解读
  • Linux 磁盘空间不足之排查方法(Troubleshooting Method for Linux Disk Space Shortage)
  • 上传图片的预览
  • 【从零开始入门unity游戏开发之——C#篇16】C#什么是面向对象编程?