更新時(shí)間:2022年06月01日16時(shí)14分 來(lái)源:傳智教育 瀏覽次數(shù):
JDBC是Java程序?qū)崿F(xiàn)數(shù)據(jù)訪問(wèn)的基礎(chǔ),JDBC的劣勢(shì)主要有以下幾個(gè)方面。
(1)數(shù)據(jù)庫(kù)連接創(chuàng)建、釋放頻繁會(huì)造成系統(tǒng)資源浪費(fèi),從而影響系統(tǒng)性能。
(2)SQL語(yǔ)句在代碼中硬編碼,造成代碼不易維護(hù)。在實(shí)際應(yīng)用的開發(fā)中,SQL變化的可能性較大。在傳統(tǒng)JDBC編程中,SQL變動(dòng)需要改變Java代碼,違反了開閉原則。
(3)用PreparedStatement向占位符傳參數(shù)存在硬編碼,因?yàn)镾QL語(yǔ)句的where條件不一定,可能多也可能少,修改SQL需要修改代碼,造成系統(tǒng)不易維護(hù)。
(4)JDBC對(duì)結(jié)果集解析存在硬編碼(查詢列名),SQL變化導(dǎo)致解析代碼變化,造成系統(tǒng)不易維護(hù)。
MyBatis框架支持普通SQL查詢、存儲(chǔ)過(guò)程以及高級(jí)映射的持久層框架,它消除了幾乎所有的JDBC代碼和參數(shù)的手動(dòng)設(shè)置以及對(duì)結(jié)果集的檢索,使用簡(jiǎn)單的XML或注解進(jìn)行配置和原始映射,將接口和Java的POJO映射成數(shù)據(jù)庫(kù)中的記錄,使得Java開發(fā)人員可以使用面向?qū)ο蟮木幊趟枷雭?lái)操作數(shù)據(jù)庫(kù)。
MyBatis框架是一個(gè)ORM(Object/Relation Mapping,即對(duì)象關(guān)系映射)框架。所謂的ORM就是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)類型不匹配的技術(shù),它通過(guò)描述Java對(duì)象與數(shù)據(jù)庫(kù)表之間的映射關(guān)系,自動(dòng)將Java應(yīng)用程序中的對(duì)象持久化到關(guān)系型數(shù)據(jù)庫(kù)的表中。ORM框架的工作原理可以通過(guò)一張圖來(lái)展示。
針對(duì)JDBC編程的劣勢(shì),MyBatis提供了以下解決方案,具體如下。
問(wèn)題一:數(shù)據(jù)庫(kù)鏈接創(chuàng)建、釋放頻繁會(huì)造成系統(tǒng)資源浪費(fèi),從而影響系統(tǒng)性能。
解決方案:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫(kù)鏈接。
問(wèn)題二:SQL語(yǔ)句在代碼中硬編碼,造成代碼不易維護(hù)。在實(shí)際應(yīng)用的開發(fā)中,SQL變化的可能較大。在傳統(tǒng)JDBC編程中,SQL變動(dòng)需要改變Java代碼,違反了開閉原則。
解決方案:MyBatis將SQL語(yǔ)句配置在MyBatis的映射文件中,實(shí)現(xiàn)了與Java代碼的分離。
問(wèn)題三:使用preparedStatement向占位符傳參數(shù)存在硬編碼,因?yàn)镾QL語(yǔ)句的where條件不一定,可能多也可能少,修改SQL需要修改代碼,造成系統(tǒng)不易維護(hù)。
解決方案:MyBatis自動(dòng)將Java對(duì)象映射至SQL語(yǔ)句,通過(guò)Statement中的parameterType定義輸入?yún)?shù)的類型。
問(wèn)題四:JDBC對(duì)結(jié)果集解析存在硬編碼(查詢列名),SQL變化導(dǎo)致解析代碼變化,造成系統(tǒng)不易維護(hù)。
解決方案:MyBatis自動(dòng)將SQL執(zhí)行結(jié)果映射至Java對(duì)象,通過(guò)Statement中的resultType定義輸出結(jié)果的類型。
Java培訓(xùn)機(jī)構(gòu)出來(lái)的好找工作嗎?
2022-05-18DatagramSocket類中常用的構(gòu)造方法
2022-05-09Java語(yǔ)言的技術(shù)平臺(tái):JavaSE、JavaEE和JavaME
2022-05-09Java中的單例模式有哪些優(yōu)點(diǎn)和缺點(diǎn)?
2022-05-06索引的底層實(shí)現(xiàn)原理是什么?【大數(shù)據(jù)開發(fā)面試問(wèn)題】
2022-05-05不考“八股文”,現(xiàn)在的互聯(lián)網(wǎng)大廠面試到底考什么?
2022-05-05北京校區(qū)