解决使用Mybatis更新数据时出现的SQL string cannot be empty的报错

  
   哈哈,已经好久没有在早上更新技术博客了,今早打算更新一篇技术博客!

   Mybatis相信对于做Java开发的同学来说已经非常熟悉,,但大家在使用过程中是否有碰到Error updating database. Cause: java.sql.SQLException: SQL String cannot be empty 这样的报错,在上周项目开发过程中我还真遇到了这个问题。不管三七二十一,先上图:
在这里插入图片描述
   从图上的报错信息我们可以大概出推断出可能是在某个标签内漏了某段sql,或者也有可能是if标签中的条件不生效,从而导致了sql语句没能动态生成。与其在这里瞎猜,还不如找到特定的代码去寻找原因。下面先贴出两个截图,大家可以慢慢细品下:
在这里插入图片描述
在这里插入图片描述
   当时自己从表面上看似乎没发现任何问题,但经过调试和不断研究后才发现原来在批量更新sql语句时memberCardThirdpartyList这个列表是为empty的,也就是一个空列表,所以导致了Mybatis无法生成动态sql语句。那么该如何解决呢?很简单!有如下两种方法:

  1. 第一种方法:可以在代码层面对memberCardThirdpartyList这个列表进行判空处理。比如可以使用CollectionUtils的isEmpty方法。如下图所示:
    在这里插入图片描述
  2. 第二种方法:可以在Mybatis层面使用if标签对列表进行判空处理,如下图所示:

  这是自己在使用Mybatis进行持久层开发时遇到的一个坑,希望对大家有帮助。当时在群上跟同事讨论时,有个同事说得特别好,现在就引用那个同事的话来结束此篇博客:

mybatis其实是智能的,只是你的sql里用了item.xxx,item为空,空里面取属性,就报错了。如果是单条数据那种,不出现 对象.属性 这种取值,mybatis就不会执行。
mybatis 这个功能确实是需要做下增强,判断下传的list是否为空。
这类问题一般就两种方法:1.代码层面先判空 ;2.sql那里先判空,即<if test=“list != null and list.size() > 0”>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这个问题发生在使用MyBatis出现了类型转换异常。具体地说,当尝试将一个`java.lang.String`类型的值转换为`java.lang.Integer`类型报错提示`java.lang.String cannot be cast to java.lang.Integer`。该错误通常发生在使用MyBatis的条件构造器,尝试在查询中使用`Integer`类型的属性。这个错误表明在代码中试图将一个`String`类型的值强制转换为`Integer`类型,转换失败了。 解决这个问题的方法是确保在使用`java.lang.String`作为查询条件的候,不会影响到`Integer`类型的属性。这可能需要在代码中对数据类型进行适当的处理,例如,使用合适的方法将`String`类型的值转换为`Integer`类型,或者使用其他方式避免类型转换错误。 另外,也可以考虑使用其他的查询方式,比如使用MyBatis的XML配置文件中的条件查询语句来避免这个问题的发生。 总结来说,这个问题的解决方法是确保在使用MyBatis,正确处理数据类型,避免将`java.lang.String`类型的值错误地转换成`java.lang.Integer`类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java.lang.String cannot be cast to java.lang.Integer](https://blog.csdn.net/weixin_47742051/article/details/118732661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melo_FengZhi

您的鼓励对我就是巨大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值