中间件:PostgreSQL 数据库
2026/7/10大约 2 分钟约 577 字
中间件:PostgreSQL 数据库
1. 简介
PostgreSQL 是本项目使用的关系型数据库(OLTP),作为整个系统的唯一持久化存储,保存用户、角色、权限、商品、订单、账户、资金流水等全部业务数据。项目使用 postgres:17 镜像部署。
2. 引入方式
pom.xml 中以运行时依赖引入 PostgreSQL JDBC 驱动:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>3. 配置位置
连接配置:
src/main/resources/application.yml的spring.datasourcedatasource: url: ${DB_URL:jdbc:postgresql://localhost:5432/uas} username: ${DB_USERNAME:uas} password: ${DB_PASSWORD:uas123456} driver-class-name: org.postgresql.Driver容器部署:
docker-compose.yml中的postgres服务(postgres:17,数据库名uas,端口5432,并配置了pg_isready健康检查)。初始化脚本:
application.yml中开启spring.sql.init.mode=always,启动时自动执行:src/main/resources/db/schema.sql—— 建表(DDL)src/main/resources/db/data.sql—— 初始数据(权限点、角色、管理员与普通用户等)
4. 在哪里应用
PostgreSQL 是所有数据访问的终点,通过 MyBatis-Plus(见 MyBatis-Plus.md)的 Mapper 层访问。主要数据表包括:
| 表名 | 对应实体 | 说明 |
|---|---|---|
sys_user | SysUser | 系统用户 |
sys_role / sys_permission | SysRole / SysPermission | 角色与权限 |
sys_user_role / sys_role_permission | SysUserRole / SysRolePermission | 用户-角色、角色-权限关联 |
sys_session_setting | SysSessionSetting | 会话超时策略 |
product | Product | 商品 |
account | Account | 账户余额 |
cart_item | CartItem | 购物车条目 |
orders / order_item | Order / OrderItem | 订单与订单明细 |
transaction_log | TransactionLog | 资金变动流水 |
5. 怎么应用(示例)
以 WalletService 查询某用户的资金流水为例,MyBatis-Plus 构造查询条件后,最终由 PostgreSQL 执行:
LambdaQueryWrapper<TransactionLog> wrapper = new LambdaQueryWrapper<TransactionLog>()
.and(query -> query
.eq(TransactionLog::getFromUserId, userId)
.or()
.eq(TransactionLog::getToUserId, userId))
.orderByDesc(TransactionLog::getCreatedAt);
Page<TransactionLog> result = transactionLogMapper.selectPage(Page.of(current, pageSize), wrapper);account 表与 sys_user 通过 ON DELETE CASCADE 建立外键约束,保证用户删除时账户、购物车、订单等关联数据一并清理。
6. 作用是什么
- 持久化存储:所有业务状态的最终落库位置,保证数据可靠、可查询、可审计。
- 事务与一致性:配合 Spring 的
@Transactional(如MoneyQueueConsumer资金消费逻辑),在数据库层面保证资金变动的 ACID。 - 约束与索引:通过主键、唯一约束、外键级联、索引(如
idx_transaction_log_user)保障数据完整性与查询性能。
7. 相关文件清单
pom.xml(驱动依赖)src/main/resources/application.yml(datasource/sql.init)src/main/resources/db/schema.sql、src/main/resources/db/data.sqldocker-compose.yml(postgres服务)src/main/java/com/yang/backend/entity/*(表映射)src/main/java/com/yang/backend/mapper/*(数据访问)