亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis中BindingException異常的產(chǎn)生原因及解決過程

 更新時(shí)間:2023年06月01日 09:16:31   作者:一一哥Sun  
BindingException異常是MyBatis框架中自定義的異常,顧名思義指的是綁定出現(xiàn)問題,下面這篇文章主要給大家介紹了關(guān)于MyBatis報(bào)錯(cuò)BindingException異常的產(chǎn)生原因及解決過程,需要的朋友可以參考下

一. 問題背景

今天我在講完MyBatis后,學(xué)生在進(jìn)行代碼練習(xí)時(shí)遇到了下面這樣的一個(gè)異常,先上圖:

二. 問題分析

1.原因分析

首先我們看到,這里拋出的異常是org.apache.ibatis.binding.BindingException,接著再看異常的信息是 Invalid bound statement (not found): com.qf.mapper.EmpMapper.list?;谶@兩點(diǎn),我們大概能定位到是Mapper綁定產(chǎn)生的異常。

我們知道,在MyBatis中我們需要先定義一個(gè)Mapper接口,在接口中定義方法。然后再定義一個(gè)Mapper.xml,在XML文件中編寫方法對(duì)應(yīng)的SQL語句,這也是java代碼和sql語句分離的體現(xiàn)。我們?cè)谡{(diào)用Mapper接口中的方式時(shí)MyBatis會(huì)給我們創(chuàng)建一個(gè)該接口的代理類,通過代理類來調(diào)用Mapper接口中的方法。

現(xiàn)在有了代理就可以調(diào)用方法了,但是怎么找到這個(gè)方法對(duì)應(yīng)的SQL語句呢?此時(shí)就需要把Mapper接口和Mapper.xml進(jìn)行綁定,只有綁定了MyBatis才知道方法對(duì)應(yīng)的sql語句,我們通過代理調(diào)用方法時(shí)才能正常運(yùn)行sql語句。那么這個(gè)異常就是報(bào)的綁定異常,說沒有找到com.qf.mapper.EmpMapper.list()對(duì)應(yīng)的sql語句。

那如何把它們兩個(gè)綁定呢?看下面代碼。

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屬性和接口綁定,這個(gè)屬性中設(shè)置的需要綁定的接口全類名。這里設(shè)置的是com.qf.mapper.EmpMapper,就代表當(dāng)前EmpMapper.xml就和EmpMapper.java綁定了。然后在通過<select>標(biāo)簽中的id和接口中的方法名稱保持一致,這樣就完成了方法和sql語句的綁定。這些操作都配置完成后MyBatis才能正常運(yùn)行,調(diào)用方法時(shí)才可以找到對(duì)應(yīng)的SQL語句。

4.問題原因

現(xiàn)在知道MyBatis的綁定的過程了,我們繼續(xù)回到上面提到的異常。

通過檢查學(xué)生的代碼發(fā)現(xiàn),這個(gè)學(xué)員只是在Mapper接口中定義了方法,但是沒有在Mapper.xml中編寫的sql語句,所以MyBatis找不到sql語句就拋出了上面的異常。

三. 異常解決

對(duì)于上面的異常,其實(shí)我們只需要在Mapper.xml中添加對(duì)應(yīng)的sql語句就可以解決。該學(xué)員的這個(gè)bug的原因是因?yàn)闆]有寫sql語句導(dǎo)致的。但是除了這個(gè)原因外,還有其他的場(chǎng)景也會(huì)導(dǎo)致出現(xiàn)這個(gè)bug,在這里都統(tǒng)一列出來方便大家學(xué)習(xí),常見原因如下。

1.Mapper.xml中的namespace屬性寫錯(cuò)了

2.Mapper.java中的方法名稱和Mapper.xml中標(biāo)簽id的屬性不一致

3.Mapper.java中定義了方法,但是沒有寫Mapper.xml中對(duì)應(yīng)的slq語句

4.Mapepr.xml沒有給MyBatis注冊(cè)

