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!

相关文章
相关标签/搜索