MyBatis中特殊符号的转义

 更新时间:2024年01月16日 11:28:37   作者:笑红尘自来也  
编写SQL中会用到<,>,,>= 等,但是在mybatis中不可以这么写,与xml文件的元素冲突,所以需要转义,本文主要介绍了MyBatis中特殊符号的转义,主要介绍了两种转义方式,感兴趣的可以了解一下

描述

MyBatis中特殊符号的转义,有两种方式转义。

第一种

描述空格小于大于小于等于大于等于单引号双引号
原符号<><=>=&"
转义符&nbsp;&lt;&gt;&lt;=&gt;=&amp;&apos;&quot;
<select id = "selectUserByAge" resultType="com.test.hiioc.model.UserTable" >
    select
        id,userName,age
    from
        userTable
    <where>
    	1 = 1
        <if test = "userTable.startDate!=null">
            SIGNING_DATE &gt;= #{userTable.startDate}
        </if>
        <if test = "userTable.endDate != null">
            and SIGNING_DATE &lt;= #{userTable.endDate}
        </if>
    </where>
</select>

在编写MyBatis的XML映射文件时,对于需要在SQL语句中使用的这些特殊字符,应当使用上表中的转义写法。例如,如果你想在<if>标签中使用大于号,你应该这样写:

<if test="value &gt; 10">
  ...
</if>

这样,当MyBatis解析XML文件时,会将>正确地解释为大于号(>),而不会与XML标签的结束符混淆。

同理,如果需要在SQL语句中使用小于号,应该使用<。例如:

<if test="value &lt; 10">
  ...
</if>

对于其他特殊字符,如你需要在SQL语句中包含一个字面上的&字符,你应该写成&,以免XML解析器将其误认为是一个实体的开始。

第二种

使用 <![CDATA[>=]]> 进行转义

<select id = "selectUserByAge" resultType="com.test.hiioc.model.UserTable" >
    select
        id,userName,age
    from
        userTable
    <where>
        IS_DELETE = 1
        /*时间段查询*/
        <if test = "userTable.startDate != null">
            and SIGNING_DATE <![CDATA[>=]]> #{userTable.startDate}
        </if>
        <if test = "userTable.endDate!=null">
            and SIGNING_DATE <![CDATA[<=]]> #{userTable.endDate}
        </if>
    </where>
</select>

 代码举例2

            <if test="demoWay != null  and test="demoWay != '' ">
                <if test="demoWay == 'equal' ">
                    <![CDATA[ and demo_str = #{demoStr} ]]> </if>
                <if test="demoWay == 'gt' ">
                    <![CDATA[ and demo_str > #{demoStr} ]]> </if>
                <if test="demoWay == 'lt' ">
                    <![CDATA[ and demo_str < #{demoStr} ]]> </if>
                <if test="demoWay == 'gte' ">
                    <![CDATA[ and demo_str >= #{demoStr} ]]> </if>
                <if test="demoWay == 'lte' ">
                    <![CDATA[ and demo_str <= #{demoStr} ]]> </if>
            </if>

代码举例3

SELECT
        d.`name` dept,
        count( * ) xx_num,
        sum( CASE e.result WHEN 1 THEN 1 ELSE 0 END ) qq_num,
        sum( CASE e.result WHEN 1 THEN 1 ELSE 0 END )/count( * ) qq_percent,
        sum( CASE WHEN e.xx<![CDATA[>= ]]> 90 THEN 1 ELSE 0 END ) qq1,
        sum( CASE WHEN e.xx<![CDATA[<= 89 AND e.xx >= ]]> 80 THEN 1 ELSE 0 END ) qq2,
        sum( CASE WHEN e.xx<![CDATA[<= 79 AND e.xx >= ]]> 70 THEN 1 ELSE 0 END ) qq3,
        sum( CASE WHEN e.xx<![CDATA[<= 69 AND e.xx >= ]]> 60 THEN 1 ELSE 0 END ) qq4,
        sum( CASE WHEN e.xx<![CDATA[<= ]]> 59 THEN 1 ELSE 0 END ) qq5
        FROM
        ee e

注意事项

  • 当使用<![CDATA[ ... ]]>时,需要注意不要让]]>出现在你的SQL语句中,因为这是CDATA区块的结束标记。
  • 在某些情况下,混合使用CDATA和转义字符可能会使SQL语句更清晰易读,尤其是在SQL语句非常长或复杂时。

到此这篇关于MyBatis中特殊符号的转义的文章就介绍到这了,更多相关MyBatis 特殊符号转义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java关键字之native详解

    Java关键字之native详解

    这篇文章主要为大家介绍了Java关键字之native,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • JAVA实现 springMVC方式的微信接入、实现消息自动回复实例

    JAVA实现 springMVC方式的微信接入、实现消息自动回复实例

    本篇文章主要介绍了JAVA实现 springMVC方式的微信接入、实现消息自动回复,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-12-12
  • 详解spring security filter的工作原理

    详解spring security filter的工作原理

    这篇文章主要介绍了详解spring security filter的工作原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 简单理解java泛型的本质(非类型擦除)

    简单理解java泛型的本质(非类型擦除)

    泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。下面小编来简单讲一讲泛型
    2019-05-05
  • Java锁机制的使用与实战分析

    Java锁机制的使用与实战分析

    本文全面探讨了Java中的锁机制,包括synchronized关键字、内置锁、显示锁、读写锁、条件变量、乐观锁、悲观锁、自旋锁和StampedLock,每个锁机制都有其特点和适用场景,开发者应根据具体需求选择合适的锁实现,以确保多线程程序的并发安全和性能
    2026-01-01
  • 解析java创建对象的全过程

    解析java创建对象的全过程

    文章总结了Java创建对象的几种方式,包括使用new关键字、反射、clone和反序列化,此外,还详细描述了创建对象的过程,包括类加载、内存分配和对象初始化,最后,强调了并发情况下的操作原子性问题
    2025-12-12
  • 使用chatgpt实现微信聊天小程序的代码示例

    使用chatgpt实现微信聊天小程序的代码示例

    这篇文章主要介绍了使用chatgpt实现微信聊天小程序(秒回复),文中有详细的代码示例,对大家了解chatgpt聊天有一定的帮助,感兴趣的同学可以参考阅读
    2023-05-05
  • 关于MapStruct的使用教程

    关于MapStruct的使用教程

    MapStruct 是一个用于 Java Bean 映射的代码生成器,通过注解处理器自动生成映射代码,以下是 MapStruct 的基本使用方法:添加依赖、定义映射接口、使用映射方法、定义自定义映射方法、处理复杂映射、集成 Spring 等
    2025-02-02
  • Java中使用异或运算符实现加密字符串

    Java中使用异或运算符实现加密字符串

    这篇文章主要介绍了Java中使用异或运算符实现加密字符串,本文直接给出实现代码,以及运算结果加密实例,需要的朋友可以参考下
    2015-06-06
  • 基于feign传参MultipartFile问题解决

    基于feign传参MultipartFile问题解决

    这篇文章主要介绍了基于feign传参MultipartFile问题解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论