現在網絡上充斥着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也是一個很好的框架,高效地解決了很多問題,滿足了很多企業的需求,給一個大大的贊。
技術只是解決問題的一種方式、一種工具,選擇哪種技術因人而異,存在即合理。