Mybatis mapper.xml sql语句转义字符

在xml的sql语句中,不能直接用大于号、小于号、单引号、双引号,要用转义字符替代

在sql语句里动态赋值时,如果说需要用单引号,不能直接用 ‘ 表示:

举例:

 
项目运行进行测试时,报错:

严重: Servlet.service() for servlet [SpringMVC] in context with path [/smarter_SecurityManagement] threw exception [Request processing failed; nested exception is org.springframework.jdbc.InvalidResultSetAccessException: 
### Error querying database.  Cause: java.sql.SQLException: 无效的列索引
### The error may exist in file [D:\WebServer\apache-tomcat-7.0.69-windows-x64\apache-tomcat-7.0.69\webapps\smarter_SecurityManagement\WEB-INF\classes\net\hehang\indexManage\dao\mapping\BusCarTrackMapper.xml]
### The error may involve net.hehang.indexManage.dao.BusCarTrackDao.selectBusCarTrackByCarId-Inline
### The error occurred while setting parameters
### SQL: SELECT count(*) FROM (SELECT t.*, to_char(t.UP_DATE, 'yyyy-mm-dd hh24:mi:ss') upDate123 FROM BUS_CAR_TRACK t WHERE 1 = 1 AND t.CAR_ID = ? AND to_char(t.UP_DATE, 'yyyy-mm-dd') = '?') table_count
### Cause: java.sql.SQLException: 无效的列索引
debug模式下,发现所需的carId和curDate都是有值的,且格式正确;

错误原因是mapper配置里:

AND to_char(t.UP_DATE,'yyyy-mm-dd')='#{curDate}'
xml配置里不能直接用特殊符号,需要进行转义;

修改为:

AND to_char(t.UP_DATE,'yyyy-mm-dd')=#{curDate}
因为我的curDate本来就是String类型,此处不需要再加单引号限定了,如果某些地方确实需要单引号,要用'替换。

其他的例如
<= 应表示为:<= 或是<&=   , >=以此类推


其他转义字符

                     <                                 

                     <

                     小于号                                           

                     >

                     >                                      

                     大于号

                     &

                     &

                     和

                     '

                     ’

                     单引号

                     "

                     "

                     双引号

你可能感兴趣的:(mybatis,sql,xml,转义字符)