hibernate mybatis,為啥大廠不用mybatisplus
老鐵們,大家好,相信還有很多朋友對(duì)于hibernate mybatis和為啥大廠不用mybatisplus的相關(guān)問(wèn)題不太懂,沒關(guān)系,今天就由我來(lái)為大家分享分享hiber...
老鐵們,大家好,相信還有很多朋友對(duì)于hibernate mybatis和為啥大廠不用mybatisplus的相關(guān)問(wèn)題不太懂,沒關(guān)系,今天就由我來(lái)為大家分享分享hibernate mybatis以及為啥大廠不用mybatisplus的問(wèn)題,文章篇幅可能偏長(zhǎng),希望可以幫助到大家,下面一起來(lái)看看吧!
Java開發(fā)大型互聯(lián)網(wǎng)-Spring Boot如何集成MyBatis
springboot+mybatis可以說(shuō)是JAVAweb開發(fā)的經(jīng)典套餐了!
隨著微服務(wù)崛起,springboot成為web開發(fā)控制層的良好架構(gòu)!而mybatis早就替代jpa和hibernate成為最流行的ORM映射框架,所以兩者結(jié)合成為必然選擇!
先來(lái)看下mybatis的優(yōu)良特性:
1,框架小巧,經(jīng)過(guò)簡(jiǎn)單配置就可使用!
2,封裝了原始jdbc,不需要從驅(qū)動(dòng),連接等類寫起!
3,耦合度低:不需要在代碼層寫SQL,使用xml文件隔離!
4,支持動(dòng)態(tài)sql!
回到正題,springboot集成mybatis有兩種方式全部基于注解,和基于xml配置方式
基于xml的步驟如下:
1,創(chuàng)建項(xiàng)目,添加springboot依賴,mybatis依賴,connecter驅(qū)動(dòng)等!
2,添加配置文件application.yml,配置服務(wù)端口,數(shù)據(jù)庫(kù)連接信息,使用mybatis:mapper-locations:classpath:mapping/*.xml配置sql所在路徑進(jìn)行掃描!
3,增加實(shí)體類,DAO層接口,創(chuàng)建數(shù)據(jù)庫(kù)表!
4,在xx.xml文件中配置namespace(接口路徑)將sql和接口進(jìn)行映射,編寫與接口對(duì)應(yīng)名字的id的sql,開啟接口所在類的掃描注解!
5,編寫service,controller,注入以后進(jìn)行測(cè)試!
基于注解方式的實(shí)現(xiàn)方式差不多,不過(guò)sql都使用注解寫在了dqo接口上!
mybatis作為配置簡(jiǎn)單,性能優(yōu)良的orm框架,有著愈發(fā)廣泛的應(yīng)用,可以深度掌握下!
本文的Demo,可私信我索要,更多的技術(shù)分享,敬請(qǐng)關(guān)注。。。
“mybatis”和“hibernate”的區(qū)別是什么
mybatis與hibernate一樣是個(gè)orm數(shù)據(jù)庫(kù)框架。它與hibernate區(qū)別是非常大的,有以下幾點(diǎn):
總結(jié)起來(lái):
mybatis:小巧、方便、高效、簡(jiǎn)單、直接、半自動(dòng)
hibernate:強(qiáng)大、方便、高效、復(fù)雜、繞彎子、全自動(dòng)
1.hibernate是全自動(dòng),而mybatis是半自動(dòng)。
hibernate完全可以自動(dòng)生成sql。而mybatis僅有基本的字段映射,仍然需要通過(guò)手寫sql來(lái)實(shí)現(xiàn)和管理。
2.hibernate數(shù)據(jù)庫(kù)移植性遠(yuǎn)大于mybatis。
hibernate通過(guò)它強(qiáng)大的映射結(jié)構(gòu)和hql語(yǔ)言,大大降低了對(duì)象與數(shù)據(jù)庫(kù)(oracle、mysql等)的耦合性,而mybatis由于需要手寫sql,移植性也會(huì)隨之降低很多,成本很高。
3.hibernate擁有完整的日志系統(tǒng),mybatis則欠缺一些。
hibernate日志系統(tǒng)非常健全,涉及廣泛,而mybatis則除了基本記錄功能外,功能薄弱很多。
4.mybatis相比hibernate需要關(guān)心很多細(xì)節(jié)
hibernate配置要比mybatis復(fù)雜的多,學(xué)習(xí)成本也比mybatis高。但也正因?yàn)閙ybatis使用簡(jiǎn)單,才導(dǎo)致它要比hibernate關(guān)心很多技術(shù)細(xì)節(jié)。mybatis由于不用考慮很多細(xì)節(jié),開發(fā)模式上與傳統(tǒng)jdbc區(qū)別很小,hibernate則正好與之相反。但是如果使用hibernate很熟練的話,實(shí)際上開發(fā)效率絲毫不差于甚至超越mybatis。
5.sql直接優(yōu)化上,mybatis要比hibernate方便很多
由于mybatis的sql都是寫在xml里,因此優(yōu)化sql比hibernate方便很多。而hibernate的sql很多都是自動(dòng)生成的,無(wú)法直接維護(hù)sql;總之寫sql的靈活度上hibernate不及mybatis。
mybatis:
1.入門簡(jiǎn)單,即學(xué)即用,提供了數(shù)據(jù)庫(kù)查詢的自動(dòng)對(duì)象綁定功能。
2.可以進(jìn)行更為細(xì)致的SQL優(yōu)化,可以減少查詢字段。
3.缺點(diǎn)就是框架還是比較簡(jiǎn)陋,功能尚有缺失,雖然簡(jiǎn)化了數(shù)據(jù)綁定代碼,但是整個(gè)底層數(shù)據(jù)庫(kù)查詢實(shí)際還是要自己寫的,工作量也比較大,而且不太容易適應(yīng)快速數(shù)據(jù)庫(kù)修改。
4.二級(jí)緩存機(jī)制不佳。
hibernate:
1.功能強(qiáng)大,數(shù)據(jù)庫(kù)無(wú)關(guān)性好,O/R映射能力強(qiáng)。
2.有更好的二級(jí)緩存機(jī)制,可以使用第三方緩存。
3.缺點(diǎn)就是學(xué)習(xí)門檻不低,要精通門檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對(duì)象模型之間如何權(quán)衡取得平衡,以及怎樣用好Hibernate方面需要你的經(jīng)驗(yàn)和能力都很強(qiáng)才行。
舉個(gè)形象的比喻:
mybatis:機(jī)械工具,使用方便,拿來(lái)就用,但工作還是要自己來(lái)作
hibernate:智能機(jī)器人,但研發(fā)它(學(xué)習(xí)、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
hibernate和mybatis的區(qū)別
答:mybatis與hibernate一樣是個(gè)orm數(shù)據(jù)庫(kù)框架。它與hibernate區(qū)別是非常大的,有以下幾點(diǎn):
總結(jié)起來(lái):
mybatis:小巧、方便、高效、簡(jiǎn)單、直接、半自動(dòng)
hibernate:強(qiáng)大、方便、高效、復(fù)雜、繞彎子、全自動(dòng)
1.hibernate是全自動(dòng),而mybatis是半自動(dòng)。
hibernate完全可以自動(dòng)生成sql。而mybatis僅有基本的字段映射,仍然需要通過(guò)手寫sql來(lái)實(shí)現(xiàn)和管理。
2.hibernate數(shù)據(jù)庫(kù)移植性遠(yuǎn)大于mybatis。
hibernate通過(guò)它強(qiáng)大的映射結(jié)構(gòu)和hql語(yǔ)言,大大降低了對(duì)象與數(shù)據(jù)庫(kù)(oracle、mysql等)的耦合性,而mybatis由于需要手寫sql,移植性也會(huì)隨之降低很多,成本很高。
3.hibernate擁有完整的日志系統(tǒng),mybatis則欠缺一些。
hibernate日志系統(tǒng)非常健全,涉及廣泛,而mybatis則除了基本記錄功能外,功能薄弱很多。
4.mybatis相比hibernate需要關(guān)心很多細(xì)節(jié)
hibernate配置要比mybatis復(fù)雜的多,學(xué)習(xí)成本也比mybatis高。但也正因?yàn)閙ybatis使用簡(jiǎn)單,才導(dǎo)致它要比hibernate關(guān)心很多技術(shù)細(xì)節(jié)。mybatis由于不用考慮很多細(xì)節(jié),開發(fā)模式上與傳統(tǒng)jdbc區(qū)別很小,hibernate則正好與之相反。但是如果使用hibernate很熟練的話,實(shí)際上開發(fā)效率絲毫不差于甚至超越mybatis。
5.sql直接優(yōu)化上,mybatis要比hibernate方便很多
由于mybatis的sql都是寫在xml里,因此優(yōu)化sql比hibernate方便很多。而hibernate的sql很多都是自動(dòng)生成的,無(wú)法直接維護(hù)sql;總之寫sql的靈活度上hibernate不及mybatis。
mybatis:
1.入門簡(jiǎn)單,即學(xué)即用,提供了數(shù)據(jù)庫(kù)查詢的自動(dòng)對(duì)象綁定功能。
2.可以進(jìn)行更為細(xì)致的SQL優(yōu)化,可以減少查詢字段。
3.缺點(diǎn)就是框架還是比較簡(jiǎn)陋,功能尚有缺失,雖然簡(jiǎn)化了數(shù)據(jù)綁定代碼,但是整個(gè)底層數(shù)據(jù)庫(kù)查詢實(shí)際還是要自己寫的,工作量也比較大,而且不太容易適應(yīng)快速數(shù)據(jù)庫(kù)修改。
4.二級(jí)緩存機(jī)制不佳。
hibernate:
1.功能強(qiáng)大,數(shù)據(jù)庫(kù)無(wú)關(guān)性好,O/R映射能力強(qiáng)。
2.有更好的二級(jí)緩存機(jī)制,可以使用第三方緩存。
3.缺點(diǎn)就是學(xué)習(xí)門檻不低,要精通門檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對(duì)象模型之間如何權(quán)衡取得平衡,以及怎樣用好Hibernate方面需要你的經(jīng)驗(yàn)和能力都很強(qiáng)才行。
舉個(gè)形象的比喻:
mybatis:機(jī)械工具,使用方便,拿來(lái)就用,但工作還是要自己來(lái)作
hibernate:智能機(jī)器人,但研發(fā)它(學(xué)習(xí)、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
mybatisplus和hirbate區(qū)別
(1)兩者相同點(diǎn)
Hibernate和Mybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄彺娣桨?,?chuàng)建適配器來(lái)完全覆蓋緩存行為。
(2)兩者不同點(diǎn)
Hibernate的二級(jí)緩存配置在SessionFactory生成的配置文件中進(jìn)行詳細(xì)配置,然后再在具體的表-對(duì)象映射中配置是那種緩存。而MyBatis在使用二級(jí)緩存時(shí)需要特別小心。如果不能完全確定數(shù)據(jù)更新操作的波及范圍,避免Cache的盲目使用。否則,臟數(shù)據(jù)的出現(xiàn)會(huì)給系統(tǒng)的正常運(yùn)行帶來(lái)很大的隱患。
什么是mybatis
Mybatis是一款基于Java語(yǔ)言的持久層框架,可與關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、Oracle等)進(jìn)行交互。
Mybatis最初是iBATIS項(xiàng)目的一個(gè)分支,于2010年正式更名為Mybatis。Mybatis采用了基于XML的配置方式,將Java對(duì)象映射到關(guān)系型數(shù)據(jù)庫(kù)表中,通過(guò)封裝JDBC的操作,幫助開發(fā)者快速進(jìn)行數(shù)據(jù)庫(kù)的操作。Mybatis提供了非常強(qiáng)大的SQL映射配置,可以非常靈活的控制SQL的執(zhí)行流程,并提供了很多優(yōu)秀的特性,比如二級(jí)緩存、插件機(jī)制等等。
Mybatis核心思想是SQL和Java代碼分離,通過(guò)XML或注解的方式將SQL語(yǔ)句進(jìn)行描述,與Java代碼結(jié)合使用,實(shí)現(xiàn)動(dòng)態(tài)SQL語(yǔ)句的生成和執(zhí)行。相比于Hibernate等ORM框架,Mybatis更加輕量級(jí),靈活性更高,適用于大型企業(yè)系統(tǒng)的開發(fā)。Mybatis是開源框架,具有很廣泛的應(yīng)用和開發(fā)者社區(qū)。
Java開發(fā)中,MyBatis、Hibernate、Spring Data JPA應(yīng)該如何選擇
選擇哪一種框架,需要結(jié)合項(xiàng)目實(shí)際來(lái),結(jié)合業(yè)務(wù)場(chǎng)景和團(tuán)隊(duì)成員的能力,綜合考慮并選擇技術(shù)方案。
先和大家講講每一種框架是啥Hibernate:POJO與數(shù)據(jù)庫(kù)表建立映射關(guān)系;Java程序員可以使用操作對(duì)象的思維操作數(shù)據(jù)庫(kù)。(POJO就是JavaBean,只有有屬性、set、get方法)
Mybatis:做的是POJO與SQL之間的映射關(guān)系;程序員需要編寫SQL;
SpringDataJPA:有人說(shuō)它是對(duì)Hibernate更高級(jí)的封裝,這種說(shuō)法是有一些問(wèn)題的;第二部分詳細(xì)說(shuō)明一下。
要解釋清楚SpringDataJPA是什么,需要一步步說(shuō)起期初Java需要通過(guò)各個(gè)數(shù)據(jù)庫(kù)廠商提供的API進(jìn)行數(shù)據(jù)庫(kù)的訪問(wèn),后來(lái)JAVA提出了JDBC,程序直接使用JDBC這套規(guī)范就可以跟各個(gè)數(shù)據(jù)庫(kù)進(jìn)行對(duì)接;
接著誕生了ORM技術(shù),簡(jiǎn)化了Java對(duì)象的持久化工作,出現(xiàn)了Hibernate、TopLink等ORM框架;
Sun公司在JDK1.5的時(shí)候,吸收了Hibernate、TopLink等ORM框架的優(yōu)點(diǎn),提出了Java持久化規(guī)范:JPA;
Hibernate在3.2的時(shí)候提供了JPA的實(shí)現(xiàn),其余的JPA的供應(yīng)商還有諸如OpenJPA、Toplink等;
Spring在做持久化這一塊的工作,開發(fā)了Spring-data-xxx這一系列包,如:Spring-data-jpa,Spring-data-redis,Spring-data-mongodb等等,這些都是Spring提供的基于JPA和其他一些NOSQL的Repository。
SpringdataJPA是在JPA規(guī)范的基礎(chǔ)下提供了Repository層的實(shí)現(xiàn),但是使用哪一款ORM需要你自己去決定;相比我們更為熟悉的Hibernate和MyBatis,SpringDataJPA可以看做更高層次的抽象。
使用SpringdataJPA,默認(rèn)底層是Hibernate,但是可以修改成其他的ORM框架。
幾種框架的優(yōu)劣Hibernate開發(fā)難度較大,學(xué)習(xí)周期長(zhǎng);但是可以讓開發(fā)者無(wú)需關(guān)心SQL,更專注業(yè)務(wù)流程;HQL不關(guān)心數(shù)據(jù)庫(kù)的類型,所以遷移起來(lái)很方便;
Mybatis需要手動(dòng)編寫SQL語(yǔ)句(更直觀),可更直接地對(duì)SQL進(jìn)行優(yōu)化,但是數(shù)據(jù)庫(kù)移植性差;
SpringDataJPA簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問(wèn),可以通過(guò)命名規(guī)范編寫SQL,如果SQL較為復(fù)雜,還是需要通過(guò)注解的方式編寫SQL;它更適用于現(xiàn)在微服務(wù)的架構(gòu)(微服務(wù)的極致都是單表操作)。
從個(gè)人的角度:MyBatis>SpringDataJPA>Hibernate,或者M(jìn)yBatis+SpringDataJPA。
我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注。關(guān)于hibernate mybatis到此分享完畢,希望能幫助到您。
本文鏈接:http://xinin56.com/ruanjian/27499.html