SpringBoot日常:MySQL数据库与达梦适配

news2024/9/22 21:36:31

文章目录

    • 简介
    • 安装下载
    • 连接配置
      • pom文件
      • application.yml配置
    • 代码适配
    • 注意事项
      • 1、创建表结构语法
      • 2、索引名唯一问题
      • 3、新增字段
      • 4、切换模式名
      • 5、工具客户端更新数据
      • 6、group by语法
      • 7、加解密函数替换
      • 8、删除符号`
      • 9、separator分隔替换成LISTAGG函数
      • 10、函数now()替换成SYSDATE()
      • 11、函数GROUP_CONCAT替换成wm_concat
      • 12、函数STR_TO_DATE替换成TO_DATE
      • 13、函数替换 CURDATE()
      • 14、函数ANY_VALUE()替换成FIRST_VALUE
      • 15、函数REGEXP()替换成REGEXP_LIKE
      • 16、函数 if 替换成COALESCE

简介

现有一个已经以mysql作为数据源的项目,由于需要适配一套信创环境,这里将达梦数据库选作关系型数据库,本文主要介绍如何从mysql适配到达梦。达梦官网地址

安装下载

安装包地址 https://eco.dameng.com/download/
在这里插入图片描述

连接配置

这里使用阿里的数据库链接池druid以及达梦提供的数据驱动包进行数据库连接

pom文件

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>dm-jdbc</artifactId>
    <version>1.8</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.20</version>
</dependency>

application.yml配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: dm.jdbc.driver.DmDriver
      url: jdbc:dm://127.0.0.1:35236/SBOM1?serverTimezone=Asia/Shanghai
      username: TECENT_VIDEO
      password: 12345678901QWER
      initial-size: 10
      max-active: 100
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      filter:
        stat:
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: false
        wall:
          config:
            multi-statement-allow: true

代码适配

这里以mybatis为例,重新复制一份mapper文件到新目录,配置文件直接将sql方法的实现指向该新目录,接着将xml里面的sql按照达梦的语法方式适配,大多数情况是不需要改写的。
改写的方法可以参照本文注意事项中提到的事项点

注意事项

mysql适配达梦数据库时,有许多语法和函数需要我们去留意适配,本章内容总结了一些主要的问题处理方案,基本可以满足大家的适配需求,若有更多的问题,可以到达梦社区搜索->达梦社区

1、创建表结构语法

创建表的时候,不支持在列的后面直接加comment注释,使用 COMMENT ON IS 代替,如下:

CREATE TABLE role_biz_t
(
    account_id BIGINT NOT NULL,
    role_id    BIGINT NOT NULL,
    PRIMARY KEY (account_id, role_id) -- 在达梦数据库中,不需要指定USING BTREE,因为B树索引是默认的
)STORAGE(INITIAL 64, NEXT 64);

COMMENT ON TABLE role_biz_t IS '前台用户角色关系表' ;

2、索引名唯一问题

mysql中我们对索引的唯一性限制在某张表,但是达梦索引名字的唯一性是限制范围是整个模式,所以创建索引的时候最好加上表名来保证唯一性

CREATE INDEX idx_aa_code_create_user ON aa_code(create_user) ;

CREATE UNIQUE INDEX idx_sca_lib_uk_license_id ON sca_lib("license_id") ;

3、新增字段

新增字段和创建表的时候,不支持在列的后面直接加comment注释,同样使用使用 COMMENT ON IS 代替,如下:

ALTER TABLE test_item_t ADD service_name varchar(100) DEFAULT  NULL;
COMMENT ON COLUMN test_item_t.service_name IS '服务名称';

4、切换模式名

在mysql中我们常常用USE database_name; 来完成切换数据库,但是实际上达梦切换模式的语法不是这个。

解决方案:

-- TECENT_VIDEO是模式名 表示切换到该模式下,类似与mysql的切换库
SET SCHEMA TECENT_VIDEO;

5、工具客户端更新数据

在一些常见的工具客户端执行插入或更新数据时,记得在末尾加上commit; 否则你会发现表中数据并没更新。

UPDATE sca_lib SET grade_a=-1 WHERE grade_name='未知';
commit;

6、group by语法

mysql group by后面可以填写查询后的结果别名,但是达梦必须得跟上原本的字段名
在这里插入图片描述
解决方案:

SELECT t1.developer as mydeveloper,t1.id as myid
FROM test t1
group by t1.developer,t1.id

7、加解密函数替换

若原本mysql 用的是AES_DECRYPT(UNHEX(phone),密钥) ,则需要替换成达梦特有的加解密函数,如下

-- 插入一条数据
INSERT INTO TASK (cust_id,cust_name,sex)
VALUES(12225,
BINTOCHAR (
		UTL_ENCODE.BASE64_ENCODE (
			DBMS_CRYPTO.ENCRYPT(
				UTL_I18N.STRING_TO_RAW ( '李四', 'UTF8' ),
				DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_ECB + DBMS_CRYPTO.PAD_PKCS5,
				UTL_I18N.STRING_TO_RAW ( '2112122121212121222', 'UTF8' ) 
			) 
		) 
	)
,1);

-- 模糊查询
select * from TASK t  where 
UTL_I18N.RAW_TO_CHAR (
		DBMS_CRYPTO.DECRYPT (
			UTL_ENCODE.BASE64_DECODE (
			CHARTOBIN ( cust_name)),
			DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_ECB + DBMS_CRYPTO.PAD_PKCS5,
			UTL_I18N.STRING_TO_RAW ( '2112122121212121222', 'UTF8' ) 
		),
	'UTF8' 
	)
 like '%李四%' ;

8、删除符号`

