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
要是想快速上手,可以考虑直接参照第一篇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!
最新文章
- 神盾解密工具 之 解密 “ PHP 神盾解密工具 ”
- Codeforces Round #361 Jul.6th A题 ☺译
- [转] ";self = [super init]";的解释与潜藏bug
- HackerRank ";Flatland Space Stations";
- ssh: command not found的解决办法
- Materialize - 响应式 Material Design 框架
- eclipse maven 插件 安装 和 配置
- SQL SERVER 2008 如何查询含有某关键词的表
- Android Studio 单刷《第一行代码》系列目录
- DB天气安卓客户端测试计划
- 获取select下拉列表选中的值
- java中间缓存变量机制
- LeetCode(117):填充同一层的兄弟节点 II
- adb devices unauthorized解决办法
- 学JS的心路历程-正规表达式Regular Expression
- canvas-圆弧形可拖动进度条
- Java中-classpath和路径的使用
- bootStrap的小知识
- 基于docker 搭建Elasticsearch6.2.4(centos)
- 通过源码看原理之 selenium