mybatis-plus
mybatis-plus copied to clipboard
QueryWrapper的first方法,引号会被转义
当前使用版本(必填,否则不予处理)
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