MyBatis错误

news2024/9/21 22:34:01

说明:记录一次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;包起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2086430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ部署单机版及集群版本(Docker部署)

目录 前言 单机版部署 1. 准备工作 2. 创建Docker网络 3.启动NameServer 4.启动Broker 5.启动RocketMQ控制台 集群版部署 1.启动NameServer 2.启动Broker 配置文件说明 前言 废话不多直接上干货&#xff0c;我负责踩坑&#xff0c;你负责验证。 单机版部署 1. 准备工…

DCMM数据管理能力成熟度评估模型解读

DCMM(GBT36073-2018)数据管理能力成熟度评估模型解读 DCMM标准的核心点在于通过八个核心能力域和五个成熟度等级的划分&#xff0c;全面评估企业的数据管理能力&#xff0c;并为企业提供提升数据管理能力的路径和方法&#xff0c;从而推动企业在信息化、数字化、智能化方面的发…

光伏设计中组串逆变和微型逆变是什么意思?有什么区别?

在光伏系统设计中&#xff0c;逆变器是核心组件之一&#xff0c;负责将太阳能电池板产生的直流电转换为交流电&#xff0c;以供家庭、商业或电网使用。根据设计和应用场景的不同&#xff0c;逆变器主要分为组串逆变器和微型逆变器两大类。 一、组串逆变器的定义 组串逆变器是太…

力扣面试经典算法150题:整数转罗马数字

整数转罗马数字 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a; 整数转罗马数字。 题目链接&#xff1a;https://leetcode.cn/problems/integer-to-roman/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 七个不同的符号代表罗马…

【EI稳定检索】2024年第三届环境工程与可持续能源国际会议

2024年第三届环境工程与可持续能源国际会议&#xff08;EESE 2024&#xff09;将于12月20日至22日在长沙举行&#xff0c;由西安交通大学等支持&#xff0c;EI检索&#xff0c;投稿截止10月18日&#xff0c;AC学术中心提供技术支持和免费投稿系统。 2024年第三届环境工程与可持…

鸿蒙(API 12 Beta3版)【默认界面扫码】

基本概念 默认界面扫码能力提供系统级体验一致的扫码界面&#xff0c;Scan Kit对系统相机权限进行了预授权&#xff0c;调用接口时&#xff0c;无需开发者再次申请相机权限。适用于不同扫码场景的应用开发。 说明 通过默认界面扫码可以实现应用内的扫码功能&#xff0c;为了…

机器学习:TF-IDF算法原理及代码实现

TF-IDF是一种用于信息检索与文本挖掘的常用加权技术。它是一种统计方法&#xff0c;用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。它的主要思想是&#xff1a;如果某个词语在一篇文章中出现的频率高&#xff08;Term Frequency&#xff0c;TF&#…

路别走窄了,华为认证的这些方向,比数通值钱

华为认证作为全球领先的ICT技术认证之一&#xff0c;以其高标准和权威性在全球范围内受到认可。它不仅代表了专业技能的国际水平&#xff0c;更是IT专业人士职业生涯中的重要里程碑。但谈论起华为认证&#xff0c;似乎大家都默认首选数通。 不止在华为认证&#xff0c;而是在整…

10个伪原创软件,改写文章效率高

在内容为王的时代&#xff0c;高效地改写文章已成为许多创作者和营销人员必备的技能。伪原创软件作为提升工作效率的利器&#xff0c;可以帮助用户在短时间内生成质量上乘的全新内容。以下是10个备受推崇的伪原创软件&#xff0c;它们各具特色&#xff0c;能够助力创作者大幅提…

猫头虎 分享已解决Bug || ReferenceError: Can‘t find variable: React 解决方案

猫头虎 分享已解决Bug || ReferenceError: Cant find variable: React 解决方案 今天猫头虎要跟大家分享一个前端开发中常见的问题&#xff1a; ReferenceError: Cant find variable: React。这个错误常常出现在我们开发React项目时&#xff0c;特别是在新手刚接触React或者是团…

如何快速创建个性化视频二维码用于产品宣传

产品视频二维码营销推广在实际应用中具有广泛的用途&#xff0c;可以有效地帮助企业推广品牌、产品和服务。常见的应用场景有&#xff1a;产品广告和宣传材料、产品包装展示、展会和活动、店内展示、旅游和景点介绍等。 那么如何快速制作和创建带企业图标的产品视频二维码呢&am…

【香橙派系列教程】(十九) 使用文件编程实现开关盖的历史记录

【十九】使用文件编程实现开关盖的历史记录 我现在多了一个需求&#xff0c;我需要在每次识别垃圾时&#xff0c;将垃圾的种类记录下来&#xff0c;同时记录下时间。 Linux显示当前的时间&#xff1a;date指令 //打印当前的 “年-月-日-时-分-秒” date "%Y-%m-%d %H:%M:…

开环响应(频率响应+相移响应)+闭环响应(负反馈对带宽的影响+增益-带宽积)+正反馈与稳定性/补偿(选学)

2024-8-29&#xff0c;星期四&#xff0c;20:01&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没什么事情发生&#xff0c;继续学习。 今天完成了第七章的学习&#xff0c;主要学习内容为&#xff1a;开环响应(频率响应相移响应)闭环响应(负反馈对带宽的…

鸿蒙开发入门day15-焦点事件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 焦点事件 基础概念与规范 基础概念 走焦规范 走焦算法 获焦/失…

Layer Normalization(层归一化)里的可学习的参数

参考pyttorch官方文档&#xff1a; LayerNorm — PyTorch 2.4 documentation 在深度学习模型中&#xff0c;层归一化&#xff08;Layer Normalization, 简称LN&#xff09;是一种常用的技术&#xff0c;用于稳定和加速神经网络的训练。层归一化通过对单个样本内的所有激活进行…

各种数据降维方法ICA、 ISOMAP、 LDA、LE、 LLE、MDS、 PCA、 KPCA、SPCA、SVD、 JADE

独立分量分析 ICA 等度量映射 ISOMAP 线性判别分析 LDA (拉普拉斯)数据降维方法 LE 局部线性嵌入 LLE 多维尺度变换MDS 主成分分析 PCA 核主成分分析 KPCA 稀疏主成分分析SPCA 奇异值分解SVD 特征矩阵的联合近似对角化 JADE 各种数据降维方法(matlab代码)代码获取戳此处代码获取…

一篇文章讲清楚Java中的反射

介绍 每个类都有一个 Class 对象&#xff0c;包含了与类有关的信息。当编译一个新类时&#xff0c;会产生一个同名的 .class 文件&#xff0c;该文件内容保存着 Class 对象。 类加载相当于 Class 对象的加载。类在第一次使用时才动态加载到 JVM 中&#xff0c;可以使用 Class…

组件通信 Vue3

1.props 1.child <template><div class"child"><h3>子组件</h3><h4>玩具&#xff1a;{{ toy }}</h4><h4>父给的车&#xff1a;{{ car }}</h4><button click"sendToy(toy)">把玩具给父亲</butt…

Python进阶03-闭包和装饰器

零、文章目录 Python进阶03-闭包和装饰器 1、作用域 &#xff08;1&#xff09;作用域 在Python代码中&#xff0c;作用域分为两种情况&#xff1a; 全局作用域局部作用域 &#xff08;2&#xff09;变量的作用域 随着函数的出现&#xff0c;作用域被划分为两种 在全局定…

江协科技STM32学习- P7 GPIO输入

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…