关于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>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
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之前的版本中,有很多
随机推荐
- Windows下快速搭建NodeJS本地服务器的步骤
- Javascript中判断一个值是否为undefined的方法详解
- java 抽象类的实例详解
- vue.js异步上传文件前后端实现代码
- JS实现完美include加载功能代码
- asp.net获取服务器基本信息的方法代码
- php图片水印添加,压缩,剪切的封装类实现
- JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
- jQuery focus和blur事件的应用详解
- Android获取apk签名指纹的md5值(防止重新被打包)的实现方法
- 详解Spring MVC4 纯注解配置教程
- PHP生成静态HTML文档实现代码
- 网管实战 服务器为什么无法进行自动备份
- Java多线程Atomic包操作原子变量与原子类详解
- Spring Boot 与 Kotlin 使用Redis数据库的配置方法
- 基于PowerShell在Ubuntu系统的使用详解
- 查看远程 Linux 系统中某个端口是否开启的三种方法
- 易语言HOSTS式反钓鱼拦截源码
- Python+threading模块对单个接口进行并发测试
- python设计tcp数据包协议类的例子