【持久層框架】- SpringData - JPA( 二 )

  • @Table(name = "sys_user"):指明數據庫中表的名字實現實體與數據表映射 。
  • @Id:聲明主鍵 。
  • @Column(name = "user_id"):指明是表中的哪個字段 。
  • @GeneratedValue(strategy = GenerationType.IDENTITY): GenerationType.IDENTITY:實現自增
  • 啟動項目當我們啟動項目的時候,數據庫會自動創建表結構 。
    【持久層框架】- SpringData - JPA

    文章插圖
    看一下數據庫,發現表已經自動創建
    【持久層框架】- SpringData - JPA

    文章插圖
    對表操作增加數據首先需要創建UserRepository接口,要通過繼承JpaRepository<T, ID>,提供實體類和id的類型 。
    /** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {}編寫測試類通過調用save方法即可完成保存操作
    package com.jpa.demo.test;import com.jpa.demo.domain.User;import com.jpa.demo.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.junit.jupiter.api.Test;/** * @author: lyd * @description: 測試類 * @Date: 2022/10/2 */@SpringBootTestpublic class JpaTest {@Autowiredprivate UserRepository userRepository;@Testvoid InsertTest() {User user = new User();user.setNickName("怒放吧德德");user.setUsername("lyd_code");user.setPassword("lyd_open");User save = userRepository.save(user);System.out.println(save);}}運行結果
    【持久層框架】- SpringData - JPA

    文章插圖
    查看數據通過findAll就可以直接獲取得到所有的數據 。
    @Testvoid QueryTest() {List<User> all = userRepository.findAll();all.forEach(System.out::println);}就能在控制臺中看到:
    【持久層框架】- SpringData - JPA

    文章插圖
    分頁查找jpa也是實現了分頁操作的方法 。通過PageRequest.of(0,1)可以完成分頁 。
    @Testvoid PageRequestTest() {userRepository.findAll(PageRequest.of(0,1)).forEach(System.out::println);}其底層對數據庫的操作就會加上limit.
    【持久層框架】- SpringData - JPA

    文章插圖
    根據ID查找返回是Optional類,User類型的數組
    @Testvoid FindByIdTest() {Optional<User> user = userRepository.findById(1L);System.out.println(user);}
    Java8 新特性Optional類Optional 類新特性
    Optional 類是一個可以為null的容器對象如果值存在則isPresent()方法會返回true,調用get()方法會返回該對象Optional 是個容器:它可以保存類型T的值,或僅保存null 。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測Optional 類的引入很好的解決空指針異常
    方法命名規則自定義查詢方法命名規則查詢就是根據方法的名字,就能創建查詢 。需要按照Spring Data JPA提供的方法命名規則定義方法的名稱,就可以完成查詢工作 。Spring Data JPA在程序執行的時候會根據方法名稱進行解析,并自動生成查詢語句進行查詢 。通過jpa的規則要求來實現自己命名查詢 。按照Spring Data JPA 定義的規則,查詢方法以findBy開頭,涉及條件查詢時 , 條件的屬性用條件關鍵字連接,要注意的是:條件屬性首字母需大寫 ??蚣茉谶M行方法名解析時,會先把方法名多余的前綴截取掉 , 然后對剩下部分進行解析 。
    編寫Repository根據一定的規則來編寫方法命名 。jpa會自動識別方法名稱進行操作 。
    package com.jpa.demo.repository;import com.jpa.demo.domain.User;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.stereotype.Repository;import java.util.List;/** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {//根據nickname查詢List<User> findAllByNickName(String str);}通過測試可以看到如下結果:
    【持久層框架】- SpringData - JPA

    文章插圖
    在編寫repository的時候會有一些規則提示,也就是只有符合這些規則才能夠被識別 。這里只是展現了findxxx,實際上還有許多 。
    【持久層框架】- SpringData - JPA

    文章插圖
    具體的關鍵字,使用方法和生產成SQL如下表所示
    【持久層框架】- SpringData - JPA

    推薦閱讀