专栏首页小灰灰SpringBoot系列Mybatis之转义符的使用姿势
原创

SpringBoot系列Mybatis之转义符的使用姿势

【DB 系列】Mybatis 之转义符的使用姿势

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

<!-- more -->

I.转义

1. 转义符

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

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

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

日常开发中除了上面的小于号之外,另外一个常见的则是 & 与操作符,如果 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. <![CDATA[ ]]> 写法

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

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

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

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

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

III. 不能错过的源码和相关知识点

0. 项目

系列博文:

1. 微信公众号: 一灰灰 Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot + Mybatis系列之插件机制 Interceptor

    在 Mybatis 中,插件机制提供了非常强大的扩展能力,在 sql 最终执行之前,提供了四个拦截点,支持不同场景的功能扩展

    一灰灰blog
  • SpringBoot系列Mybatis之参数传递的几种姿势

    在 mybatis 的日常开发中,mapper 接口中定义的参数如何与 xml 中的参数进行映射呢?除了我们常用的@Param注解之外,其他的方式是怎样的呢?

    一灰灰blog
  • SpringBoot系列Mybatis之参数传递的几种姿势

    在 mybatis 的日常开发中,mapper 接口中定义的参数如何与 xml 中的参数进行映射呢?除了我们常用的@Param注解之外,其他的方式是怎样的呢?

    一灰灰blog
  • SpringBoot系列 Mybatis 之自定义类型转换 TypeHandler

    在使用 mybatis 进行 db 操作的时候,我们经常会干的一件事情就是将 db 中字段映射到 java bean,通常我们使用ResultMap来实现映射,...

    一灰灰blog
  • SpringBoot系列 Mybatis 之自定义类型转换 TypeHandler

    在使用 mybatis 进行 db 操作的时候,我们经常会干的一件事情就是将 db 中字段映射到 java bean,通常我们使用ResultMap来实现映射,...

    一灰灰blog
  • 【SpringBoot Mybatis系列】MapperMapper接口与Sql绑定几种姿势

    通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接...

    一灰灰blog
  • SpringBoot 系列教程 Mybatis+xml 整合篇

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集...

    一灰灰blog
  • SpringBoot系列教程JPA之update使用姿势

    上面两篇博文拉开了jpa使用姿势的面纱一角,接下来我们继续往下扯,数据插入db之后,并不是说就一层不变了,就好比我在银行开了户,当然是准备往里面存钱了,有存就有...

    一灰灰blog
  • SpringBoot高级篇JdbcTemplate之数据查询上篇

    环境依然借助前面一篇的配置,链接如: 190407-SpringBoot高级篇JdbcTemplate之数据插入使用姿势详解

    一灰灰blog
  • SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」

    在使用Mybatis进行项目开发的时候,最繁琐的事情就是实体类,dao接口,mapper.xml文件的编写,几乎每个表都需要对应写一套,并且大部分的工作量都在最...

    鹿老师的Java笔记
  • SpringBoot系列教程JPA之delete使用姿势详解

    常见db中的四个操作curd,前面的几篇博文分别介绍了insert,update,接下来我们看下delete的使用姿势,通过JPA可以怎样删除数据

    一灰灰blog
  • 【SpringBoot DB 系列】Jooq 之新增记录使用姿势

    接下来我们开始进入 jooq 的增删改查的使用姿势系列,本篇将主要介绍如何利用 jooq 来实现添加数据

    一灰灰blog
  • 【SpringBoot DB 系列】Jooq 之新增记录使用姿势

    接下来我们开始进入 jooq 的增删改查的使用姿势系列,本篇将主要介绍如何利用 jooq 来实现添加数据

    一灰灰blog
  • SpringBoot系列教程web篇之重定向

    前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -> 重定向;

    一灰灰blog
  • 【SpringBoot DB 系列】Jooq 初体验

    java 环境中,说到数据库的操作,我们通常会想到的是 mybatis 或者 hibernate,今天给大家介绍一个国内可能用得不太多的操作方式 JOOQ,一款...

    一灰灰blog
  • 【SpringBoot DB系列】Mybatis多数据源配置与使用

    上一篇博文介绍 JdbcTemplate 配置多数据源的使用姿势,在我们实际的项目开发中,使用 mybatis 来操作数据库的可能还是非常多的,本文简单的介绍一...

    一灰灰blog
  • SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇

    承接上一篇博文【SpringBoot 基础系列】@Value 中哪些你不知道的知识点 中提及到但没有细说的知识点,这一篇博文将来看一下@Value除了绑定配置文...

    一灰灰blog
  • SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇

    承接上一篇博文[【SpringBoot 基础系列】@Value 中哪些你不知道的知识点](http://mp.weixin.qq.com/s?__biz=MzU...

    一灰灰blog
  • 【SpringBoot DB 系列】Jooq 初体验

    java 环境中,说到数据库的操作,我们通常会想到的是 mybatis 或者 hibernate,今天给大家介绍一个国内可能用得不太多的操作方式 JOOQ,一款...

    一灰灰blog

扫码关注云+社区

领取腾讯云代金券