BindingException异常的产生原因及解决过程详解

news2024/11/20 0:35:34

一. 问题背景

今天我在讲完MyBatis后,学生在进行代码练习时遇到了下面这样的一个异常,先上图:

二. 问题分析

1.原因分析

首先我们看到,这里抛出的异常是org.apache.ibatis.binding.BindingException,接着再看异常的信息是 Invalid bound statement (not found): com.qf.mapper.EmpMapper.list。基于这两点,我们大概能定位到是Mapper绑定产生的异常。

我们知道,在MyBatis中我们需要先定义一个Mapper接口,在接口中定义方法。然后再定义一个Mapper.xml,在XML文件中编写方法对应的SQL语句,这也是java代码和sql语句分离的体现。我们在调用Mapper接口中的方式时MyBatis会给我们创建一个该接口的代理类,通过代理类来调用Mapper接口中的方法。

现在有了代理就可以调用方法了,但是怎么找到这个方法对应的SQL语句呢?此时就需要把Mapper接口和Mapper.xml进行绑定,只有绑定了MyBatis才知道方法对应的sql语句,我们通过代理调用方法时才能正常运行sql语句。那么这个异常就是报的绑定异常,说没有找到com.qf.mapper.EmpMapper.list()对应的sql语句。

那如何把它们两个绑定呢?看下面代码。

2.定义EmpMapper接口

package com.qf.mapper;
import com.qf.core.dao.BaseDao;
import com.qf.entity.Emp;
import org.omg.CORBA.INTERNAL;

public interface EmpMapper extends BaseDao<Emp> {
    public Emp selectById(Integer empno);
}

3.定义EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.qf.mapper.EmpMapper">
  <select id="list" resultType="emp">
    select * from t_emp
  </select>
</mapper>

在Mapper.xml中通过namespace属性和接口绑定,这个属性中设置的需要绑定的接口全类名。这里设置的是com.qf.mapper.EmpMapper,就代表当前EmpMapper.xml就和EmpMapper.java绑定了。然后在通过<select>标签中的id和接口中的方法名称保持一致,这样就完成了方法和sql语句的绑定。这些操作都配置完成后MyBatis才能正常运行,调用方法时才可以找到对应的SQL语句。

4.问题原因

现在知道MyBatis的绑定的过程了,我们继续回到上面提到的异常。

通过检查学生的代码发现,这个学员只是在Mapper接口中定义了方法,但是没有在Mapper.xml中编写的sql语句,所以MyBatis找不到sql语句就抛出了上面的异常。

三. 异常解决

对于上面的异常,其实我们只需要在Mapper.xml中添加对应的sql语句就可以解决。该学员的这个bug的原因是因为没有写sql语句导致的。但是除了这个原因外,还有其他的场景也会导致出现这个bug,在这里都统一列出来方便大家学习,常见原因如下。

1.Mapper.xml中的namespace属性写错了

2.Mapper.java中的方法名称和Mapper.xml中标签id的属性不一致

3.Mapper.java中定义了方法,但是没有写Mapper.xml中对应的slq语句

4.Mapepr.xml没有给MyBatis注册

5.Mapepr.xml中的id最好和方法名称保持一致,而且Mapper.java中的方法名称不要重载。方法中是可以重载的,但是Mapepr.xml中的id是不允许重复的。

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

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

相关文章

如何提高外贸客户回复率

业务员接到的每一笔订单都是客户对他的信任&#xff0c;所以合作的前提是信任。如何让客户信任我们或者快速信任我们&#xff0c;尤为关键。 如何提高客户的回复率&#xff0c;米贸搜整理如下: 1.及时回复: 无论是客户发来的询盘还是网上咨询&#xff0c;都要尽快回复客户&am…

Uber应用分享 | 使用 Parquet Page Index 加速 Presto 查询

当前&#xff0c;数据量呈快速增长态势&#xff0c;给诸如 Presto 等查询引擎带来了挑战。Presto 作为一种流行的交互式查询引擎&#xff0c;具有可扩展、高性能并可与 Hadoop 进行平滑集成的特性。随着数据量的增长&#xff0c;Presto 需要读取更大的数据块并将其加载到内存中…

CREAL:为什么光场+HOE是AR眼镜未来

利用光场显示技术&#xff0c;CREAL曾展示出可自然变焦的3D显示效果。为了验证该技术在AR和VR场景的应用&#xff0c;该公司分别打造了两款头显原型。头显对于VR来讲比较常见&#xff0c;但对于AR来讲&#xff0c;眼镜形态才是未来的发展方向。因此&#xff0c;为了缩减AR硬件的…

Unity_IL2CPP常见问题分析

Unity 打包il2cpp模式时的常见问题分析 Unity 编辑器模式下是采用.net 虚拟机解释执行.net 代码&#xff0c;发布的时候有两种模式&#xff0c;一种是mono虚拟机模式&#xff0c;一种是il2cpp模式。由于iOS AppStore规定不允许使用虚拟机&#xff0c;所以发布到iOS,Unity采用了…

推出Linux操作系统Inspur KOS,浪潮信息意欲何为?

2020年底&#xff0c;CentOS突然宣布CentOS7、8等系列版本停止维护的时间表&#xff0c;业界为之震动。 一直以来&#xff0c;Linux都是服务器操作系统市场的顶流支柱。CentOS发行版生命周期的突然变动&#xff0c; 不仅促使很多行业用户思考&#xff1a;“CentOS停止维护之后…

第三十三章 数论——组合数详解(2)

一、组合数——卢卡斯定理 1、问题 这道题中&#xff0c;a,ba,ba,b的范围都是很大的&#xff0c;我们就无法直接用到之前所讲解的预处理阶乘的方法。 如果大家没有看过作者写的组合数&#xff08;1&#xff09;的话&#xff0c;建议大家先去看一下&#xff0c;今天所讲的问题…

【小程序】微信小程序获取头像、呢称2013年最新解决方案(已解决)

一、效果 二、wxml代码 <!-- 点击头像获取头像 --> <view style"margin-bottom: 20px;text-align: center;">---- 点击头像获取logo ----</view> <view class"logo"><button style"width: 100px;height:100px;" cla…

易诚互动在创业板更新招股书:上半年出现亏损,极其依赖阿里云

12月27日&#xff0c;北京易诚互动网络技术股份有限公司&#xff08;下称“易诚互动”&#xff09;在深圳证券交易所更新招股书&#xff0c;准备在创业板上市。本次冲刺上市&#xff0c;易诚互动计划募资3.13亿元&#xff0c;将用于用于数字银行应用平台升级项目、大数据智能风…

问题解决丨对不起,小米路由器出现网络连接问题无法打开网页

之前Chrome浏览器一直用的好好的&#xff0c;不过最近出现以下问题 “对不起&#xff0c;小米路由器出现网络连接问题无法打开网页”。 奇怪的是&#xff0c;使用Edge浏览器可以正常访问网页&#xff0c;但是Chrome会不行&#xff0c;每次如果要正常访问需要关闭所有Chrome的…

迭代次数的隐约脚印

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 继续一维的实验&#xff0c;这次区别是A和B都由5个点构成。 A B 迭代次数&#xff08;7e-4&#xff09; 0 0 0 0 0 1 1 1 0 1 1b 1b 1b 0 1b 0*0*0*0*0-1*1*1*0*1 22047.98995 如A为00000&#xff0c;B为11101&#…

外贸网站优化与外贸网页优化的区别

对于大多数外贸企业和个人站长来说&#xff0c;网页优化是非常重要的&#xff0c;但是说到网站优化&#xff0c;很多人会有一个误区&#xff0c;就是经常把网站优化和搜索引擎优化混为一谈。虽然两者之间有很多重叠的地方&#xff0c;但是如果再细分的话&#xff0c;两者还是有…

JSP ssh 物流信息管理系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh 物流信息管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

专业低代码平台应该具备什么?

编者按&#xff1a;低代码火爆的同时&#xff0c;很多低代码平台如雨后春笋般涌出&#xff0c;那么一个真正的专业低代码平台应该具备什么特性呢&#xff1f;本文将为你剖析老厂商天翎低代码平台的特点&#xff0c;一起感受低代码平台的魅力。 关键词&#xff1a;读写分析&…

[BSidesCF 2019]SVGMagic (XXE)

[BSidesCF 2019]SVGMagic 首先打开界面&#xff0c;感觉就是一个文件上传的题目 &#xff0c;然后上传了jpg/php/png/.htaccess&#xff0c;感觉不是一道简单的题目&#xff0c;但是抓包也没有什么有用的信息。 页面上的英文翻译过来就是&#xff0c;使用Magic将SVG转换为PNG&…

C#,简单易用、稳定可靠的统计学的常用算法、概要介绍与源代码

1、统计学常用算法 统计分析科学 在“政治算术”阶段出现的统计与数学的结合趋势逐渐发展形成了“统计分析科学”。 十九世纪末&#xff0c;欧洲大学开设的“国情纪要”或“政治算数”等课程名称逐渐消失&#xff0c;代之而起的是“统计分析科学”课程。当时的“统计分析科学”…

深度学习笔记:神经网络(1)

对于感知机相关内容&#xff0c;可以参考我上一篇文章&#xff1a; https://blog.csdn.net/Raine_Yang/article/details/128461600?spm1001.2014.3001.5501 在图示中&#xff0c;最左边一列为输入层&#xff0c;最右边一列为输出层&#xff0c;中间为中间层&#xff0c;也叫隐…

Android 传感器概述(一)

Android 传感器概述&#xff08;一&#xff09;Android 传感器概述&#xff08;一&#xff09;传感器简介传感器框架识别传感器和传感器特性监控传感器事件处理不同的传感器配置在运行时检测传感器使用 Google Play 过滤器定位特定的传感器配置传感器坐标系Android 传感器概述&…

Pytorch的 Dataset 的使用

此案例教我们加载并处理TorchVision的FashionMNIST Dataset。 root 目录是 train/test data 存储的地方 downloadTrue 如果root目录没有&#xff0c;则从网上下载 transform and target_transform specify the feature and label transformations import torch from torch.u…

第十五讲:神州交换机端口安全配置

知识点&#xff1a; 开启端口安全模式&#xff1b;设置端口最大安全数&#xff1b;端口绑定MAC地址&#xff1b;违规处理&#xff1b;锁定安全端口&#xff1b;MAC地址与IP的绑定&#xff1b;端口镜像。 实验拓扑如下图所示 PC机 IP地址 掩码 MAC地址 端口 PC1 192.168.…

Windows10安装ubuntu(WSL2,可直接调用Win10程序) —2022年笔记

算是wsl2的使用总结。 一。启动win10虚拟机模块 1. 打开控制面板&#xff08;或开始->运行: control&#xff09; 2. 点击最左边的 “启用或关闭windows功能”&#xff0c;会弹出模块勾选界面 3. 勾上 Hyper-V、适用于Linux的Windows子系统、虚拟机平台 4. 点击确定按钮即开…