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 特殊符号转义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Redisson RedLock红锁加锁实现过程及原理

    Redisson RedLock红锁加锁实现过程及原理

    本文主要介绍了Redis中Redisson红锁(Redlock)使用原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java排序算法总结之插入排序

    Java排序算法总结之插入排序

    这篇文章主要介绍了Java排序算法总结之插入排序,较为详细的分析了插入排序的原理与java实现技巧,需要的朋友可以参考下
    2015-05-05
  • Java 数组内置函数toArray详解

    Java 数组内置函数toArray详解

    这篇文章主要介绍了Java 数组内置函数toArray详解,文本详细的讲解了toArray底层的代码和文档,需要的朋友可以参考下
    2021-06-06
  • spring cloud中微服务之间的调用以及eureka的自我保护机制详解

    spring cloud中微服务之间的调用以及eureka的自我保护机制详解

    这篇文章主要介绍了spring cloud中微服务之间的调用以及eureka的自我保护机制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Socket结合线程池使用实现客户端和服务端通信demo

    Socket结合线程池使用实现客户端和服务端通信demo

    这篇文章主要为大家介绍了Socket结合线程池的使用来实现客户端和服务端通信实战demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 关于Java的动态代理机制

    关于Java的动态代理机制

    这篇文章主要介绍了关于Java的动态代理机制,动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术,需要的朋友可以参考下
    2023-05-05
  • Java实现批量向mysql写入数据的方法

    Java实现批量向mysql写入数据的方法

    这篇文章主要介绍了Java实现批量向mysql写入数据的方法,涉及java基于JDBC连接mysql数据库及写入数据的相关操作技巧,非常简单实用,需要的朋友可以参考下
    2017-12-12
  • 利用Java编写一个出敬业福的小程序

    利用Java编写一个出敬业福的小程序

    新年将至,又开始扫福活动,每年的敬业福成了大家难过的坎。所以本文将介绍一个通过Java编写的一款福字生成器,感兴趣的小伙伴可以试一试
    2022-01-01
  • Java 关于时间复杂度和空间复杂度的深度刨析

    Java 关于时间复杂度和空间复杂度的深度刨析

    算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小
    2021-11-11
  • Springboot 集成 lombok.jar过程解析

    Springboot 集成 lombok.jar过程解析

    这篇文章主要介绍了Springboot 集成 lombok.jar过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论