zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/hello-yz/p/9219711.html
Copyright © 2011-2022 走看看