摘要:要是緊急排查個(gè)問題,媽蛋雖然有很多好處,比如和底層的無關(guān)。你的公司如果有,是不允許你亂用的。
知乎看到問題《SpringBoot開發(fā)使用Mybatis還是Spring Data JPA??》,順手一答,討論激烈。我實(shí)在搞不懂spring data jpa為啥選了hibernate作為它的實(shí)現(xiàn),是“Gavin King”的裙帶關(guān)系么?
DAO層搞來搞去,從jdbc到hibernate,從toplink到j(luò)do,到現(xiàn)在MyBatis勝出,是有原因的。
目前,一些狗屁培訓(xùn)公司,還有一些網(wǎng)絡(luò)課程,包括一些洋課程,為了做項(xiàng)目簡單,很多會(huì)使用jpa。但到了公司發(fā)現(xiàn)根本就不是這樣,這就是理論和現(xiàn)實(shí)的區(qū)別。
頂著被罵的風(fēng)險(xiǎn),我整理發(fā)出來。這可不是爭論php好還是java好性質(zhì)了。
忠告:精力有限,一定要先學(xué)MyBatis啊。jpa那一套,表面簡單而已。
如果你經(jīng)歷過多個(gè)公司的產(chǎn)品迭代,尤其是復(fù)雜項(xiàng)目,你就會(huì)發(fā)現(xiàn)Spring Data JPA這種東西是多么的不討好。說實(shí)話,Mybatis的功能有時(shí)候都嫌多,有些純粹是畫蛇添足。
jpa雖然是規(guī)范,但和hibernate這種ORM是長得比較像的(不說一些特殊場景的用法)。
Spring Data JPA 是個(gè)玩具,只適合一些簡單的映射關(guān)系。也不得不提一下被人吹捧的querydsl,感覺有些自作聰明的討巧。實(shí)在不想為了一個(gè)簡單的DAO層,要學(xué)一些費(fèi)力不討好的東西。
Listpersons = queryFactory.selectFrom(person) .where(person.children.size().eq( JPAExpressions.select(parent.children.size().max()) .from(parent))) .fetch();
看看上面的查詢語句,完全不如普通SQL表達(dá)的清晰。要是緊急排查個(gè)問題,媽蛋...
jpa雖然有很多好處,比如和底層的SQL無關(guān)。但我覺得Spring Data JPA有以下壞處:
1、 屏蔽了SQL的優(yōu)雅,發(fā)明了一種自己的查詢方式。這種查詢方式并不能夠覆蓋所有的SQL場景。
2、 增加了代碼的復(fù)雜度,需要花更多的時(shí)間來理解DAO
3、DAO操作變的特別的分散,分散到多個(gè)java文件中,或者注解中(雖然也支持XML)。如果進(jìn)行一些掃描,或者優(yōu)化,重構(gòu)成本大
4、不支持復(fù)雜的SQL,DBA流程不好切入
Mybatis雖然也有一些問題,但你更像是在寫確切的SQL。它比Spring Data JPA更加輕量級(jí)。
你只要在其他地方調(diào)試好了SQL,只需要寫到配置文件里,起個(gè)名字就可以用了,少了很多燒腦的轉(zhuǎn)換過程。
Mybatis完全能夠應(yīng)對(duì)工業(yè)級(jí)的復(fù)雜SQL,甚至存儲(chǔ)過程(不推薦)。個(gè)人認(rèn)為Mybatis依然是搞復(fù)雜了,它其中還加了一些類似if else的編程語言特性。
你的公司如果有DBA,是不允許你亂用SQL的。用Mybatis更能切入到公司的流程上。
所以我認(rèn)為:玩具項(xiàng)目或者快速開發(fā),使用Spring Boot JPA。反之,Mybatis是首選。
一些有用的評(píng)論你說的if else是指的SQL拼接吧,這可是MyBatis的重要功能之一,學(xué)起來一點(diǎn)兒也不復(fù)雜好嗎?
最近也在研究持久層,可以充分利用這個(gè)jpa這個(gè)玩具,兩者結(jié)合是不錯(cuò)的選擇,jpa基本的單表操作,mybatis做復(fù)雜查詢,開發(fā)效率高,降低sql維護(hù)成本,也為優(yōu)化留下空間,當(dāng)然這需要對(duì)spring-data-jpa做一些擴(kuò)展
查詢直接sql,其他的還是orm方便
mybatis主要是原生sql,對(duì)于其他沒學(xué)習(xí)過jpa的開發(fā)人員而言降低了學(xué)習(xí)維護(hù)門檻,而且說真的jpa寫了個(gè)鍋你去追其實(shí)還是挺頭疼的...
mybatis-plus整合之后基本curd不用糾結(jié)了,很多對(duì)對(duì)象操作然后直接save就好。復(fù)雜場景、聯(lián)表就直接用原生sql就好,至于性能問題可以用sqlAdvice優(yōu)化下。
jdbc template+代碼生成器,更簡單更高效
jpa這玩意,寫一個(gè)簡單的數(shù)據(jù)庫操作,就比如說單表的操作,很好用。如果是多表,那就算了吧
spring boot 推薦jpa,知道為什么嗎
native=true 想用原生查詢也沒人攔著你啊
你好像不是很懂hibernate和jpa…
不知道你是否清楚 jpa,hibernate,spring data jpa,還有querydsl 之間的關(guān)系。
總有一天你會(huì)知道數(shù)據(jù)庫優(yōu)先和程序優(yōu)先的區(qū)別
jpa還有一個(gè)好處,那就是帥鍋啊
END來,越年輕越狂妄的家伙們,來噴我啊。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74763.html
摘要:一從零搭建環(huán)境本次我使用的是編輯器來搭建和環(huán)境首先,我們?cè)谛陆?xiàng)目的時(shí)候,選擇,然后就行了??梢钥闯觯敬蔚陌姹緸?。這是一個(gè)非常好用的插件,有了它我們可以不用寫繁瑣的方法。非常適合我們做一些簡答的測試和小功能。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家對(duì)SpringB...
摘要:而本身也是基于的實(shí)現(xiàn)。有點(diǎn)類似于實(shí)現(xiàn)類和接口的關(guān)系。而是在兩者的肩膀上更近一步,提供了更加方便的操作。順帶一說,與兩者不同,它不基于協(xié)議,而是直接通過操作語句來操作數(shù)據(jù)庫。 人生苦短,我用 SDJ! Spring Data JPA(SDJ)在我看來,相比于 MyBatis 和 Hibernate 最大的好處就在于,它太方便了!如果你的業(yè)務(wù)邏輯并不需要控制細(xì)膩度很高的情況下(SDJ 在我...
摘要:我將舉幾個(gè)栗子,來詳細(xì)的說一下我自己在使用多表復(fù)雜查詢的場景和想法。名字手機(jī)號(hào)這是一個(gè)單表的多條件復(fù)雜查詢,由于是在幾個(gè)屬性中進(jìn)行篩選,其中的屬性的個(gè)數(shù)不知道有多少個(gè),所以只需要利用查詢就可以很方便的實(shí)現(xiàn)這個(gè)需求。 最近工作中由于要求只能用hibernate+jpa 與數(shù)據(jù)庫進(jìn)行交互,在簡單查詢中,jpa繼承CrudRepository接口 ,然后利用jpa的方法命名規(guī)范進(jìn)行jpql查...
摘要:不管是還是,表之間的連接查詢,被映射為實(shí)體類之間的關(guān)聯(lián)關(guān)系,這樣,如果兩個(gè)實(shí)體類之間沒有實(shí)現(xiàn)關(guān)聯(lián)關(guān)系,你就不能把兩個(gè)實(shí)體或者表起來查詢。 因?yàn)轫?xiàng)目需要選擇數(shù)據(jù)持久化框架,看了一下主要幾個(gè)流行的和不流行的框架,對(duì)于復(fù)雜業(yè)務(wù)系統(tǒng),最終的結(jié)論是,JOOQ是總體上最好的,可惜不是完全免費(fèi),最終選擇JDBC Template。 Hibernate和Mybatis是使用最多的兩個(gè)主流框架,而JOO...
摘要:所以悲觀鎖是限制其他線程,而樂觀鎖是限制自己,雖然他的名字有鎖,但是實(shí)際上不算上鎖,只是在最后操作的時(shí)候再判斷具體怎么操作。悲觀鎖和樂觀鎖比較悲觀鎖適合寫多讀少的場景。 最近在公司的業(yè)務(wù)上遇到了并發(fā)的問題,并且還是很常見的并發(fā)問題,算是低級(jí)的失誤了。由于公司業(yè)務(wù)相對(duì)比較復(fù)雜且不適合公開,在此用一個(gè)很常見的業(yè)務(wù)來還原一下場景,同時(shí)介紹悲觀鎖和樂觀鎖是如何解決這類并發(fā)問題的。 公司業(yè)務(wù)就是...
閱讀 1038·2021-11-23 09:51
閱讀 2365·2021-10-08 10:22
閱讀 2657·2021-09-29 09:35
閱讀 876·2021-09-22 15:20
閱讀 2873·2019-08-30 15:53
閱讀 2427·2019-08-30 13:55
閱讀 1114·2019-08-29 17:27
閱讀 2884·2019-08-29 17:26