首页 > 代码库 > java.lang.IllegalStateException: No typehandler found for mapping XXX

java.lang.IllegalStateException: No typehandler found for mapping XXX

      前言:今天遇到了这个问题,刚开始觉得很容易解决的,毕竟能定位到出问题的文件和对应的字段,根据以往的经验也可以判断出是字段映射类型不匹配的问题,后来找了半天还是没找到问题的根源,从网上百度,也没看到令人满意的分析以及和我情况类似的描述。于是,下定决心,先深呼吸,然后冷静下来好好玩一下。

      如下是我的分析过程,这里以提供分析的思路为主,希望以后在遇到类似的问题能一下子定位到,解决掉。

1:异常信息的一部分,如下所示,和以往一样,先仔细瞧瞧,根据异常的提示基本能定位到问题出在那个文件,那个字段或者某个小氛围,如下所示

Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: ‘file [D:\workspace\XXX\target\ape-web-0.0.1-SNAPSHOT\WEB-INF\classes\mappers\SortCenterRouteMapper.xml]‘; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:466)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1419)
... 80 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:117)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:89)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:464)
... 83 more
Caused by: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.apache.ibatis.mapping.ResultMapping$Builder.validate(ResultMapping.java:147)
at org.apache.ibatis.mapping.ResultMapping$Builder.build(ResultMapping.java:136)
at org.apache.ibatis.builder.MapperBuilderAssistant.assembleResultMapping(MapperBuilderAssistant.java:426)
at org.apache.ibatis.builder.MapperBuilderAssistant.buildResultMapping(MapperBuilderAssistant.java:222)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:371)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:276)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:248)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:240)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:113)
... 85 more

2:下面是我的分析过程

2-1:定位到出问题的文件,字段,然后对照,映射的情况,映射对象的情况,数据库表字段的情况,如下所示:

技术分享

技术分享

技术分享

2-2:原本以为经过上面的分析一定能定位到问题的,结果让我大惑不解,没问题呀!仔仔细细看了几遍没发现有问题

2-3:后来就按照我原来分析问题的思路,再重新分析一遍(有时候我们认为不可能出现问题的地方,可能是,一旦出现问题就容易令我们崩溃的地方),下面是我重新分析的思路,根据报错的提示信息——“No typehandler found for mapping”以及异常发生的嵌套位置,试着去定位到对应的源码,然后通过调试模式看看到底是什么引起了程序抛错,比较幸运,我一下子就定位到了的可能出现问题的源码之处了,如下所示:

技术分享

 2-4:启动服务器,进入调试模式,跟踪源码报错的部分,分析当时的运行情况,我们看到了程序为什么抛出异常,以及可能存在问题的地方,到这里基本就定位到问题的根源了,放慢速度,让灵魂跟上脚步。让我奇怪的是我的字段明明是String类型的为什么和自己认为不一样哪?再回头看看那个String类型的真面目吧!

技术分享

 2-5:我去,还真不是自己认为的java.lang.String类型的?问题是定位到了,怎么解决就不说了!但是为什么是这个类型呢?是谁修改的?还是自己一不小心导致的?编程是个细致的活,所以还是要胆大心细一些吧!

技术分享

3:参考

http://stackoverflow.com/questions/19273783/no-typehandler-exception-in-mybatis

java.lang.IllegalStateException: No typehandler found for mapping XXX