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 < #{id}
</select>
注意上面的 sql,小于号实际使用的是 <
,不能直接使用 <
,比如直接使用小于号,在 idea 中会有如下的错误提示
日常开发中除了上面的小于号之外,另外一个常见的则是 &
与操作符,如果 sql 中有位操作的场景,同样需要转义
<select id="xxx">
-- select * from `money` where id & 1 = 1 的sql,需要如下转义
select * from `money` where id & 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. 项目
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/103-mybatis-xml
系列博文:
1. 微信公众号: 一灰灰 Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰 Blog 个人博客 https://blog.hhui.top
- 一灰灰 Blog-Spring 专题博客 http://spring.hhui.top
hhui
一灰灰Blog的个人编程记录
248 声望
45 粉丝
推荐阅读
SpringBoot系列之数据库初始化-datasource配置方式
在我们的日常业务开发过程中,如果有db的相关操作,通常我们是直接建立好对应的库表结构,并初始化对应的数据,即更常见的情况下是我们在已有表结构基础之下,进行开发;但是当我们是以项目形式工作时,更常见的...
小灰灰Blog阅读 566
记录一个 SpringSecurity 和 x-auth-token 一直登录失败的排查过程
第一步:初始化项目,粘贴基本功能,如简单的页面、实体、必要的服务和控制器等,如果出现依赖,则视情况粘贴依赖或删掉代码第二步:粘贴登录功能,当前这个项目用的和之前学的已经不一样了,使用的是 SpringSecu...
LYX6666赞 4阅读 552
MyBatis支持的OGNL语法
用于解析静态方法org.apache.ibatis.scripting.xmltags.TextSqlNode.BindingTokenParser#handleTokenorg.apache.ibatis.scripting.xmltags.OgnlCache#getValueorg.apache.ibatis.scripting.xmltags.OgnlCache#par...
疯狂小兵赞 1阅读 6.3k
【DEBUG】记录weixin-java-mp启动时出现“找不到 xxxx”的问题
districtServiceImpl -> webUserService -> weChatMpService -> WxMessageInMemoryDuplicateCheckerSingleton失败
LYX6666赞 3阅读 276
手把手带你开发starter,点对点带你讲解原理
现在我们就来回忆一下,在还没有Spring-boot框架的时候,我们使用Spring 开发项目,如果需要某一个框架,例如mybatis,我们的步骤一般都是:
京东云开发者赞 3阅读 712
mds-spring-boot,Mybatis、Mybatis-Plus多数据源及事务处理框架
mds-spring-boot是一个基于SpringBoot2.x的、全场景支持的、多数据源框架,支持Spring-JDBC、Mybatis、Mybatis-Plus、Mybatis-Tiny、ShardingSphere、Mycat等,支持本地事务及完整的基于Spring-@Transactional声...
penggle赞 1阅读 900
Mybatis的Mapper代理对象生成及调用过程
你在mapper.xml文件中写的sql语句最终是怎么被执行的?我们编写的mapper接口最终是怎么生成代理对象并被调用执行的?这部分内容应该是Mybatis框架中最关键、也是最复杂的部分,今天文章的主要目标是要搞清楚:map...
福赞 1阅读 894
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。