mybatis resultmap嵌套_Java面试专题之九:Mybatis面试5个大概率被问到的问题
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个大概率被问到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 风云php,t.php · 风云酷小子/
- 下一篇: 高倍数泡沫装置PHP_泡沫灭火系统,了解