1. 程式人生 > >springboot集成Spring Data JPA數據查詢

springboot集成Spring Data JPA數據查詢

服務器 find 管理 system 關系 git 它的 pos 解析

1、JPA介紹

JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它為Java開發人員提供了一種對象/關聯映射工具來管理Java應用中的關系數據。它的出現主要是為了簡化現有的持久化開發工作和整合ORM技術

Spring data jpa是在JPA規範下提供了Repository層的實現。雖然ORM框架都實現了JPA規範,但是在不同的ORM框架之間切換仍然需要編寫不同的代碼,而通過使用Spring data jpa能夠方便大家在不同的ORM框架之間進行切換而不要更改代碼,使代碼看上去更加優雅,並且spring data jpa 對Repository層封裝的很好,也省去了不少的麻煩。

2、springboot集成

  pom依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

  配置文件添加:

#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集成JPA

springboot集成Spring Data JPA數據查詢