91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Mybatis的面試題有哪些

發布時間:2021-07-21 15:02:57 來源:億速云 閱讀:188 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Java中Mybatis的面試題有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1. MyBatis 中 #{}和 ${}的區別是什么?

#{}是預編譯處理,${}是字符替換。 在使用 #{}時,MyBatis 會將 SQL 中的 #{}替換成“?”, 配合 PreparedStatement 的 set 方法賦值,這樣可以有效的防止 SQL 注入,保證程序的運行安全。

2. MyBatis 有幾種分頁方式?

邏輯分頁: 使用 MyBatis 自帶的 RowBounds 進行分頁,它是一次性查詢很多數據,然后在數據中再進行檢索。

物理分頁: 自己手寫 SQL 分頁或使用分頁插件 PageHelper,去數據庫查詢指定條數的分頁數據的形式。

3. MyBatis 邏輯分頁和物理分頁的區別是什么?

邏輯分頁是一次性查詢很多數據,然后再在結果中檢索分頁的數據。這樣做弊端是需要消耗大量的內存、有內存溢出的風險、對數據庫壓力較大。

物理分頁是從數據庫查詢指定條數的數據,彌補了一次性全部查出的所有數據的種種缺點,比如需要大量的內存,對數據庫查詢壓力較大等問題。

4. MyBatis 是否支持延遲加載?延遲加載的原理是什么?

MyBatis 支持延遲加載,設置 lazyLoadingEnabled=true 即可。 延遲加載的原理的是調用的時候觸發加載,而不是在初始化的時候就加載信息。 比如調用 a. getB(). getName(),這個時候發現 a. getB() 的值為 null,此時會單獨觸發事先保存好的關聯 B 對象的 SQL, 先查詢出來 B,然后再調用 a. setB(b),而這時候再調用 a. getB(). getName() 就有值了,這就是延遲加載的基本原理

5. 說一下 MyBatis 的一級緩存和二級緩存?

一級緩存:基于 PerpetualCache 的 HashMap 本地緩存,它的聲明周期是和 SQLSession 一致的,有多個 SQLSession 或者分布式的環境中數據庫操作,可能會出現臟數據。當 Session flush 或 close 之后,該 Session 中的所有 Cache 就將清空,默認一級緩存是開啟的。

二級緩存:也是基于 PerpetualCache 的 HashMap 本地緩存,不同在于其存儲作用域為 Mapper 級別的,如果多個SQLSession之間需要共享緩存,則需要使用到二級緩存,并且二級緩存可自定義存儲源,如 Ehcache。默認不打開二級緩存,要開啟二級緩存,使用二級緩存屬性類需要實現 Serializable 序列化接口(可用來保存對象的狀態)。 開啟二級緩存數據查詢流程:二級緩存 -> 一級緩存 -> 數據庫。 緩存更新機制:當某一個作用域(一級緩存 Session/二級緩存 Mapper)進行了C/U/D 操作后,默認該作用域下所有 select 中的緩存將被 clear。

6. MyBatis 有哪些執行器(Executor)?

MyBatis 有三種基本的Executor執行器:

  • SimpleExecutor:每執行一次 update 或 select 就開啟一個 Statement 對象,用完立刻關閉 Statement 對象;

  • ReuseExecutor:執行 update 或 select,以 SQL 作為 key 查找 Statement 對象,存在就使用,不存在就創建,用完后不關閉 Statement 對象,而是放置于 Map 內供下一次使用。簡言之,就是重復使用 Statement 對象;

  • BatchExecutor:執行 update(沒有 select,jdbc 批處理不支持 select),將所有 SQL 都添加到批處理中(addBatch()),等待統一執行(executeBatch()),它緩存了多個 Statement 對象,每個 Statement 對象都是 addBatch()完畢后,等待逐一執行 executeBatch()批處理,與 jdbc 批處理相同

7. MyBatis 分頁插件的實現原理是什么?

分頁插件的基本原理是使用 MyBatis 提供的插件接口,實現自定義插件,在插件的攔截方法內攔截待執行的 SQL,然后重寫 SQL,根據 dialect 方言,添加對應的物理分頁語句和物理分頁參數。

8. MyBatis如何返回主鍵?

核心在于 useGeneratedKeys和keyProperty屬性

<mapper namespace="org.chench.test.mybatis.mapper">
    <!-- 插入數據:返回記錄主鍵id值 -->
    <insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" >
        insert into test(name,descr,url,create_time,update_time) 
        values(#{name},#{descr},#{url},now(),now())
    </insert>
</mapper>

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

還有很多其他的標簽例如 sql|cach等...,加上動態sql的9個標簽,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中為sql片段標簽,通過標簽引入sql片段,為不支持自增的主鍵生成策略標簽。

10. MyBatis 和 Hibernate 的區別有哪些?

  • 靈活性:MyBatis 更加靈活,自己可以寫 SQL 語句,使用起來比較方便。

  • 可移植性:MyBatis 有很多自己寫的 SQL,因為每個數據庫的 SQL 可以不相同,所以可移植性比較差。

  • 學習和使用門檻:MyBatis 入門比較簡單,使用門檻也更低。

  • 二級緩存:hibernate 擁有更好的二級緩存,它的二級緩存可以自行更換為第三方的二級緩存。

感謝各位的閱讀!關于“Java中Mybatis的面試題有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 罗定市| 湖南省| 旺苍县| 文山县| 札达县| 昌图县| 铁岭市| 澎湖县| 永仁县| 婺源县| 嘉定区| 云林县| 华池县| 金溪县| 石嘴山市| 东平县| 辽宁省| 沐川县| 宁波市| 泾阳县| 威宁| 万荣县| 漯河市| 永德县| 临沧市| 永川市| 邵东县| 灵宝市| 武夷山市| 砚山县| 五华县| 廉江市| 莲花县| 铁岭市| 龙里县| 剑阁县| 黑河市| 平凉市| 福安市| 和田市|