springjpa和mybatis哪個查詢效率高

時間 2021-05-05 19:17:28

1樓:

沒什麼區別,開發人員真的懂了什麼叫ER之後,理解正規化存在的原因之後,再去做專案,才會是本質區別。

實際開發時,16G記憶體承載的,單錶資料量超過5000w的,各種group by , sum , like,每天上百兆的slow-log的也沒什麼要去主動優化的。而且你說優化?這資料庫根本不是按正規化設計的,一優化就幾個禮拜的開發量,根本沒動力去做,還不知道優化完可能別的什麼模組就出狀況。

你能看到很多開發寫的很爛的hibernate 和各種sql ,然後公升一下記憶體就什麼都解決了,開發人員幾個錢?記憶體幾個錢?

所以查詢效率?根本不在框架上。開發效率取決於你的隊伍更熟悉什麼,我個人是覺得mybatis在收拾爛攤子的時候要更方便一點。

簡單對映,兩個框架都差不多太多的感覺。複雜的多表查詢,mybatis 的resultmap到pojo更加符合我的期待。複雜查詢必然自己寫sql,效能不效能還不在於你自己。

如果你是想知道byID查,哪個效能更高,我看你還是早點別幹這行了。

2樓:楊爭

理論上mybatis要比jpa要快的,但是實際上這一點點的速度影響很小,真正決定框架選擇的因素是使用難度和開發效率。國外或許jpa用的很多,但是國內環境我真心不推薦jpa,推薦jpa的同學怕是沒做過報表吧。國內無論是網際網路還是傳統專案很多都有報表要求。

十幾張錶連查,各種子查詢,分組,sql拼接,去重要寫在一條sql上。還要面臨人員流動和需求變更,有的時候sql都500行了。看懂都很困難了。

用jpa來寫不更是噩夢嗎?

3樓:JasonMing

用mybatis國內很大部分是因為A廠帶起來的風氣。

A廠的發展速度根本不是這種有著高層封裝的框架能跟上的。主備熱切分庫分表各種技術的加持下,誰敢用jpa生成的sql?還不是只有mybatis這種古老的半自動化ORM能平衡開發和管理(DBA做SQL review)上的需求。

說JPA不行的也是醉了,之前看過乙個統計mybatis只有中國和東亞這邊比較流行(說白了還是中國帶起的),國外spring全家桶多得是,也沒見死。

而且很多時候線上專案本來就會盡量避免join,大多數會根據業務特性該快取的快取,查詢盡可能單錶走索引並且限制結果數量(螢幕就這麼大,多了你也展現不出來),這種情況下jpa和mybatis從效能而言真沒太大不同。

簡單來說,如果你新專案啟動,沒什麼技術包袱可以jpa簡單粗暴走一波,在資料層做好隔離後面想換mybatis也不是難事(大多專案根本走不到這一步)。當然起步mybatis也沒問題,主要看團隊技術棧和拍板人的習慣而已罷了。

4樓:

這兩個東西各有各的用途。

你有很多sql需要手寫(出於優化目的、或者表很多、複雜查詢很多)就用mybatis。

如果你想嘗試領域驅動設計,那jpa無疑是首選。 讀寫分離之後,寫模型用jpa去做,讀模型可能會用不同的技術實現功(那些複雜的鍊錶查詢也就不存在了)。

5樓:宋凱

jpa不要用,完全就是坑開發,需求動不動改一下,你試試用jpa給我實現個,jpa就是個半吊子,規範而已,完全適應不了生產實際的開發,誰家單錶查?做後台列表嗎?

6樓:EasonLyo

效能上,Spring Data JPA肯定要比Mybatis要差(理論上如此,除非寫Mysql原生SQL的人真的菜如狗),但是從效率上來說,Spring Data JPA的開發效率肯定要高於Mybatis而且相容及擴充套件性肯定要好於Mybatis,比如說,sql的分頁在不同的資料庫實現語句是不一樣的:

sqlserver:

實現方式我記得有很多種常用的是

select

*from

tableName

offset

pageNum

rows

fetch

next

pageSize

rows

only

mysql:

select

*from

tableName

limit

(pageNum-1

)*pageSize

,pageSize

oracle:

select

*from

(selecta.

*,rownum

rnfrom

(select

*from

tableName)a

where

rownum

<=pageSize

*pageNum

)where

rn>=

(pageNum-1

)*pageSize

Spring data jpa很好的封裝了這些細節提供了分頁的實現給你,如果你用Mybatis,試想一下,你寫這些sql有多麻煩:

1、不同的資料庫你得熟悉不同的實現,還要知道哪種sql效率高,哪種sql效率低。

2、如果換資料庫源(比如從mysql遷移到oracle或者oracle遷移到mysql,當然正常情況下很少會遇到這種情況)

3、等等等等....

所以說,具體的技術選型還是要看具體的開發情況:

1、如果專案有DBA,我建議選Mybatis,基礎SQL用生成器生成,聯表(多表)查詢DBA寫好SQL直接給你配置到專案裡,這樣的話DBA手握SQL編寫效能不行你找他麻煩。

2、如果專案沒有DBA,專案又急,面向deadline程式設計,我建議你還是老老實實用Spring Data JPA吧,單錶查詢直接給你基本實現。實在到JPA的自動SQL解決不了你的需求的時候你再用原生Query去擴充。

效能?框架的差異其實相對於整體專案而言影響很小,乙個幾百萬行的表你用什麼框架查詢效能都不行,後面都需要經歷資料庫的架構演進。比如讀寫分離、分庫分表、分布式資料庫等等等等。

7樓:langu

如果對sql玩的不好,我認為springdatajpa更好操作,生成的sql還好。如果sql玩的還好,那你用mybatis寫的sql比springdatajpa自動生成的要好。

so that和such that和too,to的區別?

風zz 1 so that 引導目的狀語從句。意思是 以便,為了 so 形容詞或副詞原形 that 引導結果狀語從句。意思是 如此 以致 此時可與too.to.互用。2 such a an 形容詞 名詞單數 that,或such 形容詞 不可數名詞或複數名詞 that 意思是 如此 以致 3 too...

Jennie和Lisa Rosie和Jennie不合是真的嗎?

鶴映辰 假的!假的!假的!BLACKPINK成團加上練習生時期大概 將近十年的感情你跟我說她們不合?不合早就be了 DASISIANNIECYR jenlisa一起當的練習生我們看不到那段時光但是能一起承受痛苦的一定關係很好 D jenlisayyds 至於jen和rose應該比較business吧...

關於dubbo和zookeeper和solr的關係和作用?

ZooKeeper 是乙個註冊中心,採用類似資料夾目錄的方式儲存資料,儲存了已經啟動的服務的資訊,如ip 埠 介面 方法列表 版本號等,儲存成乙個URL。dubbo 是乙個分布式服務治理框架,它連線到 ZooKeeper 上查詢依賴的其他服務的資訊,然後和其他服務建立長連線。當你通過 dubbo 呼...