达梦sql不支持符号` 需要去掉,否则会报语法有误,处理的范围包括实体类、代码中的sql拼接以及xml文件
在这里插入图片描述
解决方案:

SELECT developer id FROM test

-- 或者
SELECT developer id FROM "test" 

9、separator分隔替换成LISTAGG函数

在这里插入图片描述
解决方案:

select LISTAGG(field_name , ',') as fieldName from sys_dict_detail_t 

10、函数now()替换成SYSDATE()

now()函数在达梦不存在,需要替换成SYSDATE()

INSERT INTO sys_job (create_time, update_time) VALUES( sysdate(), sysdate());

11、函数GROUP_CONCAT替换成wm_concat

在这里插入图片描述
解决方案:

SELECT wm_concat(app.id) as scaIds FROM  task app

12、函数STR_TO_DATE替换成TO_DATE

在这里插入图片描述
解决方案:

SELECT *  FROM  task t
where  (t.start_time between TRUNC(TO_DATE('2024-07-28', 'YYYY-MM-DD HH24:MI:SS')) 
and TRUNC(TO_DATE('2024-08-28', 'YYYY-MM-DD HH24:MI:SS')) + 1)

13、函数替换 CURDATE()

解决方案:

DATE_FORMAT(create_time,'%Y-%m-%d') >= CURDATE() - INTERVAL 1 DAY 

替换成

DATE_FORMAT(create_time,'%Y-%m-%d') >= DATE_FORMAT(SYSDATE - 1, 'YYYY-MM-DD')

14、函数ANY_VALUE()替换成FIRST_VALUE

在这里插入图片描述
解决方案:

select FIRST_VALUE(id) as aid from sca_app_component_license   
group by license_str

15、函数REGEXP()替换成REGEXP_LIKE

在这里插入图片描述
解决方案:

 select * from task_fun_item_t where  REGEXP_LIKE(code_url, '^[0-9]+$');

16、函数 if 替换成COALESCE

在这里插入图片描述
解决方案:

SELECT
     t1.developer,
     COALESCE(t1.first_vul_json == null, t1.last_vul_json, t1.first_vul_json) AS vul_json
FROM task_vul_repair_statistic_t t1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADAS汽车芯片LPDDR4 SIPI联合仿真案列

目前LPDDRn/DDRn用于许多汽车应用,如高级驾驶员感知系 统(ADAS)、信息娱乐、自动驾驶汽车系统、平视显示器和仪表控制台等显示器,这些应用需要强大的处理器,需要带宽和内存容量来生成大量数据。这就需要电源和信号设计足够的健壮来适应不同的应用场景。上一篇文章中(LPDD…

冲压厂ERP常见功能是什么

在现代制造业中&#xff0c;特别是在冲压行业&#xff0c;高效的管理对于企业的竞争力至关重要。企业资源计划(ERP)系统作为一种集成化的管理工具&#xff0c;为冲压厂提供了诸多便利。本文将探讨冲压厂ERP系统的几个常见功能&#xff0c;并以万达宝ERP为例&#xff0c;分析其在…

紫光同创——PLL IP 的使用(Logos2)

本文档主要针对 Logos2 系列的 PLL 配置&#xff0c;至于 Logos 系列的 PLL&#xff0c;可以参考《PLLIP 的使用(Logos)》的文档。 一、PLL IP 介绍 1、PLL 基本配置模式 Basic Configurations PLL IP 是紫光同创基于 PLL 及时钟网络资源设计的 IP&#xff0c;通过不同的参数配…

2024年【山东省安全员A证】新版试题及山东省安全员A证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年山东省安全员A证新版试题为正在备考山东省安全员A证操作证的学员准备的理论考试专题&#xff0c;每个月更新的山东省安全员A证模拟考试祝您顺利通过山东省安全员A证考试。 1、【多选题】《建设工程安全生产管理…

Kafka简单搭建及常用命令

一、Kafka的服务搭建 1. 安装包下载 这里我下载的是目前最新的版本&#xff0c;在3.X版本及之后的版本中&#xff0c;Kafka已经移除了Zookeeper的强依赖&#xff0c;虽然依旧支持以Zookeeper的方式启动&#xff0c;但本文仅介绍无Zookeeper的启动方式&#xff0c;即kraft模式。…

003、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

【文心智能体】通过低代码工作流编排创建应用《挑战奥运问答拿奖牌》

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景整体界面大模型链提示词模型 工具链HTTP请求工具 逻辑…

多语言跨领域迁移学习的新框架:MAD-X

人工智能咨询培训老师叶梓 转载标明出处 多语言模型如mBERT和XLM-R通过零样本或少样本跨语言迁移极大地推动了低资源语言的NLP应用。但这些模型由于容量限制&#xff0c;对低资源语言和未见语言的迁移性能并不理想。为了解决这一问题&#xff0c;来自德国达姆施塔特工业大学、…

【docker】docker学习笔记

docker学习笔记 0. docker 基本命令1. docker存储1.1 目录挂载1.2 卷映射 2. docker 网络2.1 机器ip访问2.2 容器ip访问2.3 域名访问 3. docker compose&#xff08;批量管理&#xff09;3.1 编写一个yml文件:3.2 docker compose 命令 4. 制作docker 镜像 0. docker 基本命令 …

【JAVA】jdk下载与安装、配置环境

【JAVA】jdk下载与安装、配置环境 一、下载jdk二、安装jdk三、配置环境四、测试环境变量是否设置成功五、特殊情况六、idea官网 一、下载jdk Oracle官网: https://www.oracle.com/点击 “ Products ” “ 下滑 ”&#xff0c;点击 “ Java ” 点击 “ Download Java ” 先选择…

智慧公厕:城市公共卫生间智慧之选@卓振思众

在现代城市生活中&#xff0c;公共设施的智能化已经成为提升市民生活质量的重要一环。而智慧公厕作为公共卫生设施的创新代表&#xff0c;正逐步改变我们对传统公共厕所的认知&#xff0c;为城市管理带来了前所未有的便捷与舒适。【卓振思众】 环境智能调控&#xff0c;提升使用…

【逐行注释】一维EKF滤波的MATLAB代码|*不需要下载*,直接复制到MATLAB即可运行

文章目录 介绍完整代码运行结果各模块含义介绍 这是一个状态量为一维的MATLAB下的滤波程序,使用的滤波方法是EKF(扩展卡尔曼滤波),滤波后,显示滤波值的曲线、滤波误差曲线、滤波误差的最大值、平均值、标准差的输出。 模型是非线性的(状态方程和观测方程都是非线性的),…

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析 RuoYi-Vue 本地环境部署权限管理SpringSecurity 配置登录接口(认证管理)Authentication 认证token的生成 权限控制 异步任务管理操作日志数据权限 RuoYi-Vue 本地环境部署 直接去 gitee 上拉取最新版本即可&#xff0c;分支…

comfyUI好在哪?为啥大家都在用?

前言 comfyUI自从面世以来&#xff0c;就以一种潜力股的姿态快速流行了起来&#xff0c;越来越多的小伙伴开始使用comfyUI。也许你一开始会被comfyUI密密麻麻的“线路”吓到&#xff0c;但其实comfyUI也没那么复杂&#xff0c;并且好处多多。 本文将带大家一起&#xff0c;快…

2024年8月31日(星期六)骑行瓦恭村

2024年8月31日 (星期六&#xff09;骑行瓦恭村&#xff08;向日葵&#xff0c;谷花鱼&#xff09;&#xff0c;早8:30到9:00&#xff0c; 昆明氧气厂门囗集合&#xff0c;9:00准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:昆明氧气厂…

华为Huawei路由器交换机SSH配置

华为设备的SSH登录配置需要5个步骤&#xff0c;示例如下&#xff1a; 一、配置命令 使能SSH功能 stelnet server enable生成公钥 rsa local-key-pair create 1024配置AAA用户密码及相应授权 aaalocal-user xxx password cipher xxxyyy1234local-user xxx privilege level …

RAG必备知识:OpenAI官宣结构化输出|结构化输出工具大汇总

官宣:根据非常普遍的需求,OpenAI的API 中开始支持结构化输出。 在 API 中引入结构化输出 - 模型输出现在遵循开发人员提供的 JSON 模式。让大型语言模型(Large Language Models, LLMs)进行结构化输出是自然语言处理(NLP)领域中的一个重要目标。结构化输出指的是将自然语…

Java SpringBoot结合Vue打造法律援助平台,实现高效在线法律咨询服务

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

布偶猫应该怎么喂?希喂、交响乐金罐、尾巴生活彩虹泥适合布偶猫吗?

我开了家布偶猫咖&#xff0c;这些长相甜美可爱的小家伙超会撒娇卖萌&#xff0c;把客人迷的团团转。布偶猫又叫仙布拉多尔猫&#xff0c;它是现存体型最大、体重最重的猫之一&#xff0c;它们体型大&#xff0c;食量也大&#xff0c;但肠胃却特别弱&#xff0c;所以一定要特别…

Mac环境下Python3虚拟环境创建、Flask安装以及创建运行第一个最小的Flask项目

为什么要使用虚拟环境&#xff1f;随着你的 Python 项目越来越多&#xff0c;你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。 虚拟环境可以为每一个项目安装独立的 Python 库&#xff0c;这样就可以隔离不同项目之间的 Python 库&…