一、JPA介紹java
JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它爲Java開發人員提供了一種對象/關聯映射工具來管理Java應用中的關係數據。它的出現主要是爲了簡化現有的持久化開發工做和整合ORM技術mysql
Spring data jpa是在JPA規範下提供了Repository層的實現。雖然ORM框架都實現了JPA規範,可是在不一樣的ORM框架之間切換仍然須要編寫不一樣的代碼,而經過使用Spring data jpa可以方便你們在不一樣的ORM框架之間進行切換而不要更改代碼,使代碼看上去更加優雅,而且spring data jpa 對Repository層封裝的很好,也省去了很多的麻煩。git
二、springboot集成github
pom依賴:spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
配置文件添加:sql
#jpa配置 jpa: database: mysql show-sql: true hibernate: ddl-auto: update properties: hibernate.format_sql: true hibernate.naming.physical-strategy: org.hibernate.config.model.naming.PhysicalNamingStrategyStandardImpl hibernate.cache.use_second_level_cache: false hibernate.search.default.directory_provider: filesystem hibernate.search.default.indexBase: ${user.dir}/indexes
部分說明:數據庫
hibernate.hbm2ddl.auto參數的做用主要用於:自動建立|更新|驗證數據庫表結構。
create:每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。
create-drop :每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。
update:最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據 model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等 應用第一次運行起來後纔會。
validate :每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。
關鍵代碼
package com.example.springbootjpa.repository; import com.example.springbootjpa.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserRepository extends JpaRepository<User, Integer> { List<User> findAllBy(); User findByUserId(Integer userId); //@Query 註解,並提供一個查詢語句做爲參數,Spring Data JPA 在建立代理對象時,便以提供的查詢語句來實現其功能。 @Query("from User where user_name = :username") User findUser(@Param("username") String name); }
Spring Data JPA 在後臺爲持久層接口建立代理對象時,會解析方法名字,並實現相應的功能。除了經過方法名字之外,它還能夠經過以下兩種方式指定查詢語句: Spring Data JPA 能夠訪問 JPA 命名查詢語句。開發者只須要在定義命名查詢語句時,爲其指定一個符合給定格式的名字,Spring Data JPA 便會在建立代理對象時,使用該命名查詢語句來實現其功能。
測試代碼:
@Controller public class UserController { @Autowired private UserService userService; @GetMapping(value = "listUser") @ResponseBody public List<User> listUser() { User byUserId = userService.findByUserId(1); User fjw = userService.findUser("hzq"); return userService.listUser(); } }
最終測試查詢sql以下:
Hibernate: select user0_.user_id as user_id1_0_, user0_.user_name as user_nam2_0_ from user user0_ where user0_.user_id=? Hibernate: select user0_.user_id as user_id1_0_, user0_.user_name as user_nam2_0_ from user user0_ where user_name=? Hibernate: select user0_.user_id as user_id1_0_, user0_.user_name as user_nam2_0_ from user user0_
源碼參照:springboot集成JPAspringboot