????????????????????????????????????????Spring Boot 使用Spring-data-jpa簡化數(shù)據(jù)訪問層
主目錄:http://www.spring4all.com/article/246
轉(zhuǎn)載于:http://www.spring4all.com/article/252
jpa文檔:https://docs.spring.io/spring-data/data-jpa/docs/current/api/
在實際開發(fā)過程中,對數(shù)據(jù)庫的操作無非就“增刪改查”爹袁。就最為普遍的單表操作而言,除了表和字段不同外展蒂,語句都是類似的,開發(fā)人員需要寫大量類似而枯燥的語句來完成業(yè)務(wù)邏輯;
為了解決這些大量枯燥的數(shù)據(jù)操作語句苔咪,我們第一個想到的是使用ORM框架,比如:Hibernate柳骄。通過整合Hibernate之后团赏,我們以操作Java實體的方式最終將數(shù)據(jù)改變映射到數(shù)據(jù)庫表中;
為了解決抽象各個Java實體基本的“增刪改查”操作,我們通常會以泛型的方式封裝一個模板Dao來進行抽象簡化耐薯,但是這樣依然不是很方便舔清,我們需要針對每個實體編寫一個繼承自泛型模板Dao的接口,再編寫該接口的實現(xiàn)曲初。雖然一些基礎(chǔ)的數(shù)據(jù)訪問已經(jīng)可以得到很好的復(fù)用体谒,但是在代碼結(jié)構(gòu)上針對每個實體都會有一堆Dao的接口和實現(xiàn);
由于模板Dao的實現(xiàn),使得這些具體實體的Dao層已經(jīng)變的非尘势牛“薄”抒痒,有一些具體實體的Dao實現(xiàn)可能完全就是對模板Dao的簡單代理,并且往往這樣的實現(xiàn)類可能會出現(xiàn)在很多實體上颁褂。Spring-data-jpa的出現(xiàn)正可以讓這樣一個已經(jīng)很“薄”的數(shù)據(jù)訪問層變成只是一層接口的編寫方式故响。比如傀广,下面的例子:
我們只需要通過編寫一個繼承自JpaRepository的接口就能完成數(shù)據(jù)訪問,下面以一個具體實例來體驗Spring-data-jpa給我們帶來的強大功能;
由于Spring-data-jpa依賴于Hibernate彩届。如果您對Hibernate有一定了解伪冰,下面內(nèi)容可以毫不費力的看懂并上手使用Spring-data-jpa。如果您還是Hibernate新手樟蠕,您可以先按如下方式入門贮聂,再建議回頭學(xué)習(xí)一下Hibernate以幫助這部分的理解和進一步使用;
工程配置
在pom.xml中添加相關(guān)依賴,加入以下內(nèi)容:
在application.xml中配置:數(shù)據(jù)庫連接信息(如使用嵌入式數(shù)據(jù)庫則不需要)寨辩、自動創(chuàng)建表結(jié)構(gòu)的設(shè)置吓懈,例如使用mysql的情況如下:
spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
創(chuàng)建實體
創(chuàng)建一個User實體,包含id(主鍵)捣染、name(姓名)骄瓣、age(年齡)屬性,通過ORM框架其會被映射到數(shù)據(jù)庫表中耍攘,由于配置了hibernate.hbm2ddl.auto榕栏,在應(yīng)用啟動的時候框架會自動去數(shù)據(jù)庫中創(chuàng)建對應(yīng)的表:
創(chuàng)建數(shù)據(jù)訪問接口
下面針對User實體創(chuàng)建對應(yīng)的Repository接口實現(xiàn)對該實體的數(shù)據(jù)訪問,如下代碼:
在完成了上面的數(shù)據(jù)訪問接口之后蕾各,按照慣例就是編寫對應(yīng)的單元測試來驗證編寫的內(nèi)容是否正確扒磁。這里就不多做介紹,主要通過數(shù)據(jù)操作和查詢來反復(fù)驗證操作的正確性: