请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 47|回复: 0

mybatis面试题2

[复制链接]

40

主题

40

帖子

291

积分

中级会员

Rank: 3Rank: 3

积分
291
发表于 2023-3-16 20:17:52 | 显示全部楼层 |阅读模式
Mybatis是否支持延迟加载?如果支持,它的实现原理是什
么?
1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指
的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用
延迟加载lazyLoadingEnabled=true|false。
2)它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方
法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独
发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b
属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。

MyBatis的好处是什么?
1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护
带来了很大便利。
2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,大
大简化了Java数据库编程的重复工作。
3)因为MyBatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控
制sql语句,因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查
询。

简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的
映射关系?
Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Con内部。在Xml映射文
件中,标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对
象。标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。 以下
标签:
<select>、<insert>、<update>、<delete>
均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

什么是MyBatis的接口绑定,有什么好处?
接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调
用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.

接口绑定有几种实现方式,分别是怎么实现的?
接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上@Select@Update
等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定
xml映射文件里面的namespace必须为接口的全路径名.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-3-24 18:00 , Processed in 0.038638 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表