首页 > 其他分享 >mybatis if标签判断Integer类型的值不等于0 (!=''等价于!=0)

mybatis if标签判断Integer类型的值不等于0 (!=''等价于!=0)

时间:2023-07-14 10:01:44浏览次数:36  
标签:code 标签 action 判断 mybatis Integer

场景

当传入的activityInfoDTO属性codeAction的值为0时,需要通过状态(code_action =0或1)来查询数据,code_action 类型为Integer

            <if test="activityInfoDTO.codeAction != null and activityInfoDTO.codeAction != ''">
                and code_action = #{activityInfoDTO.codeAction}
            </if>

当传入code_action =0时,并没有进入该条件里面;但传入1或其他都可以根据code_action 条件查询;为什么呢?

通过源码了解到,mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于''时,例如code_action != ''OGNL会返回''的长度,

源码:(s.length() == 0) ? 0.0 : Double.parseDouble( s )

因此表达式code_action != ''被当做code_action != 0来判断,所以当code_action =0时,if条件判断不通过。

我们只需要将code_action !=''条件去掉就可以解决上面这个问题。

总结

尽量使用包装类:我们知道java的基本数据类型都会有默认值,如果直接使用基本数据类型会给我们的查询带来不必要的麻烦,所以尽量使用包装类代替;

标签:code,标签,action,判断,mybatis,Integer
From: https://www.cnblogs.com/fuqian/p/17552900.html

相关文章

  • MyBatisPlus
    一、MyBatisPlus简介SpringBoot整合MyBatisPlus入门程序①:创建新模块mybatis-plus-01③:添加相关的起步依赖多余的文件和依赖配置都可以删除了pom.xml文件如下:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependen......
  • Mybatis把0识别为null解决方法
    问题描述:以下方法写出来的id不能识别到0<iftest="id!=nullandid!=''">ANDid=#{id}</if>原因分析:Mybatis会自动将0识别为null,加上判断里面有空字符串的判断,导致了数据库无法存入0解决方案:加上一个0的判断条件即可<iftest="id!=nullandid!=''orid==0"......
  • mybatis-plus QueryWrapper and or 连用组成查询条件
    我的代码片段StringnumberCode=(String)params.get("numberCode");if(StringUtils.isNotBlank(numberCode)){wrapper.and(qw->qw.eq("number",numberCode).or().eq("code",numberCode));//wr......
  • MyBatis返回resultType=Map的用法, 返回List<Map<String,String>>
    <selectid="statOnlineAndNotlineNumber"resultType="java.util.Map"parameterType="java.lang.String">SELECTonline_stateasstate,COUNT(online_state)asnumberFROMwl_rm_t_vehicle_state<iftest="operatorCode!=nu......
  • mybatis定义
    MyBatis(前身为iBatis)是一种开源的持久层框架,它用于简化数据库访问的过程。它提供了一种将数据库操作与Java对象之间的映射的方式,使得开发人员可以通过配置文件或者注解来定义SQL查询语句,然后通过MyBatis框架来执行这些查询并将结果映射到相应的Java对象中。MyBatis的核心思想是......
  • MyBatis动态表名和字段,减轻很大工作
    在动态sql解析过程,#{}与${}有本质差别1.#{}是基于JDBC的preparedStaement,${}是基于JDBC的Statement2.#{}表示的是预编译的参数,就是替代在SQL语句中的占位符‘?’,并会将参数作为字符串处理;如果要动态传入表名或者字段名,不能使用#{}3.#{}是使用预编译传参,可以预防SQL......
  • Leangoo领歌Scrum工具标签升级,企业级标签组上线
    在Leangoo领歌敏捷工具中,标签通常用作对任务的分类,或任务的优先级区分等。这次我们发布了大家期待已久的“企业级标签组”功能,标签可以统一管理啦~之前,Leangoo的标签功能只限于单个看板使用,需要创建一个看板编辑一次标签,各个看板的标签是相互独立的,导致无法在企业内使用统一规范的......
  • NFC蓝牙配对标签数据格式
    原文:https://www.amobbs.com/thread-5581854-1-1.htmlNFC蓝牙配对标签,用于简化蓝牙配对过程,当带NFC功能的设备触碰到标签时,可以读取到内部的数据,触发设备打开蓝牙(安卓设备支持,WP8需要先打开蓝牙)。NFC标签,这里指的是TYPE2TAG,即T2T标签,其实就是一张大容量mifareul卡,但对多种设备......
  • vue 打开浏览器新标签页预览 pdf 和 txt 文档,以及新标签页标题修改
    1//在线查看2showOnline({id,fileExt,fileName}){3if(fileExt&&['jpg','jpeg','gif','bmp','png'].includes(fileExt.toLowerCase())){4download(`/file-item/${id}/downl......
  • MyBatis,mapper找不到方法
       项目目录如下,可以看到是接口映射xml文件的mybatis此时运行项目会出现找不到save方法 解决方法:确保接口与xml文件路径一致在xml文件上再建一级mapper,并将其移入其中可  ......