本文準(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)?MyBatis
SQL
是自己編寫(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
注入,第二種不美觀(哈哈)
本文完屿脐。