現在網路上充斥著Jpa和Mybatis的一些對比。其實狹義上來說是hibernate和mybatis之間的比較。
例如:為什麼感覺國內比較流行的 mybatis 在國外好像沒人用的樣子?
下面是一些截圖
我不是一個喜歡評論的人,但這次我忍不住了。
- hibernate 歷史悠久並不代表過時,mybatis 這種方式就是未來嗎?肯定不是。資料庫就是用來存資料的,聯表查詢一大堆只能說明資料結構設計是有問題的,只是不願承認或者心裡沒底而已,竟然還有人為了排序篩選資料,把複雜的運算放到關係型資料庫去做,咋不上天呀,你這是叫格力的倉管大爺去替你拿材料,順便讓他根據各種因子計算新型壓縮機的功率損耗。資料分析就不應該讓關係型資料庫做,這叫各司其職。
- 這條語句的邏輯很有意思:
UPDATE items SET price = 11 WHERE id = 1111
,難道更新資料的時候不需要先取出資料再更新嗎?對了,但凡有一點點的併發需求,無論是樂觀鎖還是悲觀鎖,都需要查詢到最新的資料不是嗎,悲觀的加鎖,樂觀的核對 Version。至於全欄位回寫資料庫,只是不知道有這種操作而已,hibernate 明明可以指定區域性欄位更新的好嗎 - 報表邏輯真實存在!這也許是一種讓程式設計師通過關聯式資料庫把資料分析這活也幹了的一種藉口吧,程式設計師可不要樂在其中哦
- 微服務都大行其道了,還在狂釘外來鍵,一大堆聯表查詢,sql 語句多達幾百行,想想都忍不住噗。定義好業務邊界,拆分成獨立子系統吧,不然到了一定規模,別說 hibernate 幹不了這活,mybatis 手寫 sql 又咋樣,同樣幹不了,不信給某個大廠的高流量資料釘個外來鍵試試,看他們技術總監會不會拿刀追。小公司規模往往遠沒有達到那種撐不住的程度,大廠的高訪問量業務資料早已不是這裡逼逼的聯表查詢了。。。
- 如果公司的資料庫要從 mysql 轉移到 Oracle、MongoDB、sqlserver 或者其他的資料庫,用 mybatis 的,就問你慌不慌吧。spring 官方支援 jpa 並不是沒有依據的,jpa 遮蔽了底層差異。
既然 Jpa 用起來省心,沒必要硬跟某些大廠的步伐,一步兩步,似魔鬼的步伐!
就像淘寶技術十年裡說的:
如使用者模組,老的 member.taobao.com 繼續維護,不新增新功能,新功能在新的模組上開發,跟老的模組共用一個資料庫,開發完畢之後放到不同的應用叢集上,另開一個域名 member1.taobao.com ,同時再替換老的功能,替換一個,就把老的模組上的功能關閉一個,逐漸把使用者引導到 member1.taobao.com ,等所有的功能都替換完之後,關閉 member.taobao.com 上。從設計上來看,這個 member1 的二級域名應該是一個過渡狀態,但我們把 member 域名的程式碼下線以後,發現很難把 member1 切換回 member,因為有些地方把連結寫死了,於是後來很長時間裡我們都是在用 member1.taobao.com 這樣奇怪的域名。一年後,有另外一家網際網路公司開始做電子商務了,我們發現他們的域名也叫 member1.xx.com 、auction1.xx.com ,複製得毫無保留,我們只能會心一笑。
沒錯,我用JPA,我也很喜歡JPA的設計哲學。但是同時我覺得Mybatis也是一個很好的框架,高效地解決了很多問題,滿足了很多企業的需求,給一個大大的贊。
技術只是解決問題的一種方式、一種工具,選擇哪種技術因人而異,存在即合理。