mybatis面试题(经典10问)

1、JDBC有多少步?
JDBC可以分为六个步骤

负载驱动程序
获取数据库连接
创建语句对象
操作数据库进行增删改查
获取结果集
关闭资源

2.什么是mybatis?
如果你在面试中被问到,只需说以下三件事:

Mybatis 是一个优秀的持久层框架,支持自定义 SQL、存储过程和高级映射。

Mybatis 省去了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

Mybatis 可以通过简单的 XML 或注解将原始类型、接口和 Java POJO(plain old Java objects)配置和映射为数据库中的记录。
3.什么是ORM?
全称是对象关系映射。对象映射关系数据库。对象关系映射(ORM,或O/RM,或O/R映射)用于实现面向对象编程语言中不同类型系统之间的数据转换。简而言之,ORM就是用元数据来描述对象与数据库的映射关系,将程序中的对象与关系数据库进行映射。
ORM 提供了另一种实现持久层的方式。它使用映射元数据来描述对象关系的映射,使ORM中间件可以充当任何应用程序的业务逻辑层和数据库层之间的桥梁。
4、说说orm的优缺点
“优势” 1、提高开发效率。由于 ORM 可以自动映射数据库中实体对象和表之间的字段和属性,我们可能不需要专门的庞大的数据访问层。2. ORM提供到数据库的映射,可以直接从数据库中获取数据,就像操作对象一样,不需要SQL编码。

“缺点”牺牲程序的执行效率和固定的思维方式,降低了开发的灵活性。
从系统结构来看,使用ORM的系统一般是多层系统。如果系统层数过多,效率就会降低。ORM是一种完全面向对象的方式,面向对象的方式也会对性能产生一定的影响。

当我们开发一个系统时,我们通常会遇到性能问题。主要的性能问题是不正确的算法和不正确的数据库使用。

ORM生成的代码不太可能写出非常高效的算法,更容易在数据库应用中被误用。主要体现在持久对象的提取和数据的处理上。如果使用ORM,程序员很可能会将所有数据提取到内存对象中,然后对其进行过滤处理,容易造成性能问题。

在持久化一个对象时,ORM 一般会持久化所有的属性。有时,这是不可取的。但是,ORM 是一个工具,可以解决一些重复性和简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸地解决所有问题。有些问题仍然需要特殊处理,但对于大多数系统来说,需要特殊处理的部分应该很少。
5、说说mybaits的优缺点
优势
①基于SQL语句编程,相当灵活,不会影响现有的应用程序或数据库设计。SQL采用XML编写,将SQL与程序代码解耦,便于统一管理。提供 XML 标签以支持动态 SQL 语句的编写,并可重复使用。

②与JDBC相比,代码量减少50%以上,消除了JDBC中的大量冗余代码,无需手动切换连接;

③ 对各种数据库非常兼容(因为mybatis使用JDBC连接数据库,所以只要JDBC支持的数据库mybatis都支持)。

④ 能与弹簧很好的结合;

⑤ 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

缺点
① 编写SQL语句的工作量大,尤其是字段多、关联表多的情况下,对开发人员编写SQL语句有一定的要求。

② SQL 语句依赖于数据库,导致数据库的可移植性差,不能随意替换数据库。

Mybatis框架适用于:

(1)Mybatis专注于SQL本身,是一个足够灵活的Dao层解决方案。

(2)Mybatis对于性能要求高或者需求变化多的项目会是一个不错的选择,比如互联网项目。

6、mybatis是如何分页的?
Mybatis 使用 rowboundaries 对象进行分页。它是结果集结果集的内存分页,而不是物理分页。首先,找出所有数据,然后进行分页。

可以直接在SQL中写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

7、分页插件的基本原理是什么?
分页插件的基本原理是利用mybatis提供的插件接口实现一个自定义插件,在插件的拦截方法中拦截要执行的SQL,然后重写SQL(SQL拼接限制),根据方言添加相应的物理分页语句和物理分页参数,使用JDK动态代理技术,使用责任链设计模式。

8、mybatis插件是如何工作的?
Mybatis 只能为 parameterhandler、resultshandler、statementhandler 和 executor 这四个接口编写插件。Mybatis利用JDK的动态代理,为需要拦截的接口生成代理对象,实现拦截接口方法的功能。每当执行四个接口对象的方法时,都会进入拦截方法,具体是invocationHandler的invoke()方法,当然只有你指定拦截的方法才会被拦截。

9、如何编写插件?
编写插件:实现mybatis的拦截器接口并复制intercept()方法,然后给插件写注释,指定拦截哪个接口的哪些方法,最后在配置文件中配置你写的插件. 推荐:推荐合集,mybatis插件原理详解

10、mybatis动态SQL有什么用?
Mybatis 动态 SQL 可以将动态 SQL 以标签的形式写在 XML Mapping 文件中。执行原理是完成逻辑判断,根据表达式的值动态调整SQL的功能。

Mybatis 提供了九个动态 SQL 标签:trim | where | set | foreach | if | choose | when | otherwise | bind。

11. XML Mapping 文件中的标签是什么?
除了常见的选择| 插入 | 更新 | 删除标签,有:

<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态SQL的9个Tag,其中<sql>Tag SQL
Fragment by <include>Tag引入SQL Fragment,<selectKey>为不支持自增的主键生成策略标签。

12、mybatis是否支持延迟加载?
Mybatis 只支持关联关联对象和集合关联集合对象的延迟加载。关联是指一对一,集合是指一对多查询。在mybatis配置文件中,可以配置是否开启延迟加载lazyLoadingEnabled=true|false。

13、延迟加载的基本原理是什么?
延迟加载的基本原理是使用cglib创建目标对象的代理对象,在调用目标方法时进入拦截器方法。

比如调用a.getB().getName()拦截器invoke()方法发现a.getB()为空值,然后将保存的SQL查询分别发送给B对象的SQL,B查询起来,然后调用。a.setB(b)然后,a的对象B属性就有了值,然后是完成a.getB().getName()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0_37540251

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

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

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

打赏作者

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

抵扣说明:

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

余额充值