首頁 > 軟體

Mybatis錯誤引起的程式啟動卡死問題及解決

2022-02-08 13:00:54

Mybatis錯誤引起的程式啟動卡死

mybatis xml 錯誤引起的程式啟動卡死(沒有任何報錯資訊,控制檯卡死)排除方法

解決辦法

把紀錄檔級別提高到debug,檢視紀錄檔是否有異常資訊

新建一個類,繼承 org.mybatis.spring.SqlSessionFactoryBean 類,過載 buildSqlSessionFactory 方法,捕獲 NestedIOException 異常,並列印異常,如下:

public class MySqlSessionFactoryBean extends SqlSessionFactoryBean {
    protected SqlSessionFactory buildSqlSessionFactory() throws IOException {
        try {
            return super.buildSqlSessionFactory();
        } catch (NestedIOException e) {
            //- XML有錯誤時列印異常
            e.printStackTrace();
            throw new NestedIOException("Failed to parse mapping resource: " + e);
        }
    }
}

修改 mybatis 組態檔 把org.mybatis.spring.SqlSessionFactoryBean 替換為新建的類,再次啟動可以在控制檯輸出mybatis異常資訊。

原因分析

Spring解析mapper.xml檔案時,執行SqlSessionFactoryBean.buildSqlSessionFactory()到斷點時,丟擲的異常被spring處理,但是沒有輸出紀錄檔資訊,

Mybatis啟動錯誤

今天在複習mybatis的基礎的時候出現了錯誤資訊,

具體報錯如下

Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com.hxb.mapper.AccountMapper is not known to the MapperRegistry.
    at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)
    at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:745)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:292)
    at com.hxb.test.test1.main(test1.java:22)

主要內容是說找不到介面,問題可能有兩個

1、沒有將mapper檔案註冊到resource檔案中。

<mappers>
   <mapper resource="com/hxb/mapper/AccountMapper.xml"/>
</mappers>

2、還有一種錯誤是mapper.xml檔案中的namespace檔案寫錯。

<mapper namespace="com/hxb/mapper/AccountMapper"> // 錯誤寫法
<mapper namespace="com.hxb.mapper.AccountMapper"> //  正確寫法

總結,不用寫字尾的情況下用".",需要字尾的時候用/

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com