首页 > 其他分享 >关于Mybatis中if标签未生效问题

关于Mybatis中if标签未生效问题

时间:2022-08-15 18:22:49浏览次数:105  
标签:status 标签 app blog 类型 生效 Mybatis

今日索引

今天需要更改以前写的功能,增加字段来当控制器判断是执行方案一还是方案二

在前端增加传值时,纠结了是传Boolean还是整形还是字符串类型

因为是复选框类型,所以默认传的是Boolean类型,一开始传参不成功。以为是JS无法传布尔类型给后端,所以在前端做了判断更改了传的类型为字符类型的1与0

结果还是不成功,DEBUG之后发现是实体类中新增的字段未成功启用,将package clean&Install之后传值成功。

 

 

实际解决方法

在更改Mapper时用了大量的<if>标签,可读性很差耦合性强,所以改成了<chose><when>标签。在更改之后出现<chose>标签外的if<标签>条件未生效

查阅资料时初发现:

mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。

 


如何解决:

三种:

 

  1. 加 .toString()
1 <if test="computationRule == '1'.toString()">
2    FROM app_sz_bbb a
3 </if>
4 <if test="computationRule == '2'.toString()">
5    FROM app_ccc a
6 </if>
  1. 单引号 换成双引号
1 <if test='computationRule == "1"'>
2    FROM app_sz_bbb a
3 </if>
4 <if test='computationRule == "2"'>
5    FROM app_ccc a
6 </if>

  3.java 传值为 数值类型 Integer int之类的

1 <if test='computationRule == 1'>
2    FROM app_sz_bbb a
3 </if>
4 <if test='computationRule == 2'>
5    FROM app_ccc a
6 </if>

 

参考资料:https://blog.csdn.net/qq_43167632/article/details/110189333

 

但前端与后端在改为Integer类型后,还是判断未生效,不过情况比前面稍微好一点就是变成部分未生效

在又经过繁琐的查阅资料后,得出一下结论:

 

前端传入status=1,查询的结果与预期一致,status=1的行记录被查询出来。当status=0时,status像未生效一样,查询出的行记录包含status=1和status=0的记录,这真是见了鬼了,我明明赋值写了查询条件为status=0了啊。

其实这是mybatis的一个bug,当判断条件status为整型时,如果status=0时,if test里会判断status=’ '。

建议是

1         <if test="status !=null and status != ''">
2             and status = #{status}
3         </if>
4 修改为
5         <if test="status !=null">
6             and status = #{status}
7         </if>

即去掉 status != ‘ ‘

 

但在更改后效果仍然不算太好

将前端传值从1,0改为1,2。mapper判断将0改为2后,程序正常运行

 

参考资料:

Mybatis整型if判断不生效,你也踩坑了吗?:https://blog.csdn.net/chanllenge/article/details/105127483

mybatis if 标签 判断不生效 :https://blog.csdn.net/qq_43167632/article/details/110189333

mybatis中动态标签「if」没有生效的原因: https://blog.csdn.net/weixin_41968562/article/details/107069557

标签:status,标签,app,blog,类型,生效,Mybatis
From: https://www.cnblogs.com/Yukino1903/p/16589220.html

相关文章

  • mybatis_05_创建mapper.xml
    创建mapper.xml示例IndicatorMapper.xml:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""h......
  • EasyCVR新建用户分组显示不生效,是什么原因?
    EasyCVR具备强大的视频接入、汇聚与管理、视频分发、设备管理、用户及角色权限管理等能力。平台可对前端接入的设备进行统一集中管理,并能支持采用设备树对设备进行分组、分......
  • html之标签
    分类:双标签、单标签在pycharm内书写HTML代码的时候你只需要写标签名然后tab就能自动补全1、head内常用标签<head><title>网页标题</title><!--css代码-->......
  • mybatis_3_使用xml构建SqlSeesionFactory
    使用xml构建SqlSeesionFactory,分为两步:第一步:创建一个XML配置文件;第二步:创建SqlSessionFactory实例;示例:第一步:创建mybatis-config2.xml文件<?xmlversion="1.0"enco......
  • MyBatis
    MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,开发者只......
  • mybatis 11: 通过map获取入参和返回值
    1.通过指定参数位置获取作用如果入参是多个且实体类无法封装所有的入参,可以通过指定参数位置进行传参,方便对多个参数进行获取用法接口//指定参数位置List......
  • Mybatis新增数据返回自增主键
    一、数据库设计选择主键自动递增二、Mybatis配置设置eyProperty="id"useGeneratedKeys="true"<insertid="insertSentence"keyProperty="id"useGeneratedKeys="tru......
  • PageHelper和mybatis-plus结合使用的坑
    推荐版本<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></depe......
  • MyBatisCodeHelperPro激活方法(有效方法)
    注意事项我的idea是2021.2.1的,新版本的idea我也不清楚。我这个版本是可以的。​编辑1、下载插件​编辑这是插件下载的地址:MybatisCodeHelperNew-Pro_免费高速下载|百......
  • 1、创建窗口界面,在界面里添加标签
    1、创建一个widget工程2、在系统自动创建的文件widget.h中添加两个标签lab1lab2#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QLabel>classW......