若依框架数据源切换为pg库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 若依管理系统切换数据源为pg数据库

若依管理系统官网:若依管理

一 切换数据源

在ruoyi-admin项目里引入pg数据库驱动

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.18</version>
</dependency>

修改配置文件里的数据源为pg

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: org.postgresql.Driver
        druid:
            # 主库数据源改为pg库
            master:
                url: jdbc:postgresql://192.168.119.128:5432/FDS?stringtype=unspecified
                username: postgres
                password: ts123456

二 切换函数以及语法

因为pg库里没有dual表,所以把配置文件里validationQuery的值,从SELECT 1 FROM DUAL 换为:select version()来判断数据库是否正常连接
image.png

application.yml里的PageHelper分页插件换成pgsql的

pagehelper:
  helperDialect: postgresql
  supportMethodsArguments: true
  params: count=countSql

在mapper.xml里全局搜索sysdate(),换为now()
在mapper.xml里全局搜索ifnull(字段,‘’) 函数,换成 COALESCE(字段,‘’)

char类型的值,mysql可以不加引号,但是pg必须加单引号

mapper.xml文件里,搜索status = 0 ,改为 status = '0'

搜索`query` ,换为query

全局搜索database(),换为CURRENT_SCHEMA()

三 加自增序列

凡是有自增主键的表,都要加自增序列

CREATE SEQUENCE sys_user_id_seq
    START WITH 3
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_user alter column user_id set default nextval('sys_user_id_seq');

-- 从当前最大id依次递增
--select setval('sys_user_id_seq',(select max(user_id) from sys_user));
CREATE SEQUENCE sys_oper_log_id_seq
    START WITH 3
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_oper_log alter column oper_id set default nextval('sys_oper_log_id_seq');
-- 从当前最大id依次递增
--select setval('sys_oper_log_id_seq',(select max(oper_id) from sys_oper_log));
CREATE SEQUENCE sys_role_id_seq
    START WITH 3
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_role alter column role_id set default nextval('sys_role_id_seq');
CREATE SEQUENCE sys_notice_id_seq
    START WITH 3
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_notice alter column notice_id set default nextval('sys_notice_id_seq');
CREATE SEQUENCE sys_dict_type_id_seq
    START WITH 11
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_dict_type alter column dict_id set default nextval('sys_dict_type_id_seq');
CREATE SEQUENCE sys_dept_id_seq
    START WITH 11
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_dept alter column dept_id set default nextval('sys_dept_id_seq');

SELECT 'CREATE SEQUENCE ' || sequence_name || ' START ' ||  start_value || ';' from information_schema.sequences;
CREATE SEQUENCE gen_table_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table gen_table alter column table_id set default nextval('gen_table_id_seq');
CREATE SEQUENCE gen_table_column_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table gen_table_column alter column column_id set default nextval('gen_table_column_id_seq');
CREATE SEQUENCE sys_post_id_seq
    START WITH 5
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_post alter column post_id set default nextval('sys_post_id_seq');
CREATE SEQUENCE sys_dict_data_code_seq
    START WITH 30
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_dict_data alter column dict_code set default nextval('sys_dict_data_code_seq');
CREATE SEQUENCE sys_job_seq
    START WITH 4
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_job alter column job_id set default nextval('sys_job_seq');
CREATE SEQUENCE sys_job_log_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE 
    CACHE 1;

-- 设置表某个字段自增
alter table sys_job_log alter column job_log_id set default nextval('sys_job_log_id_seq');

查询序列语法

SELECT 'CREATE SEQUENCE ' || sequence_name || ' START ' ||  start_value || ';' from information_schema.sequences;

删除序列语法

# 如果新建的序列有问题,可以使用下边这个语句删除后,再重新新建
DROP SEQUENCE sys_oper_log_id_seq

四 加默认值、加引号

凡是之前是char类型的字段,并且有默认值的,都需要在navicat里添加默认值,如sys_user表、sys_role、sys_dept表的del_flag、status字段,设置默认值,注意,要加引号。sys_menu、sys_post、sys_notice、sys_loggininfo、sys_job_log、sys_dict_type、sys_dict_data表的status字段,设置默认值0,加引号。