5.Mapepr.xml中的id最好和方法名稱保持一致,而且Mapper.java中的方法名稱不要重載。方法中是可以重載的,但是Mapepr.xml中的id是不允許重復(fù)的。

四. 結(jié)語

現(xiàn)在你知道Mybatis的BindingException綁定異常是怎么產(chǎn)生,以及怎么解決的了嗎?

到此這篇關(guān)于Mybatis中BindingException異常的產(chǎn)生原因及解決過程的文章就介紹到這了,更多相關(guān)MyBatis BindingException異常解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java注解中@Component和@Bean的區(qū)別

    Java注解中@Component和@Bean的區(qū)別

    這篇文章主要介紹了@Component和@Bean的區(qū)別,在這給大家簡(jiǎn)單介紹下作用對(duì)象不同:@Component 注解作用于類,而 @Bean 注解作用于方法,具體實(shí)例代碼參考下本文
    2024-03-03
  • 詳細(xì)解讀JAVA多線程實(shí)現(xiàn)的三種方式

    詳細(xì)解讀JAVA多線程實(shí)現(xiàn)的三種方式

    本篇文章主要介紹了詳細(xì)解讀JAVA多線程實(shí)現(xiàn)的三種方式,主要包括繼承Thread類、實(shí)現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線程。有需要的可以了解一下。
    2016-11-11
  • Java高級(jí)特性

    Java高級(jí)特性

    這篇文章主要介紹了Java高級(jí)特性,需要的朋友可以參考下
    2017-04-04
  • Spring實(shí)戰(zhàn)之使用Resource作為屬性操作示例

    Spring實(shí)戰(zhàn)之使用Resource作為屬性操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用Resource作為屬性,結(jié)合實(shí)例形式分析了spring載人Resource作為屬性相關(guān)配置與使用技巧,需要的朋友可以參考下
    2020-01-01
  • Java實(shí)現(xiàn)遞歸讀取文件夾下的所有文件

    Java實(shí)現(xiàn)遞歸讀取文件夾下的所有文件

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)遞歸讀取文件夾下的所有文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 關(guān)于Map的遍歷以及轉(zhuǎn)JsonArray存儲(chǔ)方式

    關(guān)于Map的遍歷以及轉(zhuǎn)JsonArray存儲(chǔ)方式

    在Java開發(fā)過程中,經(jīng)常會(huì)遇到需要對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理的情況,本案例以List<Map<String,Object>>為例,介紹了如何遍歷該數(shù)據(jù)結(jié)構(gòu),并根據(jù)特定條件篩選出符合要求的元素,通過自定義一個(gè)Edit類來模擬形成一個(gè)新的Map對(duì)象,實(shí)現(xiàn)了數(shù)據(jù)的有序存儲(chǔ)
    2024-11-11
  • Java編程通過list接口實(shí)現(xiàn)數(shù)據(jù)的增刪改查代碼示例

    Java編程通過list接口實(shí)現(xiàn)數(shù)據(jù)的增刪改查代碼示例

    這篇文章是介紹Java編程基礎(chǔ)方面的內(nèi)容,涉及l(fā)ist接口的操作,通過list接口實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查的相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 面試Spring中的bean線程是否安全及原因

    面試Spring中的bean線程是否安全及原因

    這篇文章主要為大家介紹了面試中常問的Spring中bean線程是否安全及原因,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析

    Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析

    這篇文章主要介紹了Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 一文帶你了解Java設(shè)計(jì)模式之原型模式

    一文帶你了解Java設(shè)計(jì)模式之原型模式

    原型模式其實(shí)就是從一個(gè)對(duì)象在創(chuàng)建另外一個(gè)可定制的對(duì)象,不需要知道任何創(chuàng)建的細(xì)節(jié)。本文就來通過示例為大家詳細(xì)聊聊原型模式,需要的可以參考一下
    2022-09-09

最新評(píng)論