{eval=Array;=+count(Array);}

成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

問(wèn)答專欄Q & A COLUMN

Java開(kāi)發(fā)中,MyBatis、Hibernate、Spring Data JPA應(yīng)該如何選擇?

hedzrhedzr 回答0 收藏1
收藏問(wèn)題

6條回答

stormjun

stormjun

回答于2022-06-28 14:13

選擇哪一種框架,需要結(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就是Java Bean,只有有屬性、set、get方法)

  • Mybatis:做的是POJO與SQL之間的映射關(guān)系;程序員需要編寫(xiě)SQL;

  • Spring Data JPA:有人說(shuō)它是對(duì)Hibernate更高級(jí)的封裝,這種說(shuō)法是有一些問(wèn)題的;第二部分詳細(xì)說(shuō)明一下。

要解釋清楚Spring Data JPA是什么,需要一步步說(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在做持久化這一塊的工作,開(kāi)發(fā)了Spring-data-xxx這一系列包,如:Spring-data-jpa,Spring-data-redis,Spring-data-mongodb等等,這些都是Spring 提供的基于JPA和其他一些NOSQL的Repository。

  • Spring data JPA 是在JPA規(guī)范的基礎(chǔ)下提供了Repository層的實(shí)現(xiàn),但是使用哪一款ORM需要你自己去決定;相比我們更為熟悉的Hibernate和MyBatis,Spring Data JPA可以看做更高層次的抽象。

  • 使用Spring data JPA,默認(rèn)底層是Hibernate,但是可以修改成其他的ORM框架。

幾種框架的優(yōu)劣

  • Hibernate開(kāi)發(fā)難度較大,學(xué)習(xí)周期長(zhǎng);但是可以讓開(kāi)發(fā)者無(wú)需關(guān)心SQL,更專注業(yè)務(wù)流程;HQL不關(guān)心數(shù)據(jù)庫(kù)的類型,所以遷移起來(lái)很方便;

  • Mybatis需要手動(dòng)編寫(xiě)SQL語(yǔ)句(更直觀),可更直接地對(duì)SQL進(jìn)行優(yōu)化,但是數(shù)據(jù)庫(kù)移植性差;

  • Spring Data JPA簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問(wèn),可以通過(guò)命名規(guī)范編寫(xiě)SQL,如果SQL較為復(fù)雜,還是需要通過(guò)注解的方式編寫(xiě)SQL;它更適用于現(xiàn)在微服務(wù)的架構(gòu)(微服務(wù)的極致都是單表操作)。


從個(gè)人的角度:MyBatis>Spring Data JPA>Hibernate,或者M(jìn)yBatis + Spring Data JPA。

我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。

評(píng)論0 贊同0
  •  加載中...
syoya

syoya

回答于2022-06-28 14:13

如果沒(méi)有更換不同數(shù)據(jù)庫(kù)可能,Mybatis 可能更好一些,現(xiàn)在的Mybatis不光只有原生,什么操作都得寫(xiě)SQL了,自動(dòng)增刪改查單表的插件也很多了,而且自動(dòng)分頁(yè)插件也有,都挺優(yōu)秀。關(guān)于Hibernate和Spring Data Jpa本質(zhì)基本一樣,Hibernate是JPA標(biāo)準(zhǔn)的一種實(shí)現(xiàn),同為JPA實(shí)現(xiàn)的還有Eclipselink 、OpenJPA。這樣Hibernate就是Spring Data Jpa的默認(rèn)執(zhí)行器,同時(shí)Spring Data Jpa也有Eclipselink的實(shí)現(xiàn),在實(shí)際使用中JPQL(HQL)會(huì)出現(xiàn)方法不足的情況最后還是得用SQL,比如像xxx,xxx,xxx這樣的數(shù)據(jù),JPA和HQL中沒(méi)有實(shí)現(xiàn),但是在MySQL中有一個(gè)find in set方法。

評(píng)論0 贊同0
  •  加載中...
MasonEast

MasonEast

回答于2022-06-28 14:13

mybatis這就是趨勢(shì)。

評(píng)論0 贊同0
  •  加載中...
Charles

Charles

回答于2022-06-28 14:13

首選mybatis簡(jiǎn)單 能出活 易調(diào)試 交了貨 剩下時(shí)間想看哪個(gè)看哪個(gè)

評(píng)論0 贊同0
  •  加載中...
Ethan815

Ethan815

回答于2022-06-28 14:13

JPA: J2EE數(shù)據(jù)持久化的規(guī)范

JPA規(guī)范實(shí)現(xiàn):Hibernate

Spring Data JPA: 本質(zhì)也是借助Hibernate實(shí)現(xiàn)JPA規(guī)范,并提供了很多數(shù)據(jù)庫(kù)交互的接口,容易快速上手

hibernate相比mybatis較重,如果只是簡(jiǎn)單業(yè)務(wù)借助于HQL語(yǔ)言可以提高開(kāi)發(fā)效率。mybatis相比hibernate比較靈活,近乎原生的sql操作,處理復(fù)雜邏輯或者sql調(diào)優(yōu)優(yōu)勢(shì)巨大,目前我接觸的IT公司基本清一色的mybatis

評(píng)論0 贊同0
  •  加載中...
seanlook

seanlook

回答于2022-06-28 14:13

個(gè)人覺(jué)得,…都行,

評(píng)論0 贊同0
  •  加載中...

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

  • 擅長(zhǎng)該話題
  • 回答過(guò)該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說(shuō)句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<