image.png

五 改代码

SysRole.java里的menuCheckStrictly、deptCheckStrictly改为int类型,index.vue里的menuCheckStrictly、deptCheckStrictly,由true改为1,搜索vue文件里的“父子联动”,注释掉。

GenTableMapper.xml里的id="selectDbTableList",改为下边这种

 <select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
        select * from information_schema.tables
        where table_schema = (select CURRENT_SCHEMA())
        AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
        AND table_name NOT IN (select table_name from gen_table)
        <if test="tableName != null and tableName != ''">
            AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
        </if>
        <!--<if test="tableComment != null and tableComment != ''">
            AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
        </if>
        <if test="params.beginTime != null and params.beginTime != ''">&lt;!&ndash; 开始时间检索 &ndash;&gt;
            AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
        </if>
        <if test="params.endTime != null and params.endTime != ''">&lt;!&ndash; 结束时间检索 &ndash;&gt;
            AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
        </if>
        order by create_time desc-->
</select>

六 去掉数据库的校验

如果我们不想使用数据库,只使用若依提供的封装工具类,那么把下边这三个类的init构造函数去掉即可:
SysConfigServiceImpl:
image.png

SysDictTypeServiceImpl:
image.png

SysJobServiceImpl:
image.png

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
10天前
kettle开发篇-空操作
kettle开发篇-空操作
40 0
|
10天前
|
SQL 数据库连接 数据库
C++ Qt开发:QSqlDatabase数据库组件
Qt SQL模块是Qt框架的一部分,它提供了一组类和函数,用于在Qt应用程序中进行数据库操作。这个模块的目标是简化数据库访问和操作,并提供一致的接口,使得开发者可以方便地与不同数据库系统进行交互。一般SQL组件常用的操作,包括读取数据、插入数据、更新数据、删除数据功能,这四个功能我将分别介绍它是如何使用的。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QSqlDatabase`数据库模块的常用方法及灵活运用。
40 0
C++ Qt开发:QSqlDatabase数据库组件
|
10天前
|
前端开发 Java OLAP
Doris数据库安装插件流程
【5月更文挑战第1天】Doris数据库安装插件流程
252 2
|
10天前
|
数据可视化 Java 测试技术
基于SpringBoot的精品在线试题库系统(系统+数据库+文档)
基于SpringBoot的精品在线试题库系统(系统+数据库+文档)
|
5月前
|
小程序 关系型数据库 数据库连接
laravel5.8(十一)配置使用多数据库
有的时候,我们在开发的过程中需要连接多个数据库。 Laravel框架中早已为我们想到了这样的需求。 配置很简单。 在根目录下的/config/database.php文件中配置: Laravel中为我们提前预设了多种类型的数据库连接
28 0
|
6月前
|
SQL Java 关系型数据库
模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案
在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表。
46 1
|
11月前
|
关系型数据库 MySQL 数据库连接
关于如何使用命令行新建数据库的解决方案
关于如何使用命令行新建数据库的解决方案
123 0
|
数据可视化 数据库
怎么使用可视化数据库工具 DBeaver 新建数据库表?
怎么使用可视化数据库工具 DBeaver 新建数据库表?
3778 0
怎么使用可视化数据库工具 DBeaver 新建数据库表?
|
SQL 数据可视化 BI
使用 NineData GUI 创建与修改 ClickHouse 表结构
当前 NineData 已经完全适配支持 ClickHouse 所有表引擎的新建及其变更,在集群与分布式表的新建支持上更是做了联动优化,进一步帮助广大开发者提升效率,减少不一致现象的出现。未来,我们将继续迭代优化支持本地表与分布式表的一键联动更新,NineData 让每个人用好数据和云。
168 0
使用 NineData GUI 创建与修改 ClickHouse 表结构
|
SQL 存储 程序员
【数据库】C#创建项目简单开发实现数据库表记录迁移功能
在实际项目中,很大可能会遇到数据迁移的情况 特别是对于系统升级或者旧表转移到新表,新旧表很可能是字段都不一样的情况,本篇文章就是在两个不同数据库不同表之间数据整合 同时也回顾下ADO.NET的ORM框架基础知识
197 0