Mybatis框架常見面試題

參考博客:Mybatis常見面試題

對於簡單語句來說,使用註解代碼會更加清晰,然而Java註解對於複雜語句來說就會混亂,應該限制使用。因此,如果你不得不做複雜的事情,那麼最好使用XML來映射語句。

持久是相對於瞬時來說的,其實就是可以把數據固化在硬盤或者磁帶一類可以保存很長時間的設備上,不像放在內存中一樣斷電就消失了。企業應用中數據很重要(各種訂單數據、客戶數據、庫存數據之類的),比應用程序本身更重要,所以需要把數據持久化。持久化可以通過很多方式,寫文件和數據庫都可以。只是現在企業一般都會選擇把數據持久化到數據庫中,因爲可以很方便的查詢統計分析,但數據庫的數據最終還是會寫到磁盤上的。

1. #、$區別

參考博客:#、$區別

答:${}是Properties文件中的變量佔位符,它可以用於標籤屬性值和sql內部,屬於靜態文本替換,比如${driver}會被靜態替換爲com.mysql.jdbc.Driver。#{}是sql的參數佔位符,Mybatis會將sql中的#{}替換爲?號,在sql執行前會使用PreparedStatement的參數設置方法,按序給sql的?號佔位符設置參數值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式爲使用反射從參數對象中獲取item對象的name屬性值,相當於param.getItem().getName()。

2. Xml映射文件中,除了常見的select|insert|updae|delete標籤之外,還有哪些標籤?

答:還有很多其他的標籤:

<resultMap>
<parameterMap>
<sql>
<include>
<selectKey>

加上動態sql的9個標籤:

trim|where|set|foreach|if|choose|when|otherwise|bind

其中爲sql片段標籤,通過標籤引入sql片段,爲不支持自增的主鍵生成策略標籤。

3. 一級、二級緩存

1)一級緩存: 基於 PerpetualCache 的 HashMap 本地緩存,其存儲作用域爲 Session,當 Session flush 或 close 之後,該 Session 中的所有 Cache 就將清空。

2)二級緩存與一級緩存其機制相同,默認也是採用 PerpetualCache,HashMap 存儲,不同在於其存儲作用域爲 Mapper(Namespace),並且可自定義存儲源,如 Ehcache。要開啓二級緩存,你需要在你的 SQL 映射文件中添加一行:

<cache/>

3)對於緩存數據更新機制,當某一個作用域(一級緩存 Session/二級緩存Namespaces)的進行了C/U/D 操作後,默認該作用域下所有 select 中的緩存將被 clear。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章