在實際開發過程當中,對數據庫的操做無非就「增刪改查」。就最爲廣泛的單表操做而言,除了表和字段不一樣外,語句都是相似的,開發人員須要寫大量相似而枯燥的語句來完成業務邏輯。html
爲了解決這些大量枯燥的數據操做語句,咱們第一個想到的是使用ORM框架,好比:Hibernate。經過整合Hibernate以後,咱們以操做Java實體的方式最終將數據改變映射到數據庫表中。java
爲了解決抽象各個Java實體基本的「增刪改查」操做,咱們一般會以泛型的方式封裝一個模板Dao來進行抽象簡化,可是這樣依然不是很方便,咱們須要針對每一個實體編寫一個繼承自泛型模板Dao的接口,再編寫該接口的實現。雖然一些基礎的數據訪問已經能夠獲得很好的複用,可是在代碼結構上針對每一個實體都會有一堆Dao的接口和實現。mysql
因爲模板Dao的實現,使得這些具體實體的Dao層已經變的很是「薄」,有一些具體實體的Dao實現可能徹底就是對模板Dao的簡單代理,而且每每這樣的實現類可能會出如今不少實體上。Spring-data-jpa的出現正可讓這樣一個已經很「薄」的數據訪問層變成只是一層接口的編寫方式。好比,下面的例子:spring
public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }
咱們只須要經過編寫一個繼承自JpaRepository
的接口就能完成數據訪問,下面以一個具體實例來體驗Spring-data-jpa給咱們帶來的強大功能。sql
因爲Spring-data-jpa依賴於Hibernate。若是您對Hibernate有必定了解,下面內容能夠絕不費力的看懂並上手使用Spring-data-jpa。若是您仍是Hibernate新手,您能夠先按以下方式入門,再建議回頭學習一下Hibernate以幫助這部分的理解和進一步使用。數據庫
在pom.xml
中添加相關依賴,加入如下內容:springboot
<dependency <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
在application.xml
中配置:數據庫鏈接信息(如使用嵌入式數據庫則不須要)、自動建立表結構的設置,例如使用mysql的狀況以下:服務器
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.properties.hibernate.hbm2ddl.auto
是hibernate的配置屬性,其主要做用是:自動建立、更新、驗證數據庫表結構。該參數的幾種配置以下:session
create
:每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。create-drop
:每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。update
:最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等應用第一次運行起來後纔會。validate
:每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。至此已經完成基礎配置,若是您有在Spring下整合使用過它的話,相信你已經感覺到Spring Boot的便利之處:JPA的傳統配置在persistence.xml
文件中,可是這裏咱們不須要。固然,最好在構建項目時候按照以前提過的最佳實踐的工程結構來組織,這樣以確保各類配置都能被框架掃描到。app