PostgreSQL Docker部署 + SpringBoot集成
0 背景
最近公司有新项目需要使用 PostgreSQL ,于是简单学习了一下,并记录一下过程。
1 安装PostgreSQL
1.1 拉取镜像
docker pull mdillon/postgis
1.2 启动容器
docker run --name postgis -e POSTGRES_PASSWORD=postgis -p 5432:5432 -d mdillon/postgis:latest
注:其中 POSTGRES_PASSWORD=postgis
设置了密码为 postgis
2 安装pgadmin4
pgadmin4可以理解为在线操作PostgreSQL的可视化网站,(也可以不安装这个,用DBeaver 或者 Navicat进行连接使用。
2.1 拉取镜像
docker pull dpage/pgadmin4
2.2 启动容器
docker run -d -p 5050:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=admin -e PGADMIN_DEFAULT_PASSWORD=admin dpage/pgadmin4
PGADMIN_DEFAULT_EMAIL=admin
是设置管理员账号为admin
PGADMIN_DEFAULT_PASSWORD=admin
是设置密码为admin
2.3 防火墙放行端口
firewall-cmd --zone=public --add-port=5050/tcp --permanent
由于部分服务器的设置,防火墙对部分端口没有放开,这时外部通过端口访问的时候可能请求不到,所以需要放行端口。
2.4 页面操作
前面操作执行成功后,通过url:http://{ip}:5050/login
进行页面访问,可进入下面这个页面,输入账号密码,语言选择中文,点击登录即可。
进入页面后,选择添加服务器
,然后输入我们数据库的相关信息即可添加成功
然后我们选择创建架构
(其他地方也有翻译为模式
),为后文测试做准备(作者这里创造的是名为test
的架构)
然后在test
下创建一张名为test1
的表,该表只需要保护一个int类型的id字段即可
建表后任意添加一条数据
3 SpringBoot集成
作者这里使用的是各依赖版本如下:
SpringBoot
: 2.3.7.RELEASEpostgresql
: 42.2.23lombok
: 1.18.26mybatis
: 2.3.0mybatis-plus
: 3.4.3
3.1 pom依赖
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
</dependencies>
3.2 application.yml
server:
port: 9001
spring:
datasource:
driver-class-name: org.postgresql.Driver
username: postgres
password: postgis
url: jdbc:postgresql://{ip}:5432/postgres?currentSchema=test
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
注:对于jdbc:postgresql://{ip}:5432/postgres?currentSchema=test
这里,如果不填 currentSchema=test
则默认走postgres
中public
这个模式(也就是我们前文创建的架构
),这里我们要走我们自己创建的test
模式,所以这里需要把这个配置加上。
3.3 domain实体类
package com.ran.pgsql_code.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "test1")
public class Test {
private Long id;
}
注:这里的表名要和我们前文创建的表对应上。
3.4 mapper
package com.ran.pgsql_code.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ran.pgsql_code.domain.Test;
public interface TestMapper extends BaseMapper<Test> {
}
注:需要去application添加注解,这里要和我们的mapper创建的路径保持一致
@MapperScan("com.ran.pgsql_code.mapper")
4 代码调试
创建测试类,执行以下代码
package com.ran.pgsql_code;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ran.pgsql_code.mapper.TestMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@SpringBootTest
class Tests {
@Resource
private TestMapper testMapper;
@Test
void queryForMybatisPlus(){
QueryWrapper<com.ran.pgsql_code.domain.Test> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", 1L);
List<com.rlz.pgsql_code.domain.Test> result = testMapper.selectList(queryWrapper);
if (result == null){
return;
}
for (com.rlz.pgsql_code.domain.Test test : result){
System.out.println(test);
}
}
}
执行能成功查到,集成成功
5 总结
由于PostgreSQL
和MySQL
的语法都是基于SQL来的,所以作者个人认为没必要重学一遍PostgreSQL
的语法,基础的增删改查也可以通过mybatis
来直接操作,等在实际应用中遇到了一些PostgreSQL
的特殊化操作再去学习也是完全可以的。