Java面試題分享 Mybatis

2021-09-24 09:21:11 字數 1613 閱讀 7673

問:在mybatis中,有兩種佔位符,區別是什麼

答:#{}解析傳遞進來的引數資料,katex parse error: expected 'eof', got '#' at position 21: …進來的引數原樣拼接在sql中,#̲{}是預編譯處理,{}是字串替換,使用#{}可以有效的防止sql注入,提高系統安全性。

問:當實體類中的屬性名和表中的欄位名不一樣怎麼辦

答:通過在查詢的sql語句中定義欄位名的別名讓欄位名的別名和實體類的屬性名一致,通過來對映欄位名和實體類屬性名的一一對應的關係。

答:使用佔位符的思想,使用map集合作為引數來裝載。

問:mybatis動態sql是做什麼的,都有哪些動態sql

答:mybatis動態sql可以讓我們在xml對映檔案內以標籤的形式編寫動態sql,完成邏輯判斷和動態拼接sql的功能,trim|where|set|foreach|if|choose|when|otherwise|bind。

問:為什麼說mybatis是半自動orm對映工具,它與全自動的區別在**

答:mybatis在查詢關聯物件或關聯集合物件時,需要手動編寫sql來完成所以稱之為半自動orm對映工具。

問:簡述dao介面問:mybatis分頁的原理是什麼

答:分頁外掛程式的基本原理是使用mybatis提供的外掛程式介面,實現自定義外掛程式在外掛程式的攔截方法內攔截待執行的sql,然後重寫sql根據dialect方言新增對應的物理分頁語句和物理分頁引數,mybatis使用jdk的動態**為需要攔截的介面生成**物件以實現介面方法攔截功能。

問:mybatis是否支援延遲載入,如果支援,它的實現原理是什麼

答:mybatis僅支援association關聯物件和collection關聯集合物件的延遲載入,可以配置是否啟用延遲載入lazyloadingenabled=true|false,它的原理是,使用cglib建立目標物件的**物件,當呼叫目標方法時,進入***方法,比如呼叫a.getb().getname(),***invoke()方法發現a.getb()是null值,那麼就會單獨傳送事先儲存好的查詢關聯b物件的sql把b查詢上來,然後呼叫a.setb(b),於是a的物件b屬性就有值了,接著完成a.getb().getname()方法的呼叫,hibernate支援延遲載入的原理都是一樣的。

問:mybatis都有哪些executor執行器,它們之間的區別是什麼

答:1)******executor:每執行一次update或select,就開啟乙個statement物件,用完立刻關閉

2)reuseexecutor:執行update或select,以sql作為key查詢statement物件,存在就使用,不存在就建立用完後不關閉statement物件就是重複使用statement物件

3)batchexecutor:執行update(沒有selectjdbc批處理不支援select)將所有sql都新增到批處理中,它快取了多個statement物件,每個statement物件都是addbatch()完畢,後等待逐一執行executebatch()批處理與jdbc批處理相同.

Java面試題分享 servlet

問 servlet的生命週期 答 當伺服器啟動的時候生命週期開始,然後通過init 方法初始化servlet,再根據不同請求呼叫doget或dopost方法,最後再通過destroy 方法進行銷毀。問 get和post的區別問 如何處理servlet的執行緒不安全問題 答 最簡單的就是不使用不去使用...

Java面試題分享 Dubbo

問 dubbo通訊協議問 dubbo的註冊中心 答 1 multicast 註冊中心 2 zookeeper 註冊中心 3 redis 註冊中心 4 註冊中心 問 dubbo的集群容錯 答 1 failover cluster 失敗自動切換,當出現失敗,重試其它伺服器 通常用於讀操作,但重試會帶來更...

面試題分享

1.css題 將下面的span標籤用css寫成有三槓的選單按鈕和叉號的關閉按鈕 看到有點懵,於是第一題我就空下了 2.在乙個固定寬高的div中讓乙個不知道寬高的左右居中,上下居中 這道題算會吧 3.隨機生成10000個不重複的八位數,然後篩選出其中的靚號 即尾號為aabb abab aaaa且不含4...