首页 > 其他分享 >MyBatis错误(一)

MyBatis错误(一)

时间:2024-09-01 23:21:23浏览次数:8  
标签:username 错误 分组 user MyBatis hezy id User

说明:记录一次MyBatis错误,错误信息如下,说数字转换异常,显然,把一个字符串类型转为数字类型,肯定是不行的。

2024-08-29 19:44:43.198 ERROR 24216 --- [nio-9090-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "hezy"
### Cause: java.lang.NumberFormatException: For input string: "hezy"] with root cause

java.lang.NumberFormatException: For input string: "hezy"

在这里插入图片描述

场景

(前端)

在这里插入图片描述

(接口)

    @GetMapping("/test")
    public void test() {
        User user = new User();
        user.setId(1);
        user.setUsername("hezy");
        userRepository.selectUserById(user);
    }

(Repository)

    User selectUserById(@Param("user") User user);

定位到项目的动态SQL,如下,这是我本地复现的Demo,在实际的项目中,是一个查询条件字段,表示某个分组,可选“所有分组“或者”具体某个分组“,当时的开发应该是和前端约定过,当值为0时表示为所有分组,所以这个字段传递可能是0,或者是具体的分组ID,因此就有了类似下面这样的判断

(动态SQL)

    <select id="selectUserById" resultType="com.hezy.pojo.User">
        SELECT * FROM i_users WHERE id = #{user.id}
        <if test="user.username != null and user.username != '' and user.username != '0'">
            and username = #{user.username}
        </if>
        <if test="user.username == '0'">
            and username = '0'
        </if>
    </select>

分析&解决

显然,这里是有隐型的类型转换,但一眼看过去,动态SQL里面的判断都是字符串,0也用单引号包起来了。无计可施之际,我想到单引号在Java中表示的是字符,而字符又能自动转为数字进行计算,如下,所以我想是不是MyBatis底层把’0’当做数字了,然后把左边的参数也尝试转为数值类型,造成了这次错误。

在这里插入图片描述

于是,我想到把0通过双引号包起来,这铁定就是字符串了,双引号在XML里面需要通过&quot;转义,如下:

    <select id="selectUserById" resultType="com.hezy.pojo.User">
        SELECT * FROM i_users WHERE id = #{user.id}
        <if test="user.username != null and user.username != '' and user.username != &quot;0&quot;">
            and username = #{user.username}
        </if>
        <if test="user.username == &quot;0&quot;">
            and username = '0'
        </if>
    </select>

成功了,golder~,这个问题困扰了很久

在这里插入图片描述

解决:if标签里面对数值的判断,如果你想要的是判断字符串,右边的数值需要用&quot;包起来。

标签:username,错误,分组,user,MyBatis,hezy,id,User
From: https://blog.csdn.net/qq_42108331/article/details/141689626

相关文章

  • PostgreSQL -- 使用 Mybatis 时对数据库的多个删除操作
     在Java中使用Mybatis与PostgreSQL数据库进行交互时,删除操作的语句根据不同的场景应用不同。 1.删除表内所有记录删除表内所有的记录。谨慎使用!<!--1.删除表内所有记录--><deleteid="deleteALl">deletefromtable_name;</delete>2......
  • 如何解决《罗马2全面战争》中的twitchsdk_32_release.dll错误模块跳出问题?实用技巧与
    当您启动《罗马2全面战争》时,可能会遇到与twitchsdk_32_release.dll相关的错误提示,这可能导致游戏无法正常运行。本篇文章将深入探讨这一问题的原因以及提供多种解决方法,帮助您顺利启动游戏。twitchsdk_32_release.dll错误模块跳出的原因twitchsdk_32_release.dll文件出现......
  • 战地1弹窗错误DirectX Error怎么办?《战地1》DirectX错误修复手册
    《战地1》是一款广受欢迎的第一人称射击游戏,但在游玩过程中,一些玩家可能会遇到DirectX错误弹窗提示,这通常意味着游戏在运行时遇到了与DirectX相关的兼容性或配置问题。本文将详细介绍这种错误的原因以及如何解决这一问题。DirectX错误的原因DirectX版本过旧: 如果您的计算机......
  • OpenGL32.dll错误:无法找到入口点的速效修复秘籍及故障全面排查策略
    遇到OpenGL32.dll错误,通常意味着系统中的OpenGL库文件可能损坏或不兼容,这里提供一些解决方案来帮助您修复这个问题:1.更新图形驱动程序:•访问您的显卡制造商官网(例如NVIDIA、AMD或Intel),下载并安装最新的图形驱动程序。正确的驱动程序能够确保OpenGL组件正常工作。2.系统文件......
  • springboot+vue+mybatis计算机毕业设计飞机订票系统+PPT+论文+讲解+售后
    快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式。他们不仅希望页面简单大方,还希望操作方便,可以快速锁定他们需......
  • MyBatis中的#和$:深入解析与实战应用
    MyBatis中的#和$:深入解析与实战应用作为一名编程博客专家,我将带领大家深入探讨MyBatis中#和$的区别,并通过详细的代码示例和解释,帮助大家全面理解其工作原理及实际应用。前置知识在深入探讨之前,我们需要了解一些基本概念:MyBatis:一个持久层框架,支持自定义SQL、存储过程以......
  • nginx出现403错误的解决方法
    nginx出现403错误的解决方法 2024/08/3117:06:52[error]26005#26005:*11"/root//frontend/dist/index.html"isforbidden(13:Permissiondenied),client:220.196.160.53,server:81.70.112.191,request:"GET/HTTP/1.1",host:"81.70.112.1......
  • springboot+vue+mybatis计算机毕业设计电影影评的垂直搜索引擎+PPT+论文+讲解+售后
    近年来,科技飞速发展,在经济全球化的背景之下,大数据将进一步提高社会综合发展的效率和速度,大数据技术也会涉及到各个领域,而爬虫实现网站数据可视化在网站数据可视化背景下有着无法忽视的作用。管理信息系统的开发是一个不断优化的过程,随着网络大数据时代的到来,管理信息系统与大......
  • springboot+vue+mybatis计算机毕业设计房屋租赁管理系统+PPT+论文+讲解+售后
    随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,房屋租赁也是比较难实施的。如果开发一款房屋租赁管理系统,可以让用户在最......
  • FireDAC链接Oracle 出现ora-1309 错误的完整解决
    环境:笔记本上安装的64位Windows7,64位Oracle11.2,C++Builder1132位。目标:使用FireDAC连接Oracle。过程:1.检查oracle客户端连接。使用sqlplus连接,没有任何问题。使用PLSQLDeveloper64位连接,没有任何问题。2.创建32位VCLWindowsForm.放置一个FDCConnection。设置Par......