免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      面試有點慌?來看看18個MyBatis高頻知識及學習筆記

      面試有點慌?來看看18個MyBatis高頻知識及學習筆記

      什么是MyBatis

      MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis。是一個基于Java的持久層框架

      下面是精心整理的18個MyBatis高頻知識及學習筆記,不管處不處在面試階段的朋友都可以領取保存,以備不時之需

      01 18個MyBatis高頻知識點(含解析)

    1. 精講#{}和${}的區(qū)別是什么?
    2. 數據庫鏈接中斷如何處理?
    3. 在開發(fā)過程中,經常遇到插入重復的現(xiàn)象,這種情況該如何解決呢?
    4. 事務執(zhí)行過程中宕機的應對處理方式?
    5. 高性能服務器端端開發(fā)底層主要靠I/O復用來處理,這種模式:
    6. Mybatis中的Dao接口和XML文件里的SQL是如何建立關系的?
    7. 當實體類中的屬性名和表中的字段名不一樣,怎么辦 ?
    8. 模糊查詢like語句該怎么寫?
    9. 什么是MyBatis的接口綁定?有哪些實現(xiàn)方式?
    10. 使用MyBatis的mapper接口調用時要注意的事項
    11. 通常一個Xml映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什么?Dao接口里的方法,參數不同時,方法能重載嗎?
    12. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重復?
    13. Mybatis的一級、二級緩存的作用是什么?
    14. Mybatis 是如何進行分頁的?分頁插件的原理是什么?
    15. Mybatis 動態(tài) SQL 是做什么的?都有哪些動態(tài) SQL ?能簡述一下動態(tài) SQL 的執(zhí)行原理嗎?
    16. Mybatis是否支持延遲加載?如果支持,它的實現(xiàn)原理是什么?
    17. Mybatis都有哪些Executor執(zhí)行器?它們之間的區(qū)別是什么?
    18. MyBatis與Hibernate區(qū)別?
    19. 1 精講#{}和${}的區(qū)別是什么?

      • mybatis在處理#{}時,會將sql中的#{}替換為?號,調用PreparedStatement的set方法來賦值。
      • mybatis在處理時,就是把{}時,就是把時,就是把{}替換成變量的值。
      • 使用#{}可以有效的防止SQL注入,提高系統(tǒng)安全性。原因在于:預編譯機制。預編譯完成之后,SQL的結構已經固定,即便用戶輸入非法參數,也不會對SQL的結構產生影響,從而避免了潛在的安全風險。
      • 預編譯是提前對SQL語句進行預編譯,而其后注入的參數將不會再進行SQL編譯。我們知道,SQL注入是發(fā)生在編譯的過程中,因為惡意注入了某些特殊字符,最后被編譯成了惡意的執(zhí)行操作。而預編譯機制則可以很好的防止SQL注入。

      既然{}會引起sql注入,為什么有了#{}還需要有{}呢?那其存在的意義是什么?#{}主要用于預編譯,而預編譯的場景其實非常受限,而${}用于替換,很多場景會出現(xiàn)替換,而這種場景可不是預編譯2 數據庫鏈接中斷如何處理?數據庫的訪問底層是通過tcp實現(xiàn)的,當鏈接中斷是程序是無法得知,導致程序一直會停頓一段時間在這,最終會導致用戶體驗不好,因此面對數據庫連接中斷的異常,該怎么設置mybatis呢?connection操作底層是一個循環(huán)處理操作,因此可以進行時間有關的參數:

      • max_idle_time : 表明最大的空閑時間,超過這個時間socket就會關閉
      • connect_timeout : 表明鏈接的超時時間

      數據庫服務器活的杠杠的,但是因為網絡用塞,客戶端仍然連不上服務器端,這個時候就要設置timeout,別一直傻等著3 在開發(fā)過程中,經常遇到插入重復的現(xiàn)象,這種情況該如何解決呢?插入的過程一般都是分兩步的:先判斷是否存在記錄,沒有存在則插入否則不插入。如果存在并發(fā)操作,那么同時進行了第一步,然后大家都發(fā)現(xiàn)沒有記錄,然后都插入了數據從而造成數據的重復解決插入重復的思路 :

      • 先判斷數據庫是否存在數據,有的話則不進行任何操作。沒有數據的話,進行下一步;
      • 向redis set key,其中只有一個插入操作A會成功,其他并發(fā)的操作(B和C…)都會失敗的 ;
      • 當set key 成功的操作A,開始執(zhí)行插入數據操作,無論是否插入數據成功,都在需要將redis key刪除。【注】插入不成功可以多嘗試幾次,增加成功的概率 ;
      • 然而set key 失敗的操作B和C,sleep一下,競爭贏的插入操作重復以上步驟。

      總結:多線程同時插入數據,誰獲取鎖并插入數據成功了其他線程不做任何操作。當插入數據失敗后,其他線程搶鎖進行插入數據。篇幅有限,完整版18個Mybatis高頻知識點如下所示:(需要下載完整版的朋友可以 私信 “學習” 免費領取~~)

      18個Mybatis高頻知識點

      02 32道面試常見的MyBtis題目+解析

    20. 什么是 MyBatis?講下 MyBatis 的緩存
    21. Mybatis 是如何進行分頁的?分頁插件的原理是什么?
    22. 簡述 Mybatis 的插件運行原理,以及如何編寫一個插件?
    23. Mybatis 動態(tài) sql 是做什么的?都有哪些動態(tài) sql?能簡述一下動態(tài) sql 的執(zhí)行原理不?
    24. #{}和${}的區(qū)別是什么?
    25. 為什么說 Mybatis 是半自動 ORM 映射工具?它與全自動的區(qū)別在哪里?
    26. Mybatis 是否支持延遲加載?如果支持,它的實現(xiàn)原理是什么?
    27. MyBatis 與 Hibernate 有哪些不同?
    28. MyBatis 的好處是什么?
    29. 簡述 Mybatis 的 Xml 映射文件和 Mybatis 內部數據結構之間的映射關系?
    30. 什么是 MyBatis 的接口綁定,有什么好處?
    31. 接口綁定有幾種實現(xiàn)方式,分別是怎么實現(xiàn)的?
    32. 什么情況下用注解綁定,什么情況下用 xml 綁定?
    33. MyBatis 實現(xiàn)一對一有幾種方式?具體怎么操作的?
    34. Mybatis 能執(zhí)行一對一、一對多的關聯(lián)查詢嗎?都有哪些實現(xiàn)方式,以及它們之間的區(qū)別?
    35. MyBatis 里面的動態(tài) Sql 是怎么設定的?用什么語法?
    36. Mybatis 是如何將 sql 執(zhí)行結果封裝為目標對象并返回的?都有哪些映射形式?
    37. Xml 映射文件中,除了常見的 select|insert|updae|delete 標簽之外,還有哪些標簽?
    38. 當實體類中的屬性名和表中的字段名不一樣,如果將查詢的結果封裝到指定 pojo?
    39. 通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應, Dao 的工作原理,是否可以重載?
    40. Mybatis 映射文件中,如果 A 標簽通過 include 引用了 B 標簽的內容,請問,B 標簽能否定義在 A 標簽的后面,還是說必須定義在 A 標簽的前面?
    41. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重復?
    42. Mybatis 都有哪些 Executor 執(zhí)行器?它們之間的區(qū)別是什么?
    43. Mybatis 中如何指定使用哪一種 Executor 執(zhí)行器?
    44. Mybatis 執(zhí)行批量插入,能返回數據庫主鍵列表嗎?
    45. Mybatis 是否可以映射 Enum 枚舉類?
    46. 如何獲取自動生成的(主)鍵值?
    47. 在 mapper 中如何傳遞多個參數?
    48. resultType resultMap 的區(qū)別?
    49. 使用 MyBatis 的 mapper 接口調用時有哪些要求?
    50. Mybatis 比 IBatis 比較大的幾個改進是什么?
    51. IBatis 和 MyBatis 在核心處理類分別叫什么?在細節(jié)上的不同有哪些?
    52. 1 什么是 MyBatis?答:MyBatis 是一個可以自定義 SQL、存儲過程和高級映射的持久層框架。2 講下 MyBatis 的緩存答:MyBatis 的緩存分為一級緩存和二級緩存,一級緩存放在 session 里面,默認就有,二級緩存放在它的命名空間里,默認是不打開的,使用二級緩存屬性類需要實現(xiàn) Serializable 序列化接口(可用來保存對象的狀態(tài)),可在它的映射文件中配置3 Mybatis 是如何進行分頁的?分頁插件的原理是什么?答:1)Mybatis 使用 RowBounds 對象進行分頁,也可以直接編寫 sql 實現(xiàn)分頁,也可以使用Mybatis 的分頁插件。2)分頁插件的原理:實現(xiàn) Mybatis 提供的接口,實現(xiàn)自定義插件,在插件的攔截方法內攔截待執(zhí)行的 sql,然后重寫 sql。舉例:select * from student,攔截 sql 后重寫為:select t.* from (select * from student)tlimit 0,104 簡述 Mybatis 的插件運行原理,以及如何編寫一個插件?答:1)Mybatis 僅可以編寫針對 ParameterHandler、ResultSetHandler、StatementHandler、Executor 這 4 種接口的插件,Mybatis 通過動態(tài)代理,為需要攔截的接口生成代理對象以實現(xiàn)接口方法攔截功能,每當執(zhí)行這 4 種接口對象的方法時,就會進入攔截方法,具體就是InvocationHandler 的 invoke()方法,當然,只會攔截那些你指定需要攔截的方法。2)實現(xiàn) Mybatis 的 Interceptor 接口并復寫 intercept()方法,然后在給插件編寫注解,指定要攔截哪一個接口的哪些方法即可,記住,別忘了在配置文件中配置你編寫的插件。

      篇幅有限,完整版32道面試常見的Mybatis題目+解析如下所示:

      32道面試常見的Mybatis題目+解析

      03 MyBatis技術內幕(書籍PDF)

    53. 第1章 MyBatis快速入門
    54. 第2章 基礎支持層
    55. 第3章 核心處理層
    56. 第4章 高級主題
    57. MyBatis技術內幕(書籍PDF)

      最后分享一波需要文中分享的那些MyBatis全部學習資料的朋友注意啦,轉發(fā)+私信 “學習”即可免費領?。。?!好啦,既然這次談到了Mybatis,那么順便這里在給大家分享一下 【SSM框架】的 技術圖譜 以及 學習資料

      SSM框架技術圖譜

      SSM框架學習筆記

      最后說一次,需要MyBatis以及整個SSM框架的全部學習資料的,轉發(fā)+轉發(fā)+轉發(fā)+私信 “學習” 即可免費獲取哦~~

      鄭重聲明:本文內容及圖片均整理自互聯(lián)網,不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年7月10日 12:34
      下一篇 2022年7月10日 12:35

      相關推薦

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息