若依框架数据源切换为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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
SQL 数据库连接 数据库
C++ Qt开发:QSqlDatabase数据库组件
Qt SQL模块是Qt框架的一部分,它提供了一组类和函数,用于在Qt应用程序中进行数据库操作。这个模块的目标是简化数据库访问和操作,并提供一致的接口,使得开发者可以方便地与不同数据库系统进行交互。一般SQL组件常用的操作,包括读取数据、插入数据、更新数据、删除数据功能,这四个功能我将分别介绍它是如何使用的。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QSqlDatabase`数据库模块的常用方法及灵活运用。
28 0
C++ Qt开发:QSqlDatabase数据库组件
|
8月前
|
SQL Java 数据库连接
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出) 2
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出)
|
4月前
|
小程序 关系型数据库 数据库连接
laravel5.8(十一)配置使用多数据库
有的时候,我们在开发的过程中需要连接多个数据库。 Laravel框架中早已为我们想到了这样的需求。 配置很简单。 在根目录下的/config/database.php文件中配置: Laravel中为我们提前预设了多种类型的数据库连接
26 0
|
8月前
|
SQL Java 数据库连接
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出) 3
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出)
|
8月前
|
SQL Java 数据库连接
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出) 1
Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出)
|
9月前
|
JSON NoSQL 数据库连接
[虚幻引擎 MongoDB Client 插件说明] DTMongoDB MongoDB数据库连接插件,UE蓝图可以操作MongoDB数据库增删改查。
本插件可以在UE里面使用蓝图操作MongoDB数据库, 对数据库进行查询,删除,插入,替换,更新操作。
126 0
|
9月前
|
SQL 开发框架 .NET
10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互
10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互
|
Java 数据库
SSM 最简单的实现操作 多数据源&动态切换
SSM 最简单的实现操作 多数据源&动态切换
166 0
SSM 最简单的实现操作 多数据源&动态切换
|
数据可视化 数据库
怎么使用可视化数据库工具 DBeaver 新建数据库表?
怎么使用可视化数据库工具 DBeaver 新建数据库表?
3733 0
怎么使用可视化数据库工具 DBeaver 新建数据库表?
|
SQL druid Java
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
1350 0
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新

热门文章

最新文章