likes
comments
collection
share

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

作者站长头像
站长
· 阅读数 75

🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升。

本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

  1. 前言🔥

        在如今的众多关系型数据库中,热门开源产品是需要有一定了解的;其中一个是MySQL,想必跟随bug菌学习的同学们都不陌生,因为前面几乎所有的Spring Boot教程都是结合关系型数据库MySQL数据库来做的演示。而今天我要给同学们介绍另外一个开源关系型数据库:PostgreSQL,以及它在Spring Boot中是如何被集成并使用的?我都会一一讲解。

        那么,这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!! 

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

2. 环境说明🔥

本地的开发环境:

  • 开发工具:IDEA 2021.3
  • JDK版本: JDK 1.8
  • Spring Boot版本:2.3.1 RELEASE
  • Maven版本:3.8.2

3. 正文🔥 

3.1 PostgreSQL简介

        虽然MySQL与PostgreSQL都是免费、开源、强大、且功能丰富的数据库,但是在学习PostgreSQL数据库之前,我们总会将其与MySQL数据库进行一番对比。MySQL自称是最流行的开源数据库,而PostgreSQL标榜自己是最先进的开源数据库,那么PostgreSQL到底有多先进呢?下面就让我们一起来认识一下。

        PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统,是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。

3.2 PostgreSQL的优势

        既然与MySQL同为关系型数据库,那在什么场景选择MySQL,什么场景选择PostgreSQL呢?这是我们需要去思考的点,PostgreSQL对比 MySQL来说,都有哪些优势,如果你有这些需求,那么选择PostgreSQL肯定优于MySQL,反之则MySQL数据库更佳。

接下来我给同学们大概总结下PostgreSQL都有那些优势:

  • 支持存储一些特殊的数据类型,比如:array、json、jsonb等。
  • 对地理信息的存储与处理有更好的支持,所以它可以成为一个空间数据库,更好的管理数据测量和几何拓扑分析。
  • 可以快速构建REST API,通过PostgREST可以方便的为任何PostgreSQL数据库提供RESTful API的服务。
  • 支持树状结构,可以更方便的处理具备此类特性的数据存储。
  • 外部数据源支持,可以把MySQL、Oracle、CSV、Hadoop等当成自己数据库中的表来进行查询。
  • 对索引的支持更强,PostgreSQL支持 B-树、哈希、R-树和 Gist 索引。而MySQL取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。
  • 事务隔离更好,MySQL 的事务隔离级别repeatable read并不能阻止常见的并发更新,得加锁才可以,但悲观锁会影响性能,手动实现乐观锁又复杂。而 PostgreSQL 的列里有隐藏的乐观锁 version 字段,默认的 repeatable read 级别就能保证并发更新的正确性,并且又有乐观锁的性能。
  • 时间精度更高,可以精确到秒以下。
  • 字符支持更好,MySQL里需要utf8mb4才能显示emoji,PostgreSQL没这个坑。
  • 存储方式支持更大的数据量,PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
  • 序列支持更好,MySQL不支持多个表从同一个序列中取id,而PostgreSQL可以。
  • 增加列更简单,MySQL表增加列,基本上是重建表和索引,会花很长时间。PostgreSQL表增加列,只是在数据字典中增加表定义,不会重建表。

        总而言之,很多时候公司来择选,对某个软件使用的熟练程度要比特性上的原因更重要。比如很多公司喜欢使用PostgreSQL,因为它的可靠性好,在保护数据方面很擅长,而且是个社区项目,不会陷入厂商的牢笼之中;但MySQL更加灵活,提供了更多选项来针对不同的任务进行裁剪。所以,各有千秋,并不存在哪一个数据库能够适用于所有情况。

3.3 下载与安装

        这里针对Windows10系统为例,下载PostgreSQL及如何进行安装,如下是官网版本下载截图,为了避免与Spring Boot存在版本兼容问题,我们这里就选用PostgreSQL13.11版本来进行案例演示。

3.3.1 官网下载

        打开官网下载链接,然后选择PostgreSQL13.11 点击Windows x86-64 进行下载。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 3.3.2 安装

        下载完后,进行PostgreSQL的安装。这里我就不一一演示了,

其中安装路径及设置数据库密码,这里我们优先选择存放在非C盘位置。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 接着设置数据库密码,我们默认123456 ;毕竟好记。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

        然后一路next即可,端口号【5432】你们设置默认。 

        最后点击Finish即可完成安装。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 3.3.3 打开pgAdmin4

        稍等几分钟后即可安装完成,然后从[开始]找到【PostgreSQL13】附带有个pgAdmin4。因为安装PostgreSQL客户端就自带了界面化的管理工具,所以说如果你用过MySql等任何关系型数据库的话,基本上你不用怎么入门学习,直接上手操作。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

         然后选择PostgreSQL13,这里输入你安装时设置的密码【123456】,左下角勾选上【Save Password】,这样每次就不需要额外输入密码了。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

然后点击【OK】即可。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 如上就已经完全安装完成了,可供项目连接使用了。

4.Spring Boot中集成与使用🔥

        在你的本地安装好了PostgreSQL之后,接下来我们就在Spring Boot项目中实战使用PostgreSQL数据库。

4.1 创建SpringBoot项目

