SpringBoot數據訪問(二) SpringBoot整合JPA

JPA簡介

Spring Data JPA是Spring Data大家族的一部分,它可以輕鬆實現基於JPA的存儲庫。該模塊用於增強支持基於JPA的數據訪問層,它使我們可以更加容易地構建使用數據訪問技術的Spring驅動的應用程序。

對於普通的開發者而言,自己實現應用程序的數據訪問層是一件很麻煩的時間,開發者必須編寫大量樣板代碼來執行簡單的查詢以及執行分頁和統計,Spring Data JPA旨在通過將工作量減少到實際需要的程度來顯著改進數據訪問層的實現。作為開發人員,我們只需要編寫存儲庫接口(Repository接口),包括自定義查詢方法,其餘的工作,Spring將自動幫我們完成。

JPA特性

  • 對基於Spring和JPA的存儲庫構建的完善支持。
  • 支持Querydsl查詢框架,從而支持類型安全的JPA查詢。
  • 域類的透明審計。
  • 具備分頁支持、動態查詢執行、集成自定義數據訪問代碼的能力。
  • 在啟動時驗證帶@Query註解的查詢。
  • 支持基於XML的實體映射。
  • 通過引入@EnableJpaRepositories註解來實現基於JavaConfig的存儲庫配置。

SpringBoot整合JPA

(1)添加Spring Data JPA依賴啟動器

 

引入這兩個依賴器創建項目,在項目pom.xml文件會出現以下依賴:

(2)編寫ORM實體類

package com.hardy.springbootdatajpa.entity;

import javax.persistence.*;

/**
 * @Author: HardyYao
 * @Date: 2021/6/13
 */
@Entity(name = "t_comment") // 設置ORM實體類,並指定映射的表名
public class Comment {

    @Id // 映射對應的主鍵id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 設置主鍵自增策略
    private Integer id;

    private String content;

    private String author;

    @Column(name = "a_id")  // 指定映射的表字段名
    private Integer aId;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Integer getaId() {
        return aId;
    }

    public void setaId(Integer aId) {
        this.aId = aId;
    }

    @Override
    public String toString() {
        return "Comment{" +
                "id=" + id +
                ", content='" + content + '\'' +
                ", author='" + author + '\'' +
                ", aId=" + aId +
                '}';
    }
}

(3)編寫Repository接口

package com.hardy.springbootdatajpa.repository;

import com.hardy.springbootdatajpa.entity.Comment;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @Author: HardyYao
 * @Date: 2021/6/13
 */
public interface CommentRepository extends JpaRepository<Comment,Integer> {

}

(4)編寫配置文件

# MySQL數據庫連接配置
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

(5)測試

編寫測試方法:

package com.hardy.springbootdatajpa;

import com.hardy.springbootdatajpa.entity.Comment;
import com.hardy.springbootdatajpa.repository.CommentRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Optional;

@SpringBootTest
class SpringbootdataJpaApplicationTests {

    @Autowired
    private CommentRepository repository;

    @Test
    public void selectComment() {
        Optional<Comment> optional = repository.findById(1);
        if (optional.isPresent()) {
            System.out.println(optional.get());
        }
        System.out.println();
    }

}

打印測試結果: