聊聊Mybatis中sql语句不等于的表示

Mybatis sql语句不等于的表示

如果直接写

select * from user where id <> 217;

mybatis就会报语法错误,<>特殊字符需要转义

如下

select * from user where id &lt;&gt; 217;

使用Mybatis的时候,特殊字符需进行转义,如

&lt;&gt; <>

&amp; &

&apos; '

&quot; "

Mybatis 特殊符号(大于,小于,不等于)及常用函数总结

1、使用场景

因为我们在日常代码Mybatis 动态拼接语句时候经常使用到 大于(>,>=)、小于(<,<=)、不等于(<> ,!=)符号。由于此符号包含了尖括号,Mybatis使用的 *.xml文件格式。于是

需要之内尖括号进行相关的转义或者使用 CDATA 区段。

2、实现方式

2.1、转义特殊符号方式

注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

符号 原符号 替换符号
小于 < &lt;
小于等于 <= &lt;=
大于 > &gt;
大于等于 >= &gt;=
不等于 <> &lt;&gt;
& &amp;
单引号 ' &apos;
双引号 " &quot;

mapper文件写法:

select * form tablenme t where t.code &lt;&gt; 1

2.2、使用 CDATA 区段

所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

大于等于 <![CDATA[ >= ]]>

小于等于 <![CDATA[ <= ]]>

不等于<![CDATA[ <> ]]>

mapper文件写法:

select t.* form tablenme t where t.code <![CDATA[<>]]> 1

3、Mybatis if 判断等于一个字符串

当传入的type的值为note 的时候,if判断内的sql也不会执行。

<if test="type=='note'">
    and status = 0
</if>

mybatis是使用的OGNL表达式来进行解析的,在OGNL的表达式中,'note'会被解析成字符,因为java是强类型的,char 和 一个String 会导致不等。所以if标签中的sql不会被解析。

需要解决这个问题,只需要把代码修改成:

    <if test='type=="note"'>  //注意是双引号,不是单引号!!!
        and status = 0
    </if> 

4、mysql二进制转成字符串

SELECT  cast(fieldName as CHAR)  FROM tablename 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis中sql语句CDATA标签的用法说明

    sql语句CDATA标签的用法 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 "&" 是非法的: "<" 会产生错误,因为解析器会把该字符解释为新元素的开始: "&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始: 在mapper文件中写sql语句时,遇到特殊字符时,如:"<&

  • Mybatis中的动态SQL语句解析

    这篇文章主要介绍了Mybatis中的动态SQL语句解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Mybatis中配置SQL有两种方式,一种是利用xml 方式进行配置,一种是利用注解进行配置. Mybatis使用注解配置SQL,但是由于配置功能受限,而且对于复杂的SQL而言可读性很差,所以很少使用. Mybatis常用xml配置的方式,使用xml的几个简单的元素,便能完成动态SQL的功能,大量的判断都可以在mybaties的映射xml里面配

  • 详解Java的MyBatis框架中动态SQL的基本用法

    有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysql的函数生成Id.这时我们可以使用动态sql.下文均采用mysql语法和函数(例如字符串链接函数CONCAT). selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使用myBatis的select

  • MyBatis 执行动态 SQL语句详解

    大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: <select id="executeSql" resultType="map"> ${_parameter} </select> 你可以如下调用: sqlSession.selectList("executeSql", "select * from sysuser where enabled

  • Mybatis 动态sql if 判读条件等于一个数字的案例

    在Mybatis中 mapper中 boolean updateRegisterCompanyFlag(@Param(value = "companyId") String companyId, @Param(value = "flag") String flag); 传入的flag类型为String,但在mapper.XML中进行判断是下意识地以为判断的值要加上引号 <if test=" '4' == flag "> , LAST_

  • 聊聊Mybatis中sql语句不等于的表示

    Mybatis sql语句不等于的表示 如果直接写 select * from user where id <> 217; mybatis就会报语法错误,<>特殊字符需要转义 如下 select * from user where id <> 217; 使用Mybatis的时候,特殊字符需进行转义,如 <> <> & & &apos; ' " " Mybatis 特殊符号(大于,小于,不等于)及常用函数

  • Oracle在Mybatis中SQL语句的配置方法

    数据库中有下划线的字段在实体中应采用驼峰命名法,如P_NAME对应pName,实例如下: 1.XML文件中SQL语句配置(Geteway.xml文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-m

  • Mybatis中 SQL语句复用

    mapper.xml 中共用 mapper.xml 间共用 项目中也许我们会遇到一段sql语句被多个查询.增加等语句用到的情况,如何去偷懒呢,复用sql无疑是较好的选择 这里只提供简单的示范: 如果只是单表查询,并且希望共用的sql只会出现在同一个mapper.xml文件中,那么我们可以直接在 <mapper namespace="XXXXX"></mapper> 中写下面的业务代码 <sql id="unitSql"> a.us

  • 浅谈mybatis中SQL语句给boolean类型赋值问题

    我就废话不多说了,大家还是直接看代码吧~ <select id="getBiTree" parameterType="String" resultMap="MenuVoListMap"> SELECT m.menu_id , m.parent_id , m.`name` , 1 opens FROM menu m WHERE m.is_valid = 1 AND (m.type = 0 or m.type = 1) and m.men

  • 在IDEA中安装MyBatis Log Plugin插件,执行mybatis的sql语句(推荐)

    查看代码执行mybatis的sql语句 File–>Settings–>Plugins 搜索 MyBatis Log Plugin Installed安装之后重启,点击上方的Tools就能看到 然后debug执行代码之后 点击启动MyBatis Log Plugin插件 就可以查看每一步执行的sql 到此这篇关于在IDEA中安装MyBatis Log Plugin插件,执行mybatis的sql语句(推荐)的文章就介绍到这了,更多相关idea 安装MyBatis Log Plugin插件内容请

  • 解决mybatis执行SQL语句部分参数返回NULL问题

    今天在写代码的时候发现一个问题:mybatis执行sql语句的时候返回bean的部分属性为null,在数据库中执行该sql语句能够正常返回,把相关代码反反复复翻了个遍,甚至都重启eclipse了,依旧没解决问题,后来网上搜了一下,还真有类似的问题. 闲话少说,直接说问题,该sql语句是自己写的,resultType直接用了该bean全名称,最终导致部分属性显示为null, 原来的写法: <select id="selectByArticle" parametertype=&quo

  • 在mybatis执行SQL语句之前进行拦击处理实例

    比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql. 实用性比较强. import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Properties; import org.apache.ibatis.e

  • SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)

    关于logback日志的详解见这位仁兄的博客:Spring Boot-日志配置(超详细) 我在这就开门见山直接介绍我们项目日志的配置使用吧!~ 1.基本介绍 默认情况下,Spring Boot项目就会用Logback来记录日志,并用INFO级别输出到控制台.如下图: 实际开发中我们不需要直接添加logback日志依赖. 你会发现 spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 lo

  • MyBatis控制台显示SQL语句的方法实现

    一.单独使用MyBatis (1)在mybatis.xml配置文件中添加如下配置 <setting name="logImpl" value="STDOUT_LOGGING" /> (2)使用slf4j输出 因此要先添加slf4j的依赖 <dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifact

随机推荐