代做安裝預(yù)算的網(wǎng)站青島網(wǎng)站建設(shè)
目錄:
- 第一題. MyBatis是什么?
- 第二題. ORM是什么?
- 第三題. 為什么說Mybatis是半自動ORM映射工具?它與全自動的區(qū)別在哪里?
- 第四題. 傳統(tǒng)JDBC開發(fā)存在的問題
- 第五題. JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
第一題. MyBatis是什么?
MyBatis 是一款優(yōu)秀的持久層框架,一個半 ORM(對象關(guān)系映射)框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式Java 對象)為數(shù)據(jù)庫中的記錄。
第二題. ORM是什么?
ORM(Object Relational Mapping),對象關(guān)系映射,是一種為了解決關(guān)系型數(shù)據(jù)庫數(shù)據(jù)與簡單Java對象(POJO)的映射關(guān)系的技術(shù)。簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動持久化到關(guān)系型數(shù)據(jù)庫中。
第三題. 為什么說Mybatis是半自動ORM映射工具?它與全自動的區(qū)別在哪里?
Hibernate屬于全自動ORM映射工具,使用Hibernate查詢關(guān)聯(lián)對象或者關(guān)聯(lián)集合對象時,可以根據(jù)對象關(guān)系模型直接獲取,所以它是全自動的。而Mybatis在查詢關(guān)聯(lián)對象或關(guān)聯(lián)集合對象時,需要手動編寫sql來完成,所以,稱之為半自動ORM映射工具。
第四題. 傳統(tǒng)JDBC開發(fā)存在的問題
- 頻繁創(chuàng)建數(shù)據(jù)庫連接對象、釋放,容易造成系統(tǒng)資源浪費,影響系統(tǒng)性能。可以使用連接池解決這個問題。但是使用jdbc需要自己實現(xiàn)連接池。
- sql語句定義、參數(shù)設(shè)置、結(jié)果集處理存在硬編碼。實際項目中sql語句變化的可能性較大,一旦發(fā)生變化,需要修改java代碼,系統(tǒng)需要重新編譯,重新發(fā)布。不好維護。
- 使用preparedStatement向占有位符號傳參數(shù)存在硬編碼,因為sql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統(tǒng)不易維護。
- 結(jié)果集處理存在重復(fù)代碼,處理麻煩。如果可以映射成Java對象會比較方便
第五題. JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
- 數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫連接池可解決此問題。
解決:在mybatis-config.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫連接。 - Sql語句寫在代碼中造成代碼不易維護,實際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。 - 向sql語句傳參數(shù)麻煩,因為sql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。
解決: Mybatis自動將java對象映射至sql語句。 - 對結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。
解決:Mybatis自動將sql執(zhí)行結(jié)果映射至java對象。
如果我的內(nèi)容對你有幫助,請點贊,評論,收藏。創(chuàng)作不易,大家的支持就是我堅持下去的動力