MyBatis的高频面试题

MyBatis的高频面试题

1. MyBatis是什么?

  • MyBatis是一款优秀的持久层框架,一个半ORM(对象关系映射)框架。它内部封装了JDBC,开发时只需要关注SQL语句本身,我们可以直接编写原生态sql,严格控制sql执行性能,灵活度高。
  • MyBatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集等操作。

2. ORM是什么?

  • ORM的全称是Object Relational Mapping,对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。

3. MyBatis与Hibernate做比较

  • 相同点:

都是对jdbc的封装,都是持久层的框架,都用于dao层的开发。

  • 不同点:
  1. 映射关系
  • MyBatis是一个半自动映射的框架,配置Java对象与sql语句执行结果的对应关系,多表关联关系配置简单
  • Hibernate是一个全表映射的框架,配置Java对象与数据库表的对应关系,多表关联关系配置复杂
  1. SQL优化和移植性
  • Hibernate对SQL语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性, 此外还提供 HQL(Hibernate Query Language)操作数据库,数据库无关性支持好,但会多消耗性能。代码开发量少,但SQL语句优化困难
  • MyBatis需要手动编写SQL,支持动态SQL、处理列表、动态生成表名、支持存储过程,直接使用SQL语句操作数据库,不支持数据库无关性。 代码开发量相对大些,但sql语句优化容易。
  1. 开发难易程度和学习成本
  • Hibernate是重量级框架,学习使用门槛高,适合于需求相对稳定、中小型的项目,比如:办公自动化系统

  • MyBatis是轻量级框架,学习使用门槛低,适合于需求变化频繁、大型的项目,比如:互联网电子商务系统

  • 总结

  • MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,

  • Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

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

  • #{} 是预编译处理,${} 是字符串替换
  • Mybatis在处理 #{} 时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
  • Mybatis在处理 时,就是把 {} 时,就是把 时,就是把{}替换成变量的值。
  • 使用#{}可以有效的防止SQL注入,提高系统安全性

5. Mybatis是如何进行分页的?分页插件的原理是什么

  • Mybatis使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
  • 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

6. MyBatis实现一对一有几种方式?具体怎么操作的?

  • 联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成
  • 嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置

7. Mybatis的一级、二级缓存

在我的另一篇文章中,对MyBatis的缓存机制有详细的介绍
面试题之MyBatis缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daylan Du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值