# 面試系列 - MyBatis

本文準(zhǔn)備了一系列MyBatis相關(guān)面試題及其答案。

什么是 MyBatis ?

    • MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生類(lèi)型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對(duì)象)為數(shù)據(jù)庫(kù)中的記錄。
  • 關(guān)鍵詞
    • 持久層框架
    • 避免大量 JDBC 代碼、手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集
    • 使用 XML 或注解把原生類(lèi)型、接口、Java 對(duì)象映射為數(shù)據(jù)庫(kù)中的記錄

MyBatis 的優(yōu)缺點(diǎn) ?

優(yōu)點(diǎn)

      1. JDBC 相比,減少了50%以上的代碼量。
      1. MyBatis 是最簡(jiǎn)單的持久化框架,小巧并且簡(jiǎn)單易學(xué)。
      1. MyBatis 相當(dāng)靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,SQL 寫(xiě)在 XML 里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,并可重用。
      1. 提供 XML 標(biāo)簽,支持編寫(xiě)動(dòng)態(tài) SQL 語(yǔ)句。
      1. 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的 ORM 字段關(guān)系映射。
  • 關(guān)鍵詞
    • 減少 JDBC 代碼
    • 簡(jiǎn)單易學(xué)
    • SQL 與程序代碼解耦
    • 支持動(dòng)態(tài) SQL
    • 提供映射標(biāo)簽

缺點(diǎn)

      1. SQL 語(yǔ)句的編寫(xiě)工作量較大,尤其是字段多、關(guān)聯(lián)表多時(shí),更是如此,對(duì)開(kāi)發(fā)人員編寫(xiě) SQL 語(yǔ)句的功底有一定要求。
      1. SQL 語(yǔ)句依賴(lài)于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)。
  • 關(guān)鍵詞
    • 需要編寫(xiě)大量 SQL
    • 可移植性差

MyBatis 適用場(chǎng)景 ?

    • MyBatis 專(zhuān)注于 SQL 本身,是一個(gè)足夠靈活的 DAO 層解決方案。
    • 對(duì)性能的要求很高,或者需求變化較多的項(xiàng)目,如互聯(lián)網(wǎng)項(xiàng)目,MyBatis 將是不錯(cuò)的選擇。
  • 關(guān)鍵詞
    • 要求性能
    • 需求變化多
    • 互聯(lián)網(wǎng)

MyBatis 與 Hibernate 有哪些不同 ?

  • 關(guān)鍵詞
    • 自動(dòng)化程度, MyBatis 是半自動(dòng)化,而 Hibernate 是全自動(dòng)化
    • 可移植性, Hibernate 可移植性遠(yuǎn)遠(yuǎn)大于 MyBatis (因?yàn)?MyBatis 需要自己編寫(xiě) SQL
    • 靈活性, MyBatis 靈活性比 Hibernate 高(因?yàn)?MyBatis SQL 是自己編寫(xiě)的 )
    • 簡(jiǎn)單易用性,MyBatis 占優(yōu)
    • 代碼量,Hibernate 占優(yōu)
    • 緩存方面,

#{} 與 ${} 的區(qū)別是什么 ?

    • #{} 是預(yù)編譯處理,${} 是字符串替換
    • MyBatis 在處理 #{} 時(shí),會(huì)將 #{} 替換為 ? ,調(diào)用 PreparedStatementset 方法來(lái)賦值
    • MyBatis 在處理 ${} 時(shí),會(huì)將 ${} 替換為變量的值
    • SQL 注入是發(fā)生在編譯的過(guò)程中,#{} 可以有效的防止SQL注入
  • 關(guān)鍵詞
    • 預(yù)編譯
    • SQL 注入

模糊查詢(xún) like 語(yǔ)句怎么寫(xiě) ?

  • 三種方法如下:
    • like '%${}%'
    • like "%"#{}"%"
    • like CONCAT('%', #{}, '%')
  • 總結(jié):推薦第三種,第一種不能防止 SQL 注入,第二種不美觀(哈哈)

本文完。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 6,224評(píng)論 0 4
  • 前言 MyBatis是一個(gè)優(yōu)秀的持久層ORM框架,它對(duì)jdbc的操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行封裝,使開(kāi)發(fā)者只需要關(guān)注SQL...
    AI喬治閱讀 662評(píng)論 0 5
  • 一、概述 面試,難還是不難?取決于面試者的底蘊(yùn)(氣場(chǎng)+技能)、心態(tài)和認(rèn)知及溝通技巧。面試其實(shí)可以理解為一場(chǎng)聊天和談...
    編輯小猿閱讀 1,980評(píng)論 1 3
  • 不知為何,最近一直振作不起精神來(lái)。想寫(xiě)點(diǎn)東西,總無(wú)從下筆。被一種很強(qiáng)的失落感和焦慮占據(jù)著心頭。失落于沒(méi)找到讓自己甘...
    印第安南閱讀 653評(píng)論 1 2
  • 在吃肉是過(guò)大年的年代,為了改善生活,把平常過(guò)成快樂(lè)和幸福,村民們充分挖掘能利用的自然資源,開(kāi)發(fā)了許多新產(chǎn)品,其中之...
    瑞葉飛飛閱讀 17,220評(píng)論 1 2

友情鏈接更多精彩內(nèi)容