SpringBoot使用Spring Data JPA 操作 postgreSQL數據庫

什麼是JPA

JPA(Java Persistence API) 和 Spring Data 是兩個範疇的概念。

想必大家都有聽過Hibernate框架。Hibernate是一個ORM框架,而JPA則是一種ORM規範,JPA和Hibernate的關係就像JDBC與JDBC驅動的關係,即JPA制定了ORM規範,而Hibernate是這些規範的實現。

Spring Data 是Spring的一個子項目,不僅支持關係型數據庫,也支持非關係型數據庫。

SpringBoot 整合Spring Data JPA 的步驟如下:

  1. 創建SpringBoot項目,添加PostgreSQL和Spring Data JPA 的
            <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<scope>runtime</scope>
    		</dependency>
  2. 數據庫配置

 在application.properties文件中配置數據庫基本信息以及JPA相關配置:

#數據庫基本信息配置
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.show-sql=true
#JPA相關配置
spring.jpa.database=postgresql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false

     3.創建實體類

@Data
@Entity(name = "t_book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "book_name",nullable = false)
    private String name;
    private String author;
    private Double price;
    @Transient
    private String description;
}
  •  @Entity註解表示該類是一個實體類,表的名稱爲註解中name的值,如果不配置name,表名默認爲類名。
  • 所有的實體類都要有主鍵,@Id註解表示該屬性是一個主鍵,@GeneratedValue註解表示主鍵自動生成,strategy表示主鍵生成策略。
  • 默認情況下,生成的表中字段的名稱就是實體類中屬性的名稱,通過@Column註解可以定製生成的字段屬性,name表示該屬性對應的數據表中字段的名稱,nullable表示該字段非空。
  • @Transient註解表示在生成數據庫中的表時,該屬性可以忽略,即不生成對應的字段。

4. 創建Repository接口 

@Repository
public interface BookRepository extends JpaRepository<Book,Integer> {

    List<Book> getBooksByAuthorStartingWith(String author);

    List<Book> getBooksByPriceGreaterThan(Double price);

    @Query(value = "select * from t_book  where id > :id and author = :author",nativeQuery = true)
    List<Book> getBookByIdAndAuthor(@Param("author") String author, @Param("id") Integer id);

    @Query("select b from t_book b where b.id < ?2 and b.name like %?1%")
    List<Book> getBooksByIdAndName(String name,Integer id);
    
}
  • 自定義BookRepository繼承自JpaRepository。JpaRepository中提供看一些基本的數據操作方法,有基本的增刪改查、分頁查詢、排序查詢等。
  • 既定的方法命名規則不一定滿足所有的開發需求,因此Spring Data JPA 也支持自定義JPQL(Java Persistance Query Language)或者原生SQL。nativeQuery=true表示使用原生的SQL查詢
  • 最後一個方法使用自定義JPQL,這裏使用的列名是屬性的名稱而不是數據庫中列的名稱。

5.創建BookService

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    BookRepository bookRepository;

    @Override
    public void addBook(Book book) {
        bookRepository.save(book);
    }

    @Override
    public List<Book> getBookByIdAndAuthor(String author, Integer id) {
        return bookRepository.getBookByIdAndAuthor(author,id);
    }

    @Override
    public Page<Book> getBookByPage(Pageable pageable) {
        return bookRepository.findAll(pageable);
    }
}

6.創建Controller 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章