SpringData JPA也能寫sql,為什麼還要用mybatis?

寇亞君


用mybatis就是為了照顧大多數[機智][機智][機智]

完了,我會被噴死[捂臉][捂臉][捂臉]


我是董郎啊


頭條上問這種問題也是醉了。。看到了順便答一波,瞎扯的人太多。

國內的設計思路是table driven的,簡單來說,用數據表定邏輯,用模型做實現,實際這是和麵向對象相反的思路。mybatis所謂的靈活性在大多數工程師手裡就是不用考慮模型如何設計,“反正我用原生sql都能解決”,模型設計的爛的一逼,全靠sql去修修補補。而jpa是完全object driven的思路,前期設計的缺陷會很制約後續開發,並且不同的數據庫可做不同的實現(實際是哪怕是redis也是一樣的)。回答幾個常見sb問題。

1.jpa表連接行為不確定,難以控制。

你確定你用過spring data jpa?不知道有EntityGraph ?傻瓜到這種程度了還能咋的。

2.jpa子查詢不好實現。

我估計你都沒用過吧?spring data jpa的子查詢既可以單獨定義視圖,也可以做subquery,甚至直接用jpql。

3.jpa不好優化。

我真不信99%得優化能超過spring data jpa的優化,尤其是一般般的程序員能別把優化放嘴上麼,連mysql的鎖都搞不清楚,表設計的跟坨屎一樣還天天原生sql,覺得自己很牛逼麼?jpa是可以把表屬性反應到對象的,天然就有運行時優化的底子在,ORM能發展的空間太大了,稍微有點技術認知的都知道ORM會優勢越來越大。稍微有些經歷的程序員都知道現在是先說好維護才說其他的,能解決性能的方法太多了好麼。

最後,難道不知道現在提倡ORM+CQRS麼?請問,有啥複雜的解決不了,都不需要native sql介入好麼。


NovRain61


個人認為mybatis可以做到代碼與SQL解耦,單表查詢用jpa倒是沒什麼,要是寫統計或者複雜查詢之類的jpa就不太友好了,需要代碼邏輯跟SQL耦合起來,代碼可讀性和可維護性不好。最近基於jdbcTemplate做了一套自定義動態查詢,也將sql放在了配置文件中,也是為了降耦和提高代碼可讀性,還可以根據業務場景定製很多功能。


Java修煉者


自己寫項目用SpringBoot,JPA的真的舒服,更舒服還是用REST,控制層和業務層都省了,直接在數據訪問層生成接口,自己做項目的話基本上都是單表查詢,很少用到多表,更不用說會用到動態sql。吐槽下,早就噁心死了SSM框架的那一套,配置一大堆東西,自己都看不懂


c染我素衣白裳


spring data jpa在複雜查詢上可以使用query+new 構造方法或者視圖的方式去查詢,至於說效率,我想應該是在POJO中使用@OneToMany或者@ManyToMany的註解導致的,一般情況下儘量使用@ManyToOne就可以了


分享到:


相關文章: