最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java經典面試題匯總:Mybatis

 更新時間:2021年07月21日 11:16:01   作者:讓程序飛  
本篇總結的是Mybatis框架相關的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝

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

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

2. MyBatis 有幾種分頁方式?

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

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

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

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

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

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

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

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

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

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

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

MyBatis 有三種基本的Executor執(zhí)行器:

  • SimpleExecutor:每執(zhí)行一次 update 或 select 就開啟一個 Statement 對象,用完立刻關閉 Statement 對象;
  • ReuseExecutor:執(zhí)行 update 或 select,以 SQL 作為 key 查找 Statement 對象,存在就使用,不存在就創(chuàng)建,用完后不關閉 Statement 對象,而是放置于 Map 內供下一次使用。簡言之,就是重復使用 Statement 對象;
  • BatchExecutor:執(zhí)行 update(沒有 select,jdbc 批處理不支持 select),將所有 SQL 都添加到批處理中(addBatch()),等待統(tǒng)一執(zhí)行(executeBatch()),它緩存了多個 Statement 對象,每個 Statement 對象都是 addBatch()完畢后,等待逐一執(zhí)行 executeBatch()批處理,與 jdbc 批處理相同

7. MyBatis 分頁插件的實現(xiàn)原理是什么?

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

8. MyBatis如何返回主鍵?

核心在于 useGeneratedKeys和keyProperty屬性

<mapper namespace="org.chench.test.mybatis.mapper">
    <!-- 插入數(shù)據(jù):返回記錄主鍵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等...,加上動態(tài)sql的9個標簽,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中為sql片段標簽,通過標簽引入sql片段,為不支持自增的主鍵生成策略標簽。

10. MyBatis 和 Hibernate 的區(qū)別有哪些?

  • 靈活性:MyBatis 更加靈活,自己可以寫 SQL 語句,使用起來比較方便。
  • 可移植性:MyBatis 有很多自己寫的 SQL,因為每個數(shù)據(jù)庫的 SQL 可以不相同,所以可移植性比較差。
  • 學習和使用門檻:MyBatis 入門比較簡單,使用門檻也更低。
  • 二級緩存:hibernate 擁有更好的二級緩存,它的二級緩存可以自行更換為第三方的二級緩存。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望你能給多多關注腳本之家的更多內容!

相關文章

  • Maven項目分析剔除無用jar引用的方法步驟

    Maven項目分析剔除無用jar引用的方法步驟

    這篇文章主要介紹了Maven項目分析剔除無用jar引用的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Java使用FastExcel實現(xiàn)合并單元格

    Java使用FastExcel實現(xiàn)合并單元格

    FastExcel 是一個采用純 java 開發(fā)的 excel 文件讀寫組件,支持 Excel'97(-2003)(BIFF8)文件格式,本文主要介紹了如何使用FastExcel實現(xiàn)合并單元格,需要的可以參考下
    2024-12-12
  • java線程間通訊的一些方法總結

    java線程間通訊的一些方法總結

    這篇文章主要介紹了java線程間通訊的一些方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Java實現(xiàn)訂單超時未支付自動取消的8種方法總結

    Java實現(xiàn)訂單超時未支付自動取消的8種方法總結

    這篇文章主要為大家介紹了Java實現(xiàn)訂單超時未支付自動取消功能的8種不同方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-08-08
  • 如何對jdk版本升級或降級

    如何對jdk版本升級或降級

    這篇文章主要介紹了如何對jdk版本升級或降級方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關于Java利用反射實現(xiàn)動態(tài)運行一行或多行代碼

    關于Java利用反射實現(xiàn)動態(tài)運行一行或多行代碼

    這篇文章主要介紹了關于Java利用反射實現(xiàn)動態(tài)運行一行或多行代碼,借鑒了別人的方法和書上的內容,最后將題目完成了,和大家一起分享以下解決方法,需要的朋友可以參考下
    2023-04-04
  • Java數(shù)據(jù)結構及算法實例:選擇排序 Selection Sort

    Java數(shù)據(jù)結構及算法實例:選擇排序 Selection Sort

    這篇文章主要介紹了Java數(shù)據(jù)結構及算法實例:選擇排序 Selection Sort,本文直接給出實現(xiàn)代碼,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-06-06
  • Spring?Boot在開發(fā)過程中常用IDEA插件

    Spring?Boot在開發(fā)過程中常用IDEA插件

    這篇文章主要為大家介紹了Spring?Boot在開發(fā)過程中常用IDEA插件,幫助大家提高開發(fā)工作效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • springboot項目啟動慢的問題排查方式

    springboot項目啟動慢的問題排查方式

    這篇文章主要介紹了springboot項目啟動慢的問題排查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 關于springmvc報錯404的問題

    關于springmvc報錯404的問題

    這篇文章主要介紹了關于springmvc報錯404的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論

广平县| 潍坊市| 来凤县| 嘉义县| 普洱| 台中县| 盖州市| 丹东市| 福清市| 泾川县| 银川市| 扎囊县| 镇原县| 东兴市| 潮安县| 溧阳市| 辛集市| 中西区| 类乌齐县| 北安市| 景宁| 广南县| 南川市| 淮北市| 石棉县| 泗洪县| 额济纳旗| 井研县| 深水埗区| 泸西县| 延寿县| 麻江县| 江山市| 青河县| 连江县| 衡山县| 都江堰市| 博湖县| 松阳县| 儋州市| 彭州市|