mybatis-plus icon indicating copy to clipboard operation
mybatis-plus copied to clipboard

QueryWrapper的first方法,引号会被转义

Open adinlead opened this issue 1 year ago • 0 comments

当前使用版本(必填,否则不予处理)

3.5.5

该问题是如何引起的?(确定最新版也有问题再提!!!)

我需要使用WITH语句建立临时表,但是如果语句中包含引号(单引号、双引号)则引号会被转义

重现步骤(如果有就写完整)

QueryWrapper<T> wrapper = new QueryWrapper<>()
.isNull("delete_time")
.first("WITH RECURSIVE  " +
                    "    user_dept_region AS  " +
                    "        (SELECT mu.id        AS menu_unit_id,  " +
                    "                mrm.role_id  AS menu_role_id,  " +
                    "                mur.user_id  AS menu_user_id,  " +
                    "                sr.role_name AS role_name,  " +
                    "                sr.dept_id   AS role_dept_id,  " +
                    "                mm.id        AS id,  " +
                    "                mm.unit_id   AS mm_unit_id  " +
                    "         FROM mc_unit mu  " +
                    "                  LEFT JOIN mc_menu mm ON mm.unit_id = mu.id  " +
                    "                  LEFT JOIN mc_role_menus mrm ON mrm.menu_id = mm.id  " +
                    "                  LEFT JOIN mc_user_roles mur ON mur.role_id = mrm.role_id  " +
                    "                  LEFT JOIN sys_role sr ON sr.id = mrm.role_id  " +
                    "         WHERE mu.delete_time IS NULL  " +
                    "           AND mm.delete_time IS NULL  " +
                    "           AND mu.flag = 'AUDIT'  " +
                    "           AND mm.community_id = 10086 " +
                    "           AND mrm.community_id = 10086 " +
                    "           AND mur.user_id = 100  " +
                    "           AND sr.type IN (0, 1)),  " +
                    "    grid_children AS (SELECT sg.dept_id  " +
                    "                      FROM sys_grid sg  " +
                    "                      WHERE sg.grid_id IN (SELECT role_dept_id FROM user_dept_region)),  " +
                    "    dept_and_children AS (SELECT *  " +
                    "                          FROM sys_dept  " +
                    "                          WHERE id IN (SELECT role_dept_id FROM user_dept_region)  " +
                    "                             OR id IN (SELECT dept_id FROM grid_children)  " +
                    "                          UNION  " +
                    "                          SELECT sd2.*  " +
                    "                          FROM sys_dept sd2  " +
                    "                                   JOIN dept_and_children ON sd2.parent_id = dept_and_children.id)")
.inSql("location_id", "SELECT id FROM dept_and_children").orderByDesc("create_time");

报错信息

org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"AUDIT\"             AND mm.community_id = 10086             AND mrm.co' at line 1
### The error may exist in com/sointech/communal/domains/people/mapper/TempPeopleMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT COUNT(*) FROM (WITH RECURSIVE      user_dept_region AS          (SELECT mu.id        AS menu_unit_id,                  mrm.role_id  AS menu_role_id,                  mur.user_id  AS menu_user_id,                  sr.role_name AS role_name,                  sr.dept_id   AS role_dept_id,                  mm.id        AS id,                  mm.unit_id   AS mm_unit_id           FROM mc_unit mu                    LEFT JOIN mc_menu mm ON mm.unit_id = mu.id                    LEFT JOIN mc_role_menus mrm ON mrm.menu_id = mm.id                    LEFT JOIN mc_user_roles mur ON mur.role_id = mrm.role_id                    LEFT JOIN sys_role sr ON sr.id = mrm.role_id           WHERE mu.delete_time IS NULL             AND mm.delete_time IS NULL             AND mu.flag = \"AUDIT\"             AND mm.community_id = 10086             AND mrm.community_id = 10086             AND mur.user_id = 100             AND sr.type IN (0, 1)),      grid_children AS (SELECT sg.dept_id                        FROM sys_grid sg                        WHERE sg.grid_id IN (SELECT role_dept_id FROM user_dept_region)),      dept_and_children AS (SELECT *                            FROM sys_dept                            WHERE id IN (SELECT role_dept_id FROM user_dept_region)                               OR id IN (SELECT dept_id FROM grid_children)                            UNION                            SELECT sd2.*                            FROM sys_dept sd2                                     JOIN dept_and_children ON sd2.parent_id = dept_and_children.id)   SELECT  id,name,sex,id_number,phone,people_type,political_status,community_id,location_id,house_id,location,people_id,user_id,status,reply,create_by,create_time,update_by,update_time,delete_by,delete_time  FROM people_info_temp      WHERE  (delete_time IS NULL AND status = ? AND location_id IN (SELECT id FROM dept_and_children)) ORDER BY create_time DESC) TOTAL
### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"AUDIT\"             AND mm.community_id = 10086             AND mrm.co' at line 1
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"AUDIT\"             AND mm.community_id = 10086             AND mrm.co' at line 1

adinlead avatar Dec 31 '23 12:12 adinlead