Spring Boot + Spring Data JPA + PostgreSQL

最近在用Java重寫以前實習生用.netcore寫的微信後臺應用。html

規定用Spring Boot框架,PostgreSQL數據庫。以前一直習慣於基於XML的Spring app,也沒用過PostgreSQL,再加上數據庫設計的很差,尚未任何代碼文檔,一臉的懵逼。。。spring

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

1. PostgreSQL 9.6.6:數據庫

(1) 使用pgAdmin4, 首先遇到的問題就是啓動過慢,所佔內存大,在鏈接本地數據庫後執行簡單的select耗時很多。我的認爲啓動過慢,所佔內存大是pgAdmin4的問題,但執行SQL語句慢,估計是配置的問題,目前尚未在postgresql.conf中找到對應的配置項微信

(2) 對錶名,列名不區分大小寫,可是卻都轉成小寫再運行sql。這就致使以下的sql,app

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沒辦法備份/還原spring-boot

解決辦法:

  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!

相關文章
相關標籤/搜索