1、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。

而 Mybatis在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。

2、 一对一、一对多的关联查询 ?

resultMap="ClassesResultMap">

select * from class c,teacher t where c.teacher_id=t.t_id and

c.c_id=#{id}

javaType="com.lcb.user.Teacher">

resultMap="ClassesResultMap2">

select * from class c,teacher t,student s where c.teacher_id=t.t_id

and c.c_id=s.class_id and c.c_id=#{id}

javaType="com.lcb.user.Teacher">

ofType="com.lcb.user.Student">

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

有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在

resultMap 里面配置 association 节点配置一对一的类就可以完成;

嵌套查询是先查一个表,根据这个表里面的结果的 外键 id,去再另外一个表里面查询数据,也是通过 association 配置,但另外一个表的查询通过 select 属性配置。

4、MyBatis 实现一对多有几种方式,怎么操作的?

有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在

resultMap 里面的 collection 节点配置一对多的类就可以完成;嵌套查询是先查一个表,根据这个表里面的 结果的外键 id,去再另外一个表里面查询数据,也是通过配置 collection,但另外一个表的查询通过 select 节点配置。

5、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加

载,association 指的就是一对一,collection 指的就是一对多查询。

在 Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false。

它的原理是,使用 CGLIB 创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用 a.getB().getName(),拦截器 invoke()方法发现 a.getB()是null 值,那么就会单独发送事先保存好的查询关联 B 对象的 sql,把 B 查询上来,然后调用 a.setB(b),于是 a 的对象 b 属性就有值了,接着完成 a.getB().getName()方法的调用,这就是延迟加载的基本原理。

当然了,不光是 Mybatis,几乎所有的包括 Hibernate,支持延迟加载的原理都是一样的。

我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。

mybatis resultmap嵌套_Java面试专题之九:Mybatis面试5个大概率被问到的问题相关推荐

  1. mybatis嵌套查询和嵌套结果有什么区别_Java面试专题之九:Mybatis面试5个大概率被问到的问题...

    1.为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里? Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据 ...

  2. Mybatis resultMap 嵌套集合

    resultMap 是 Mybatis 最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap 包含的元素: <!--column不做限制,可 ...

  3. mybatis jar包_Java修行第039天---Mybatis框架

    1.掌握框架的概念 (1)框架是什么 a)框架直白来说就是偷懒的程序员将代码进行封装,之后重复使用的过程 b)框架属于半成品 c)在使用框架时,需要告诉框架需要的信息.通常以配置文件的方式告知,一般来 ...

  4. 面试专题-电商项目面试篇

    找工作面试的过程中,项目将会是整个流程的核心灵魂,也是能在面试中能让面试官尽快认同你的一个强有力的依据,所以在面试中把电商项目清晰的表述出来是极为关键的. 1.说说你最近做的这个项目的背景,简单的介绍 ...

  5. Java架构师面试题系列之Mybatis面试专题(36题,含详细答案解析)

    [Java架构师面试网]收集整理了一些Java面试的常见问题,这些问题可能会在你下一次技术面试中遇到.想成为Java架构师,这些都是不可避免也是必须要掌握的哦,对于其他模块的面试题,我后续也将单独分享 ...

  6. 无门无派 程序员整理的32个MyBatis面试专题。(都是干货)

    1.什么是 MyBatis? 答:MyBatis 是一个可以自定义 SQL.存储过程和高级映射的持久层框架. 2.讲下 MyBatis 的缓存 答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓 ...

  7. Java 后端开发面试总结:25 个技术专题(最全面试攻略)

    另送福利: java 面试准备 准确的说这里又分为两部分: 1.Java 刷题 2.算法刷题 Java 刷题:此份文档详细记录了千道面试题与详解:  !     私信我回复[03]即可免费获取 很多人 ...

  8. BAT Android面试专题深入探究:四大组件+ViewPager+组件化架构+Bitmap

    本篇是结合我之前面试别人的经验,以及跟一些在BAT上班的朋友,讨论总结出的一份很深的大公司需要用到的一些高端Android技术.这里也专门整理了一个文档,重点和难点都有详细解析.这些题目有点技术含量, ...

  9. mybatis resultMap映射学习笔记

    这几天,百度mybatis突然看不到官网了,不知道百度怎么整的.特此贴出mybatis中文官网: http://www.mybatis.org/mybatis-3/zh/index.html 一个学习 ...

最新文章

  1. Verilog初级教程(7)Verilog模块例化以及悬空端口的处理
  2. 删除文件夹下所有的文件_Mac 删除文件/文件夹方法和快捷键
  3. 1:Hello world
  4. 使用apache的HttpGet\HttpPost获取返回内容编码问题
  5. java 面向对象个人理解
  6. wordpress 自定义字段
  7. nagios mysql入库_使用NDOUtils将Nagios监控信息存入Mysql
  8. 【paper and code】AC-GAN
  9. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(二)
  10. StackExchange.Redis 使用LuaScript脚本模糊查询hash
  11. mysql unix_timestamp()获取日期的时间戳 from_unixtime时间戳转日期
  12. 华为设备链路聚合配置命令
  13. 河南大学计算机网络考试试卷,计算机网络试卷.doc
  14. 高通骁龙200、400、600、800处理器规格分享
  15. 谷歌项目经理都是怎么玩OKR的?我只告诉你
  16. html 在线播放器,实现简易html视频播放器的方法
  17. tftpd32服务器软件在Windows与linux 下的文件传输
  18. linux 卸载dnw命令,《转载》linux下利用dnw烧写文件,dnw安装与配置
  19. 谈谈对陀螺仪和加速度传感器的感性认识
  20. DevOps自动化测试的原则和实践

热门文章

  1. mysql一对多分类_mysql一对多结果归类
  2. 20211119 Latex中参考文献中的人名怪字母如何输入
  3. 20210927 LQR
  4. ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat
  5. Appium定位方式总结
  6. 洛谷 2820 局域网
  7. Android NDK的生命周期JNI_OnLoad与JNI_OnUnload(转)
  8. sql批量修改字段内容的语句-SQL技巧
  9. 学破解 一 PE格式之MS-DOS MZ header
  10. [导入]人的一生能有几天?