From 151a0faeb0578e98e5d72f67f83623cc846a3172 Mon Sep 17 00:00:00 2001 From: onekr-billy <378012098@qq.com> Date: Wed, 2 Jul 2025 19:38:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20database-id=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=8C=E9=80=82=E9=85=8D=E5=A4=9A?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93SQL=E8=AF=AD=E6=B3=95=E5=B7=AE?= =?UTF-8?q?=E5=BC=82=EF=BC=8C=E6=8F=90=E5=8D=87MyBatis=20XML=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Billy<378012098@qq.com> # message auto-generated for no-merge-commit merge: merge billy into dev MyBatis xml 文件支持 增加针对不同数据库(mysql,pgsql)的sql 分别定义 Created-by: onekr-billy Commit-by: Billy Merged-by: Charles_7c Description: ## PR 类型 - [ ] 新 feature - [ ] Bug 修复 - [x] 功能增强 - [ ] 文档变更 - [ ] 代码样式变更 - [ ] 重构 - [ ] 性能改进 - [ ] 单元测试 - [ ] CI/CD - [ ] 其他 ## PR 目的 新增 database-id 配置项,适配多数据库SQL语法差异,提升MyBatis XML兼容性 ## 解决方案 新增databaseId配置项,通过数据库厂商标识(DatabaseIdProvider)机制,实现MyBatis XML映射文件中多数据库SQL语法的动态适配,有效提升多数据库场景下的兼容性与可维护性。 ## PR 测试 ## Changelog | 模块 | Changelog | Related issues | |-----|-----------| -------------- | | | | | ## 其他信息 ## 提交前确认 - [x] PR 代码经过了完整测试,并且通过了代码规范检查 - [ ] 已经完整填写 Changelog,并链接到了相关 issues - [x] PR 代码将要提交到 dev 分支 See merge request: continew/continew-admin!5 --- .../src/main/resources/config/application.yml | 2 + .../main/resources/mapper/MessageMapper.xml | 29 +++++++++++++-- .../main/resources/mapper/NoticeMapper.xml | 37 +++++++++++++++++-- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/continew-server/src/main/resources/config/application.yml b/continew-server/src/main/resources/config/application.yml index 688b84b2..4ba6b6ad 100644 --- a/continew-server/src/main/resources/config/application.yml +++ b/continew-server/src/main/resources/config/application.yml @@ -242,6 +242,8 @@ mybatis-plus: # MyBatis 自动映射策略 # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射 auto-mapping-behavior: PARTIAL + database-id: mysql + #database-id: pgsql ## 全局配置 global-config: banner: true diff --git a/continew-system/src/main/resources/mapper/MessageMapper.xml b/continew-system/src/main/resources/mapper/MessageMapper.xml index 8a3e593c..c461949a 100644 --- a/continew-system/src/main/resources/mapper/MessageMapper.xml +++ b/continew-system/src/main/resources/mapper/MessageMapper.xml @@ -17,7 +17,14 @@ LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id - (t1.scope = 1 OR (t1.scope = 2 AND JSON_EXTRACT(t1.users, "$[0]") = CAST(#{query.userId} AS CHAR))) + + + (t1.scope = 1 OR (t1.scope = 2 AND JSON_EXTRACT(t1.users, "$[0]") = CAST(#{query.userId} AS CHAR))) + + + (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{query.userId}::text))) + + AND t1.title LIKE CONCAT('%', #{query.title}, '%') @@ -54,7 +61,15 @@ t1.* FROM sys_message AS t1 LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId} - WHERE (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"')))) + WHERE + + + (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"')))) + + + (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) )) + + AND t2.read_time IS NULL @@ -63,7 +78,15 @@ COUNT(1) FROM sys_message AS t1 LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId} - WHERE (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"')))) + WHERE + + + (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"')))) + + + (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) )) + + AND t2.read_time IS NULL AND t1.type = #{type} diff --git a/continew-system/src/main/resources/mapper/NoticeMapper.xml b/continew-system/src/main/resources/mapper/NoticeMapper.xml index eb837636..d35743b4 100644 --- a/continew-system/src/main/resources/mapper/NoticeMapper.xml +++ b/continew-system/src/main/resources/mapper/NoticeMapper.xml @@ -24,7 +24,14 @@ LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id - (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{query.userId}, '"')))) + + + (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{query.userId}, '"')))) + + + (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{query.userId}::text))) + + AND t1.title LIKE CONCAT('%', #{query.title}, '%') @@ -46,9 +53,24 @@ t1.id FROM sys_notice AS t1 LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id AND t2.user_id = #{userId} - WHERE (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"')))) + WHERE + + + (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"')))) + + + (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{userId}::text))) + + - AND JSON_CONTAINS(t1.notice_methods, CAST(#{noticeMethod} AS CHAR)) + + + AND JSON_CONTAINS(t1.notice_methods, CAST(#{noticeMethod} AS CHAR)) + + + AND (t1.notice_methods::jsonb @> jsonb_build_array(#{noticeMethod}::text)) + + AND t2.read_time IS NULL @@ -60,7 +82,14 @@ FROM sys_notice WHERE status = 3 - AND (notice_scope = 1 OR (notice_scope = 2 AND JSON_CONTAINS(notice_users, CONCAT('"', #{userId}, '"')))) + + + AND (notice_scope = 1 OR (notice_scope = 2 AND JSON_CONTAINS(notice_users, CONCAT('"', #{userId}, '"')))) + + + AND (notice_scope = 1 OR (notice_scope = 2 AND notice_users::jsonb @> jsonb_build_array(#{userId}::text))) + + ORDER BY is_top DESC, publish_time DESC LIMIT 5