Spring Boot + Spring Data JPA + PostgreSQL


最近在用Java重寫之前實習生用.netcore寫的微信后台應用。

規定用Spring Boot框架,PostgreSQL數據庫。之前一直習慣於基於XML的Spring app,也沒用過PostgreSQL,再加上數據庫設計的不好,還沒有任何代碼文檔,一臉的懵逼。。。

這里記錄下在重寫過程中遇到的一些問題,便於后期查閱:

1. PostgreSQL 9.6.6:

(1) 使用pgAdmin4, 首先遇到的問題就是啟動過慢,所占內存大,在連接本地數據庫后執行簡單的select耗時不少。個人認為啟動過慢,所占內存大是pgAdmin4的問題,但執行SQL語句慢,估計是配置的問題,目前還沒有在postgresql.conf中找到對應的配置項

(2) 對表名,列名不區分大小寫,但是卻都轉成小寫再運行sql。這就導致如下的sql,

select * from Question

變成

select * from question

再運行,然后PostgreSQL去找question表,發現沒有(因為建的是Question表...),報錯:

ERROR:  relation "question" does not exist
LINE 1: select * from Question

解決辦法:表名,列名均加上"", 如

select * from "Question"

(3) 因為沒有訪問server上目錄的權限,導致通過pgAdmin沒辦法備份/還原

解決辦法:

  1. 創建各個表

  2. 導出表數據到本地

  3. 導入數據到數據庫表

COPY "Question"("QuestionID","QuestionName","QuestionType","QuestionItem") 
FROM 'C:\Users\~\Question.csv' DELIMITER ',' CSV HEADER;

注意外鍵和數據導入順序。

 

2. Spring Data JPA:

在使用Spring Data JPA之前,用過Hibernate+JPA注解和Mybatis這樣的ORM框架。個人理解Spring Data JPA就是在Hibernate和JPA的基礎上又封裝了一層,定義了像@Query, @Modifying這樣的注解以及CrudRepository這樣的接口,極大方便Dao層的開發。

我把我在開發過程中查找的一些blog放在這里,方便以后查閱。

spring-boot-crudrepository-example

spring data jpa的使用

spring data jpa查詢

JPQL

要是想快速上手,可以考慮直接參照第一篇blog寫。

(1) 在使用Spring Data JPA編寫Dao層時,可以直接定義業務接口,並且只需要繼承CrudRepository或者JpaRepository(后者繼承自前者)就能實現基本的crud操作

(2) JpaRepository相比較於CrudRepository,多了分頁的功能

(3) Spring Data JPA根據方法名及規則,生成SQL語句

(4) JPQL類似Hibernate的HQL

這里我還是得記錄下開發過程中遇到的一對多,多對一的問題和如何使用。

在項目里,可以不使用類似一對多,多對一的注解,但是就得需要在代碼中通過一次變多次SQL查詢 / 寫join SQL語句的方式達到相同的效果,相比之下注解更加簡單。在Spring Data JPA中,@OneToMany, @ManyToOne這樣的關系型注解,說到底還是Hibernate的實現。

 在同一個數據庫字段被多個類屬性映射時,需要設置insertable = false, updateable = false.

 在用Intellij IDEA寫JPQL時,注意不要讓編輯器自帶的JPQL檢查給糊弄了,並不准確,建議關掉JPQL檢查。

3. Spring Boot

沒的說,一堆資料,HERE

 

Done!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM