|
|
@@ -0,0 +1,43 @@
|
|
|
+package com.ruoyi.system.mapper;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
|
|
+import com.baomidou.mybatisplus.core.MybatisXMLMapperBuilder;
|
|
|
+import org.apache.ibatis.mapping.BoundSql;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 摊位审核 filter 的 MyBatis-Plus 渲染回归:线上运行时走 MybatisConfiguration/MybatisXMLMapperBuilder,
|
|
|
+ * 纯空白文本节点会被丢弃,静态 status != 0 与动态 AND 可能贴死成 0AND(2026-10-16 线上事故)。
|
|
|
+ * 原生 Configuration 的测试保留空白、无法暴露该问题,必须用 MP 解析链路验证。
|
|
|
+ */
|
|
|
+class StallQualificationMapperMpRenderTest {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void filterKeepsSeparatorUnderMybatisPlusParsing() throws Exception {
|
|
|
+ MybatisConfiguration configuration = new MybatisConfiguration();
|
|
|
+ String resource = "mapper/chanting/StallQualificationMapper.xml";
|
|
|
+ try (InputStream input = getClass().getClassLoader().getResourceAsStream(resource)) {
|
|
|
+ assertNotNull(input);
|
|
|
+ new MybatisXMLMapperBuilder(input, configuration, resource, configuration.getSqlFragments()).parse();
|
|
|
+ }
|
|
|
+ String namespace = "com.ruoyi.system.mapper.StallQualificationMapper.";
|
|
|
+ BoundSql select = configuration.getMappedStatement(namespace + "selectApplications")
|
|
|
+ .getBoundSql(Map.of("status", 1, "limit", 10, "offset", 0));
|
|
|
+ String collapsed = select.getSql().replaceAll("\\s+", " ");
|
|
|
+ assertFalse(collapsed.contains("0AND"), "MP 解析下静态与动态条件贴死: " + collapsed);
|
|
|
+ assertTrue(collapsed.contains("status != 0 AND status = ?"), "MP 解析下丢失分隔空白: " + collapsed);
|
|
|
+
|
|
|
+ BoundSql withStore = configuration.getMappedStatement(namespace + "selectApplications")
|
|
|
+ .getBoundSql(Map.of("status", 2, "storeId", 7L, "limit", 10, "offset", 0));
|
|
|
+ String collapsedStore = withStore.getSql().replaceAll("\\s+", " ");
|
|
|
+ assertFalse(collapsedStore.contains("?AND"), "MP 解析下动态条件之间贴死: " + collapsedStore);
|
|
|
+ assertTrue(collapsedStore.contains("AND store_id = ?"), collapsedStore);
|
|
|
+ }
|
|
|
+}
|