摘要:語(yǔ)句在代碼中硬編碼,造成代碼不易于維護(hù),實(shí)際應(yīng)用變化的可能較大,變動(dòng)需要改變代碼。對(duì)結(jié)果集解析存在硬編碼查詢(xún)列名,變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護(hù),如果能將數(shù)據(jù)庫(kù)記錄封裝成對(duì)象解析比較方便。
MyBatis理解與掌握(簡(jiǎn)介)
@(MyBatis)[Java, 框架, MyBatis]
簡(jiǎn)介??Mybatis是一個(gè)數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡(jiǎn)單的XML或者注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄通過(guò)一系列的XML配置文件,解耦了對(duì)象和存儲(chǔ)過(guò)程/SQL語(yǔ)句。
因?yàn)镸yBatis面向的是SQL,所以有時(shí)也稱(chēng)之為SQL映射器
(1)數(shù)據(jù)庫(kù)連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi) 從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫(kù)連接池可解決此問(wèn)題。
解決:在mybatis-config.xml中配置了數(shù)據(jù)連接池,方便使用了連接池管理數(shù)據(jù)庫(kù)鏈接。
(2)Sql語(yǔ)句在代碼中硬編碼 ,造成代碼不易于維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動(dòng)需要改變Java代碼。
解決:將Sql語(yǔ)句配置在映射文件(xxxmapper.xml)中,實(shí)現(xiàn)sql語(yǔ)句和Java代碼的分離。
(3)使用preparedStatement向占有位符號(hào)傳參數(shù)存在硬編碼 ,因?yàn)閟ql語(yǔ)句的where條件不一定,可能多也可能少,修改sql還需要修改代碼,系統(tǒng)不易于維護(hù)。
解決:Mybatis自動(dòng)將Java對(duì)象映射至sql語(yǔ)句,通過(guò)statement中的parameterType定義輸入?yún)?shù)類(lèi)型。
(4)對(duì)結(jié)果集解析存在硬編碼 (查詢(xún)列名),sql變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護(hù),如果能將數(shù)據(jù)庫(kù)記錄封裝成pojo對(duì)象解析比較方便。
解決:Mybatis自動(dòng)將sql執(zhí)行結(jié)果映射至Java對(duì)象,通過(guò)statement中的resultType定義輸出結(jié)果的類(lèi)型。
Mybatis學(xué)習(xí)門(mén)檻低, 簡(jiǎn)單易學(xué) ,程序員直接編寫(xiě)原生態(tài)sql,可嚴(yán)格控制sql執(zhí)行性能, 靈活度高 ,非常適合對(duì)關(guān)系數(shù)據(jù)模型要求不高的軟件開(kāi)發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運(yùn)營(yíng)類(lèi)軟件等,因?yàn)檫@類(lèi)軟件需求變化頻繁,一旦需求變化要求成果輸出迅速。
但是Mybatis 無(wú)法做到數(shù)據(jù)庫(kù)無(wú)關(guān)性 ,如果需要實(shí)現(xiàn)支持多種數(shù)據(jù)庫(kù)的軟件則需要自定義多套sql映射文件,工作量大。
Hibernate 對(duì)象/關(guān)系映射能力強(qiáng) ,數(shù)據(jù)庫(kù)無(wú)關(guān)性好 ,對(duì)于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用Hibernate開(kāi)發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate 學(xué)習(xí)門(mén)檻高,要精通門(mén)檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對(duì)象模型之間如何權(quán)衡,以及怎么用好Hibernate需要具有很強(qiáng)的經(jīng)驗(yàn)和能力才行。
總之,按照用戶(hù)的需求在有限的資源環(huán)境下只能做出威化擴(kuò)展性良好的軟件架構(gòu)都是好架構(gòu),所以框架只有適合才是最好的。
配置文件區(qū)別:
hibernate:
主配置文件:數(shù)據(jù)庫(kù)連接信息,方言,映射文件信息
實(shí)體類(lèi)配置文件:類(lèi)和表之間的映射關(guān)系
Mybatis:
主配置文件:數(shù)據(jù)庫(kù)連接信息,映射文件信息
SQL映射文件:將執(zhí)行的SQL進(jìn)行關(guān)聯(lián)映射
Mybatis和Hibernate不同,它不完全是一個(gè)ORM框架,因?yàn)镸ybatis需要程序員自己編寫(xiě)sql語(yǔ)句,不過(guò)Mybatis可以通過(guò)xml或注解方式靈活配置要運(yùn)行的sql語(yǔ)句,并將Java對(duì)象和sql語(yǔ)句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成Java對(duì)象
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77065.html
摘要:的實(shí)例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請(qǐng)求或方法作用域。下面的示例就是一個(gè)確保關(guān)閉的標(biāo)準(zhǔn)模式依賴(lài)注入框架可以創(chuàng)建線程安全的基于事務(wù)的和映射器并將它們直接注入到你的中,因此可以直接忽略它們的生命周期。 MyBatis理解與掌握(入門(mén)例子) @(MyBatis)[Java, 框架, MyBatis] 配置文件 mybatis-config.xml ...
摘要:理解與掌握緩存框架一級(jí)緩存默認(rèn)就可以使用框架處理緩存是依賴(lài)映射,的內(nèi)部緩存使用一個(gè),為語(yǔ)句。一級(jí)緩存的作用域是一個(gè),一旦發(fā)生變化,一級(jí)緩存失敗在同一個(gè)中,執(zhí)行相同的查詢(xún),第一次會(huì)去查詢(xún)數(shù)據(jù)庫(kù),并寫(xiě)到緩存中第二次直接從緩存中取。 MyBatis理解與掌握(緩存) @(MyBatis)[Java, 框架, MyBatis] 一級(jí)緩存(SqlSession) 默認(rèn)就可以使用 框架處理緩存是 ...
摘要:輸入?yún)?shù)類(lèi)型指定輸入?yún)?shù)類(lèi)型,通過(guò)從輸入對(duì)象中獲取參數(shù)值放置在中。查詢(xún)結(jié)果處理指定輸出結(jié)果類(lèi)型,將查詢(xún)結(jié)果的一行記錄數(shù)據(jù)映射為指定類(lèi)型的對(duì)象。 MyBatis理解與掌握(輸入與輸出) @(MyBatis)[Java, 框架, MyBatis] 占位符和拼接 {}:占位符 能防止sql注入問(wèn)題,所一能盡量用#{}就盡量用#{}用來(lái)傳入?yún)?shù),sql在解析的時(shí)候會(huì)加上 當(dāng)成字符串來(lái)解析 ,...
摘要:容器自動(dòng)完成裝載,默認(rèn)的方式是這部分重點(diǎn)在常用模塊的使用以及的底層實(shí)現(xiàn)原理。 對(duì)于那些想面試高級(jí) Java 崗位的同學(xué)來(lái)說(shuō),除了算法屬于比較「天方夜譚」的題目外,剩下針對(duì)實(shí)際工作的題目就屬于真正的本事了,熱門(mén)技術(shù)的細(xì)節(jié)和難點(diǎn)成為了主要考察的內(nèi)容。 這里說(shuō)「天方夜譚」并不是說(shuō)算法沒(méi)用,不切實(shí)際,而是想說(shuō)算法平時(shí)其實(shí)很少用到,甚至面試官都對(duì)自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...
摘要:理解與掌握動(dòng)態(tài)框架就是簡(jiǎn)單的條件判斷,利用語(yǔ)句我們可以實(shí)現(xiàn)某些簡(jiǎn)單的條件選擇。有了元素我們就可以動(dòng)態(tài)的更新那些修改了的字段。 MyBatis理解與掌握(動(dòng)態(tài)SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__簡(jiǎn)單的條件判斷 __,利用if語(yǔ)句我們可以實(shí)現(xiàn)某些簡(jiǎn)單的條件選擇。先來(lái)看如下一個(gè)例子: select * from user whe...
閱讀 3172·2021-11-24 10:21
閱讀 1777·2021-10-11 10:57
閱讀 2954·2021-09-22 15:24
閱讀 2845·2021-09-22 14:58
閱讀 2470·2019-08-30 13:16
閱讀 3656·2019-08-29 13:05
閱讀 3549·2019-08-29 12:14
閱讀 3609·2019-08-27 10:55