MyBatis面试题 37道

MyBatis 简介
1. MyBatis 是什么?
Mybatis 是一个半 ORM (对象关系映射)框架,它内部封装了 JDBC ,开发时只需要关注 SQL
句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直
接编写原生态 sql ,可以严格控制 sql 执行性能,灵活度高。
MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了
几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
2. Mybatis 优缺点
优点
与传统的数据库访问技术相比, ORM 有以下优点:
基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响, SQL 写在
XML 里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML 标签,支持编写动态 SQL 语句,并
可重用
JDBC 相比,减少了 50% 以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接
很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据库
MyBatis 都支持)
提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象关系
组件维护
能够与 Spring 很好的集成
缺点
SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定
要求 SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
3. Hibernate MyBatis 的区别
相同点
都是对 jdbc 的封装,都是持久层的框架,都用于 dao 层的开发。
不同点
映射关系
MyBatis 是一个半自动映射的框架,配置 Java 对象与 sql 语句执行结果的对应关系,多表关联
关系配置简单
Hibernate 是一个全表映射的框架,配置 Java 对象与数据库表的对应关系,多表关联关系配
置复杂
SQL 优化和移植性
Hibernate SQL 语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提
HQL Hibernate Query Language )操作数据库,数据库无关性支持好,但会多消耗性能。如
果项目需要支持多种数据库,代码开发量少,但 SQL 语句优化困难。
MyBatis 需要手动编写 SQL ,支持动态 SQL 、处理列表、动态生成表名、支持存储过程。开发工
作量相对大些。直接使用 SQL 语句操作数据库,不支持数据库无关性,但 sql 语句优化容易。
ORM 是什么
ORM Object Relational Mapping ),对象关系映射,是一种为了解决关系型数据库数据与简单
Java 对象( POJO )的映射关系的技术。简单的说, ORM 是通过使用描述对象和数据库之间映射的
元数据,将程序中的对象自动持久化到关系型数据库中。
4. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在
哪里?
Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根
据对象关系模型直接获取,所以它是全自动的。
Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动
ORM 映射工具。
5. 传统 JDBC 开发存在什么问题?
频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这
个问题。但是使用 jdbc 需要自己实现连接池。
sql 语句定义、参数设置、结果集处理存在硬编码。实际项目中 sql 语句变化的可能性较大,一旦发
生变化,需要修改 java 代码,系统需要重新编译,重新发布。不好维护。
使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可
能多也可能少,修改 sql 还要修改代码,系统不易维护。
结果集处理存在重复代码,处理麻烦。如果可以映射成 Java 对象会比较方便。
6. JDBC 编程有哪些不足之处, MyBatis 是如何解决的? 1 、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解
决此问题。
解决:在 mybatis-confifig.xml 中配置数据链接池,使用连接池管理数据库连接。
2 Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java
码。 -
解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
3 、向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参
数一一对应。
解决: Mybatis 自动将 java 对象映射至 sql 语句。
4 、对结果集解析麻烦, sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装
pojo 对象解析比较方便。
解决: Mybatis 自动将 sql 执行结果映射至 java 对象。
7. MyBatis Hibernate 的适用场景 ?
MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
对性能的要求很高,或者需求变化较多的项目,如互联网项目, MyBatis 将是不错的选择。
开发难易程度和学习成本
Hibernate 是重量级框架,学习使用门槛高,适合于需求相对稳定,中小型的项目,比如:办公自
动化系统
MyBatis 是轻量级框架,学习使用门槛低,适合于需求变化频繁,大型的项目,比如:互联网电子
商务系统
总结
MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,
Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。
MyBatis 的架构
8. MyBatis 编程步骤是什么样的?
1 、 创建 SqlSessionFactory
2 、 通过 SqlSessionFactory 创建 SqlSession
3 、 通过 sqlsession 执行数据库操作
4 、 调用 session.commit() 提交事务
5 、 调用 session.close() 关闭会话
9. 请说说 MyBatis 的工作原理
在学习 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便于理解程序。 MyBatis 的工作
原理如下图 1. 读取 MyBatis 配置文件: mybatis-confifig.xml MyBatis 的全局配置文件,配置了 MyBatis 的运
行环境等信息,例如数据库连接信息。
2. 加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在
MyBatis 配置文件 mybatis-confifig.xml 中加载。 mybatis-confifig.xml 文件可以加载多个映射文
件,每个文件对应数据库中的一张表。
3. 构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory
4. 创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。
5. Executor 执行器: MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession
传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
6. MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值