关于mybatis遇到Integer类型的参数时动态sql需要注意条件

目录
  • mybatisInteger类型参数动态sql注意条件
    • 例如以下拼接的动态sql
  • mybatis的坑——Integer类型参数解析问题
    • 有时候我们使用实体类传递参数时
    • 因为mybatis在解析Integer类型数据时

mybatis Integer类型参数动态sql注意条件

例如以下拼接的动态sql

<if test="work_status !=null  and work_status !='' ">
 and T.status=#{work_status,jdbcType=INTEGER}
</if>

当work_status为0时,Mybatis会将0解析为了空字符串‘’,这样if判断就为false,如果想正确添加and后的查询条件,应该改成

<if test="work_status !=null  ">
 and T.status=#{work_status,jdbcType=INTEGER}
</if>

mybatis的坑——Integer类型参数解析问题

有时候我们使用实体类传递参数时

有些属性会被设置为Integer类型,比如status、sort等,在这里,使用Integer类型参数作为条件时,要注意一点:例如

<if test="bean.activitySort != null and bean.activitySort !=""">
        AND activity_sort = #{bean.activitySort,jdbcType=VARCHAR}
</if>

这里对于bean.activitySort的判断正常情况下如果activitySort是String类型,先判空,再判断是否是空字符串,这样是正常的,但是如果activitySort是Integer类型参数,那么使用时就需要注意,此处不能对activitySort进行空字符串的判断,因为什么呢?

因为mybatis在解析Integer类型数据时

如果数据值为0,会将0解析为空字符串,这样你传入的参数就成为无效的了,所以正常使用Integer类型参数应该是下面这样:

<if test="bean.activitySort != null">
        AND activity_sort = #{bean.activitySort,jdbcType=VARCHAR}
</if>

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

(0)

相关推荐

  • MyBatis使用动态SQL标签的小陷阱

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 现在MyBatis越来越受大家的喜爱了,它的优势大家都知道,我就不多说了,直接说重点. MyBatis中提供动态SQL功能,我们可以使用<if><when&

  • Mybatis 动态SQL的几种实现方法

    案例sql脚本 DROP DATABASE IF EXISTS `javacode2018`; CREATE DATABASE `javacode2018`; USE `javacode2018`; DROP TABLE IF EXISTS t_user; CREATE TABLE t_user( id int AUTO_INCREMENT PRIMARY KEY COMMENT '用户id', name VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用户名'

  • Mybatis之动态sql标签的使用

    1.Mybatis动态sql MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形. 动态 SQL 元素和 JSTL 或基于类似

  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    目录 mybatisInteger类型参数动态sql注意条件 例如以下拼接的动态sql mybatis的坑——Integer类型参数解析问题 有时候我们使用实体类传递参数时 因为mybatis在解析Integer类型数据时 mybatis Integer类型参数动态sql注意条件 例如以下拼接的动态sql <if test="work_status !=null  and work_status !='' ">  and T.status=#{work_status,jdb

  • 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使用Integer类型查询可能出现的问题

    目录 使用Integer类型查询出现的问题 当state这个值为0的时候 mybatis判断Integer遇到的bug 场景产出 我是这样写的 使用Integer类型查询出现的问题 mapper.xml : <select id="count" parameterType="com.pinyu.system.web.page.Page" resultType="java.lang.Integer">         select co

  • MyBatis @Select注解介绍:基本用法与动态SQL拼写方式

    目录 1.@Select注解基本用法 2.@Select注解动态SQL拼写 @Select动态参数参考 1.@Select注解基本用法 @Select注解的目的是为了取代xml中的select标签,只作用于方法上面. 下面看一下@Select注解的源码介绍: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Select {     String[] value(); } 从上述可以

  • mybatis的坑-integer类型为0的数据if test失效问题

    integer类型为0的数据if test失效 mybatis的where动态判断语句if test 遇到tinyint类型为0的数据失效 发现一个mybatis的坑,有个支付表,通过状态去筛选已支付/未支付的数据,支付状态用status字段表示,status=0表示未支付,status=1表示已支付,且status类型为Integer.当选择已支付即status=1时,可以筛选成功已支付的数据列表,但是当选择未支付即status=0时,查出来的数据是未支付和已支付的所有数据. 此时就有点懵逼了

  • 使用Mybatis接收Integer参数的问题

    目录 Mybatis接收Integer参数 解决办法 Mybatis在使用Integer类型 当传人mybatis构成sql语句时 Mybatis接收Integer参数 最近在做项目的时候,在mybatis中用标签判断分页参数时,出现了问题. <if test="startRow != null and startRow != '' and selectRow != null and selectRow != ''">     LIMIT #{startRow},#{sel

  • MyBatis中如何接收String类型的参数实现

    在MyBatis学习初期,当parameterType的值为String<==>也就是接收String类型的参数时,我会通过value来接,如图: 通过value接收String类型的值舒适又简单,然而,直到有一天,我发现屡试不爽的value不给力了->接收String类型值的时候出了问题. 到底是什么凶残吓到了我的value->就是<bind/ >标签,大家请看: 这是配套数据表 查出来的结果让我很费解,用value接收值的时候出了这个问题(好好的"GZ&q

  • 一小时迅速入门Mybatis之实体类别名与多参数 动态SQL

    目录 一.说明 二.开搞 数据库表 2.1 实体类别名 2.1.1 第一种方式 2.1.2 第二种方式 2.1.3 mybatis默认别名 2.2 插入数据返回自增主键 2.2.1方式一 2.2.2 方式二 2.3 多参数 2.3.1 一个参数 2.3.2 多个参数 之实体类 2.3.3 多个参数之@Param注解 2.3.4 多个参数之Map 2.3.5 多个参数之默认 2.3.6 数组参数之基础值&实体类 2.3.7 集合参数之基础值&实体类 2.4 四大标签的说明 2.5 唠唠 一.

  • C++详解非类型模板参数Nontype与Template及Parameters的使用

    目录 非类型类模板参数 非类型函数模板参数 非类型模板参数的限制 非类型模板参数 auto 非类型类模板参数 前一章使用的例子 Stack 使用的是标准库中的容器管理元素,也可以使用固定大小的 std::array,它的优势是内存管理开销更小,数组的大小可以交给用户指定. #include <array> #include <cassert> template<typename T, std::size_t Maxsize> class Stack { private:

  • mybatis的动态sql详解(精)

    MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力.如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号.动态 SQL 可以彻底处理这种痛苦. 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中. 动态SQL元素和使用 JSTL或其他相似的基于XML的文本处理器相似.在MyBatis之前的版本中,有很多

随机推荐