创建一个基础的Spring Boot项目(如果你还不会,可以参考我的这篇文章:快速入门

4.2 引入依赖

在你的项目pom.xml中引入访问PostgreSQL所需要的两个重要依赖:其中Mybatis你可以替换成jpa

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>


        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        这里PostgreSQL依赖是必定要导入的,mybatis-plus-boot-starter 依赖你还可以替换成其他的数据访问封装框架,比如:Mybatis、Jpa等,具体根据你的使用习惯来定。因为已经是更上层的封装,所以基本使用与MySQL是类似的,所以你可以参考我之前MySQL的文章进行配置,但有一点,指定数据源连接部分请参考如下:

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/pg_test
    username: postgres
    password: 123456

4.3 创建数据库

        在创建表格之前,需要先创建一个数据库。可以使用命令行或者pgAdmin4等数据库管理工具来创建。这里我们就直接在pgAdmin4可视化工具上进行创建。

4.3.1 创建Database

        这里直接选择Databases ,然后右键即可看到【Create】选项,我们选择【Databes...】选项即可,截图如下演示。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 接着设置数据库名,其他的默认即可。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

4.3.2 创建表

        创建完数据库后,我们打开依次打开 pg_test  --> Schemas(1)--> public --> Tables

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 接着选择【Tables】右击,选择【Create】--> 【Table...】

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 先设置表名及描述,截图请参考如下:

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

4.3.3 创建表字段

        接着在创建表的页面上进行表字段的创建,同页切换到【Colums】即可。如下按字段依次添加设置,最后点击Save。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

到此,数据库及表就创建完成了,接下来我们就可以通过项目来进行测试了。

4.4 创建用户信息实体

        这里我们举例创建一个用户实体,映射到user表(最后完成可在pgAdmin4中查看)

package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Id;

import javax.persistence.GeneratedValue;

@Data
@NoArgsConstructor//无参构造
@TableName("public.pg_user") //指定是public下的pg_user
public class PgUser {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private Integer age;

    public PgUser(Long id,String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public PgUser(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

}

需要注意的是: 这里必须指定表名[@TableName("public.pg_user")],如果你不指定,必定会导致如下报错。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

4.5 创建增删改查接口

        这里我们创建两个接口供查询。

package com.example.demo.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.PgUser;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.stereotype.Component;

import java.awt.*;

/**
 * @author luoYong
 * @version 1.0
 * @date 2023/8/7 17:36
 */
@Component
public interface PgUserRepository extends BaseMapper<PgUser> {

    @Select("select * from public.pg_user where name=#{name} and age=#{age}")
    PgUser findByNameAndAge(@Param("name")String name,@Param("age")Integer age);
    
    @Select(" select * from public.pg_user where name= #{name}")
    PgUser findUser(@Param("name") String name);
}

4.6 创建单元测试

        这里我们直接创建测试用户实体增删改查的测试类,具体如下:

4.6.1 增操作

        这里我们对表进行数据插入,如下是插入数据代码演示:

    @Test
    public void insertTest() throws Exception {
        pgUserRepository.insert(new PgUser(1L, "赵云", 8));
        pgUserRepository.insert(new PgUser(2L, "黄忠", 34));
        pgUserRepository.insert(new PgUser(3L, "张飞", 27));
        pgUserRepository.insert(new PgUser(4L, "貂蝉", 31));
        pgUserRepository.insert(new PgUser(5L, "关羽", 66));
    }

执行测试用例成功截图,请看: 

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 我们也可以打开pgAdmin4,手写sql查询语句进行验证。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 4.6.2 删操作

通过指定id进行对数据进行删除,具体测试用例如下:

    //根据指定id进行数据查询
    @Test
    public void deleteByIdTest() {
        Assertions.assertEquals(1, pgUserRepository.deleteById(1));
    }

 执行完后我们可以看下控制台,指定id=1的这条数据是否被成功执行删除?

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

编辑很明显,是执行成功了。 

 4.6.3 改操作

        通过指定id进行对数据进行修改,具体测试用例如下:

    //根据指定id进行数据修改
    @Test
    public void updateById() {
        PgUser pgUser = pgUserRepository.selectById(1);
        System.out.println("修改前:" + pgUser.toString());
        pgUser.setAge(100);
        pgUser.setName("bug菌");
        Assertions.assertEquals(1, pgUserRepository.updateById(pgUser));
        System.out.println("修改后:" + pgUser.toString());
    }

执行完后我们可以看下控制台,新旧数据是够被更新成功?

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 我们也可以打开pgAdmin4,手写sql查询一波进行验证,数据是我们修改后的数据。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 4.6.4 查操作

这里我们通过指定name进行查询,具体测试用例如下:

    //根据指定name进行数据查询
    @Test
    public void queryByNameTest() {
        PgUser pgUser = pgUserRepository.findUser("bug菌");
        System.out.println(pgUser.toString());
    }

 执行完后我们可以看下控制台,name = "bug菌"的数据成功被查询到?

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 再来写个组合查询语句,例如通过 name 和 age组合查询,大家请看:

    //根据指定name和age组合进行数据查询
    @Test
    public void queryByNameAndAgeTest() {
        PgUser pgUser = pgUserRepository.findByNameAndAge("bug菌",100);
        System.out.println(pgUser.toString());
    }

 执行完后我们可以看下控制台,也是成功拿到了该条数据。

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

 ...

        好啦,到这里我们就已经大概都讲解完了,觉得讲的不错的希望不要吝啬你手中的大拇哥呢,给bug菌点个赞,就是我写作的最大动力。

    ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

5. 热文推荐💭

在入门及进阶之途,我必助你一臂之力,系统性学习,从入门到精通,带你不走弯路,直奔终点;投资自己,永远性价比最高,都这么说了,你还不赶紧来学??

本文涉及所有源代码,均已上传至github开源,供同学们一对一参考 GitHub传送门

同时,原创开源不易,欢迎给个star🌟,想体验下被🌟的感jio,非常感谢❗

6. 文末💭

Spring Boot如何集成PostgreSQL数据库及使用?这你必须得会!

转载自:https://juejin.cn/post/7264780458738909225
评论
请登录