Mybatis之转义符的使用姿势

简介: 在 mybatis 的 xml 文件中直接写 sql 比较方便简洁,但是需要注意的是,在 xml 文件中,经常会遇到一些需要转义的场景,比如查询 id < xxx的数据,这个小于号就不能直接写在 sql 中,接下来我们将看一下,mybatis 中的有哪些转义符,可以怎么处理转义问题

image.png在 mybatis 的 xml 文件中直接写 sql 比较方便简洁,但是需要注意的是,在 xml 文件中,经常会遇到一些需要转义的场景,比如查询 id < xxx的数据,这个小于号就不能直接写在 sql 中,接下来我们将看一下,mybatis 中的有哪些转义符,可以怎么处理转义问题


I.转义



1. 转义符


在 mybatis 的 xml 文件中,我们最常见的转义符为小于号,如查询 id 小于 100 的数据

<select id="xxx">
  select * from `money` where id &lt; #{id}
</select>
复制代码


注意上面的 sql,小于号实际使用的是 &lt;,不能直接使用 <,比如直接使用小于号,在 idea 中会有如下的错误提示


image.png


日常开发中除了上面的小于号之外,另外一个常见的则是 & 与操作符,如果 sql 中有位操作的场景,同样需要转义


<select id="xxx">
  -- select * from `money` where id & 1 = 1 的sql,需要如下转义
  select * from `money` where id &amp; 1 = 1
</select>
复制代码


在 mybatis 中常见的几个转义字符表映射关系如下表 (mybatis 的转义实际上完全遵循的是 xml 转义规则,主要有下面几个)


符号 转义 说明
< < 小于
> > 大于
& &
' ' 单引号
" " 双引号


2.  写法


通过转义的方式虽然简单,但是有一个问题就是不够直观,在阅读 sql 时,还需要在脑海里反转义一下,这样就不太友好了,好在 xml 提供了 CDATA 的语法,被包裹在它内部的语句,不会被 xml 解析器进行解析


如通过下面的写法来写与操作

<select id="queryBitCondition" resultType="long">
    select id from money where  <![CDATA[ `money` & #{bit} = #{bit} ]]>
</select>
复制代码


使用这种方式时,需要注意:

  • 不支持嵌套的写法
  • 结尾符 ]]> 注意与起始符配套使用



相关文章
|
Java 数据库连接 数据库
MyBatis分页查询及特殊字符的处理
MyBatis分页查询及特殊字符的处理
108 0
|
Java 数据库连接 mybatis
『MyBatis』MyBatis实现模糊查询Like
📣读完这篇文章里你能收获到 - Mybatis使用Like实现模糊查询
296 0
『MyBatis』MyBatis实现模糊查询Like
|
5月前
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
102 7
|
SQL Java 数据库连接
MyBatis分页查询与特殊字符处理
MyBatis分页查询与特殊字符处理
310 0
MyBatis分页查询与特殊字符处理
|
XML Java 数据库连接
Mybatis分页及特殊字符
Mybatis分页及特殊字符
56 0
Mybatis分页及特殊字符
|
XML Java 关系型数据库
MyBatis分页与特殊字符处理
MyBatis分页与特殊字符处理
49 0
|
SQL 前端开发 Java
Mybatis的动态SQL分页及特殊字符应用
Mybatis的动态SQL分页及特殊字符应用
59 0
|
XML 前端开发 Java
Mybatis系列(三)之分页查询及特殊字符的处理
Mybatis系列(三)之分页查询及特殊字符的处理
|
SQL Java 数据库连接
mybatis的分页和特殊字符处理
mybatis的分页和特殊字符处理
126 0
|
SQL Java 数据库连接
Mybatis的动态SQL分页及特殊字符的使用
Mybatis的动态SQL分页及特殊字符的使用
65 0