本文準(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)
- 答
- 與
JDBC相比,減少了50%以上的代碼量。
- 與
-
MyBatis是最簡(jiǎn)單的持久化框架,小巧并且簡(jiǎn)單易學(xué)。
-
-
MyBatis相當(dāng)靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,SQL寫(xiě)在XML里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,并可重用。
-
- 提供
XML標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)SQL語(yǔ)句。
- 提供
- 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的
ORM字段關(guān)系映射。
- 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的
- 關(guān)鍵詞
- 減少
JDBC代碼 - 簡(jiǎn)單易學(xué)
-
SQL與程序代碼解耦 - 支持動(dòng)態(tài)
SQL - 提供映射標(biāo)簽
- 減少
缺點(diǎn)
- 答
-
SQL語(yǔ)句的編寫(xiě)工作量較大,尤其是字段多、關(guān)聯(lián)表多時(shí),更是如此,對(duì)開(kāi)發(fā)人員編寫(xiě)SQL語(yǔ)句的功底有一定要求。
-
-
SQL語(yǔ)句依賴(lài)于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)。
-
- 關(guān)鍵詞
- 需要編寫(xiě)大量
SQL - 可移植性差
- 需要編寫(xiě)大量
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)?MyBatisSQL是自己編寫(xiě)的 ) - 簡(jiǎn)單易用性,
MyBatis占優(yōu) - 代碼量,
Hibernate占優(yōu) - 緩存方面,
- 自動(dòng)化程度,
#{} 與 ${} 的區(qū)別是什么 ?
- 答
-
#{}是預(yù)編譯處理,${}是字符串替換 -
MyBatis在處理#{}時(shí),會(huì)將#{}替換為?,調(diào)用PreparedStatement的set方法來(lái)賦值 -
MyBatis在處理${}時(shí),會(huì)將${}替換為變量的值 -
SQL注入是發(fā)生在編譯的過(guò)程中,#{}可以有效的防止SQL注入
-
- 關(guān)鍵詞
- 預(yù)編譯
-
SQL注入
模糊查詢(xún) like 語(yǔ)句怎么寫(xiě) ?
- 三種方法如下:
like '%${}%'like "%"#{}"%"like CONCAT('%', #{}, '%')
- 總結(jié):推薦第三種,第一種不能防止
SQL注入,第二種不美觀(哈哈)
本文完。