定位mapper.xml文件的錯誤

概述

1. 定位mapper.xml中的錯誤一直是個比較尷尬的問題,很多時候,只能確定是xml除了問題,卻不知道是哪一個。

2. 具體錯誤:

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
2019-05-06 17:09:37,059 [RMI TCP Connection(2)-127.0.0.1] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed configuration file: 'class path resource [mybatis.xml]'

一直循環打印同樣的語句,並且提示,XxxMapper文件循環引用blabla。

3. 先說個(導致錯誤的)操作,把Timestamp修改爲LocalDateTime。

 

查找錯誤原因

1. 首先,找到org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory類;

2. 接着,找到protected void autowireByType(……)方法,並找到對應的catch。如下:

catch (BeansException ex) {
   throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex);
}

在拋出異常的位置(即throw new UnsatisfiedDependencyException(……)語句所在的位置)打上斷點即可。 

3. 最後,當程序執行到斷點的位置。利用Debug,查看ex的值。如下:

具體錯誤:

java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: No typehandler found for property createDate

 

解決錯誤

1. 根據第3步斷點處的exception,可以看出來,出錯的是XxxData-mapper.xml文件,其中,屬性createDate需要typehandler;

2. 這意味着typehandler對應的類型,mybatis不支持,需要手動添加typehandler;

 

分析

1. mybatis是支持Timestamp的,也支持Date,而LocalDateTime是Java8的新特性。

注:其實通過測試已經知道是Timestamp被替換成LocalDateTime造成的問題,找出具體錯誤,只是爲了弄清楚到底爲什麼錯。

 

解決

1. 直接換成Date即可。(可以)

2. 可以自定義一個TypeHandler,來處理這種情況。(未試)

3. 導入“mybatis-typehandlers-jsr310”包。參考鏈接:http://www.cnblogs.com/carrychan/p/9883293.html(未試)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章