我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mybatis中的test语句失效怎么办

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mybatis中的test语句失效怎么办

这篇文章主要介绍了mybatis中的test语句失效怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

mybatis test语句失效

正常情况下,写动态sql的if test或when test语句时,条件引用为双引号括单引号

如下:

 <select id="sel1" resultType="User">          select * from tb_user          <where>              <choose>                  <when test="user != null and user != ''">                      and user = #{user}                  </when>                  <when test="passwd != null and passwd != ''">                      and passwd = #{passwd}                 </when>                 <otherwise>                     and 1 = 1                 </otherwise>             </choose>         </where> </select>

但是今天发现一个问题,当传入的值为0或者1时,sql失效不被执行。

如下:

<when test="user == '1‘ ">  and user = #{user}</when>

之后,发现是MyBatis自身解析的问题,在标签 中的内容,MyBatis是使用的OGNL表达式来进行解析的,这个地方需要注意下,单引号内有一个字符的情况下,OGNL会将其以 java 中的 char 类型进行解析,那么此时 char 类型与参数 String 类型用等号进行比较的时候结果都是false。

解决方案也很简单

就是把test 中的单个字符用双引号括起来。

<if test='param != "*"'>    <choose>          <when test='param.indexOf("sub") != -1'>                  </when>          <otherwise>                       </otherwise>      </choose> </if>

mybatis test判断注意事项

在使用mybatis进行判断的时候,一定要注意传入的数据类型与判断的目标值类型是否一致。

最近在一次开发过程,

误将一个传入的整型数据使用了下面的判断方式

<if test="appType != null and appType != ''">    and a.c_appType = #{appType}</if>

其中,appType是一个整型数据。可以看到,在test判断里面使用了 appType != ''。

在进行业务功能测试的时候发现,当传入的值是0时,该条件筛选没有起作用,通过调试发现,mybatis会将空字符串转换成double类型的0.0

如下图所示:

mybatis中的test语句失效怎么办

同样整数数据也会转换为double类型

如下图所示:

mybatis中的test语句失效怎么办

所以,mybatis在判断的时候,数字0和空字符串是相等的,而我们的if判断里,是两者不相等时该条件才会起作用。

因此,在使用mybatis判断的时候,一定要注意类型是否一致,数字类型就不要判断空字符串的情况了。

感谢你能够认真阅读完这篇文章,希望小编分享的“mybatis中的test语句失效怎么办”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mybatis中的test语句失效怎么办

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis中的test语句失效怎么办

这篇文章主要介绍了mybatis中的test语句失效怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mybatis test语句失效正常情况下,写动态sql的if tes
2023-06-29

mybatis中update语句执行无效怎么解决

这篇文章主要讲解了“mybatis中update语句执行无效怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mybatis中update语句执行无效怎么解决”吧!项目里mybatis有
2023-06-21

MyBatis中怎么执行SQL语句

在MyBatis中执行SQL语句可以通过Mapper接口和映射文件来实现。以下是一般步骤:1、创建Mapper接口:在Mapper接口中定义需要执行的SQL语句,例如查询、更新、删除等操作。public interface UserMa
MyBatis中怎么执行SQL语句
2024-03-07

php更新语句执行失败怎么办

php更新语句执行失败的解决办法:1、打开相应的PHP文件;2、找到“update set name='1231' from xsb where sex= '...'”语句;3、修改更新语句为“update set from xsb name='1231' where sex= '...'”即可。
2023-05-14

mybatis if test条件判断语句中的判断问题实例分析

本文小编为大家详细介绍“mybatis if test条件判断语句中的判断问题实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis if test条件判断语句中的判断问题实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-06-29

MyBatis中SQL语句是怎么执行的

MyBatis中的SQL语句执行流程大致如下:配置文件:首先在配置文件(通常是mybatis-config.xml)中配置数据库连接信息、映射文件等。映射文件:在映射文件(通常是mapper.xml)中编写SQL语句、参数映射、结果映射等。
MyBatis中SQL语句是怎么执行的
2024-04-23

怎么在MyBatis中执行SQL语句

这期内容当中小编将会给大家带来有关怎么在MyBatis中执行SQL语句,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基础组件我们要理解 Mybatis 的执行过程,就必须先了解 Mybatis 中都有哪一
2023-06-15

mybatis的insert语句怎么使用

MyBatis 的 insert 语句可以通过 XML 配置文件或者注解方式进行使用。1. XML 配置文件方式:在 Mapper XML 文件中,使用 `` 标签定义 insert 语句。示例:```xmlINSERT INTO user
2023-09-27

MyBatis中怎么执行动态SQL语句

MyBatis中执行动态SQL语句的方式是通过使用动态SQL语句的标签来实现。在MyBatis中,有以下几种常用的动态SQL标签:if标签:用于判断条件是否成立,如果条件成立则执行其中的SQL语句。choose、when、otherwis
MyBatis中怎么执行动态SQL语句
2024-04-09

Java中怎么拼接SQL语句到mybatis的xml

这篇文章将为大家详细讲解有关Java中怎么拼接SQL语句到mybatis的xml,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关键语句:StringBuilder whereSql = new Strin
2023-06-15

react里的require失效怎么办

react里的require失效是因为require返回一个ES模块而不是字符串,其解决办法就是通过“require('../path/to/image.jpg').default;”方式引入即可。
2023-05-14

mybatis中insert语句的用法是什么

在MyBatis中,使用insert语句来向数据库中插入数据。insert语句的用法如下:在Mapper XML文件中编写insert语句,如下所示:
mybatis中insert语句的用法是什么
2024-03-11

Mybatis的mapper.xml中if标签test判断怎么使用

本文小编为大家详细介绍“Mybatis的mapper.xml中if标签test判断怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis的mapper.xml中if标签test判断怎么使用”文章能帮助大家解决疑惑,下面跟着小
2023-07-01

MyBatis在SQL语句中怎么获取list的大小

这篇文章主要讲解了“MyBatis在SQL语句中怎么获取list的大小”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MyBatis在SQL语句中怎么获取list的大小”吧!MyBatis在S
2023-07-05

MyBatis中怎么设置SQL语句的超时时间

在MyBatis中,可以通过在, , , 等标签中添加timeout属性来设置SQL语句的超时时间,单位为秒。例如: