Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias


昨天在编写自己的TypeHandler时,突然抛出一个异常,异常信息为:

java.lang.ExceptionInInitializerError
    at com.quelongjiang.mybatis.sys.test.NewUserTypeHandlerTest.<clinit>(NewUserTypeHandlerTest.java:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\Myeclipse2014 Program\Mybatis_Transaction_mnager\target\classes\mapper\sys\UserTypeHandlerModelMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias '"com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"'.  Cause: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:735)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.quelongjiang.mybatis.dao.impl.UserDaoImpl.<clinit>(UserDaoImpl.java:14)
    ... 23 more
Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\Myeclipse2014 Program\Mybatis_Transaction_mnager\target\classes\mapper\sys\UserTypeHandlerModelMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias '"com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"'.  Cause: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:522)
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:381)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)
    ... 35 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias '"com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"'.  Cause: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:520)
    ... 38 more
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias '"com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"'.  Cause: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)
    at org.apache.ibatis.builder.BaseBuilder.resolveTypeHandler(BaseBuilder.java:126)
    at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:121)
    at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:67)
    at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:69)
    at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:45)
    at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:46)
    at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:40)
    at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseScriptNode(XMLScriptBuilder.java:58)
    at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:44)
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:94)
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:135)
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:128)
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
    ... 40 more
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias '"com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"'.  Cause: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
    at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
    at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
    ... 53 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: "com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"
    at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)
    at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
    at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
    at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)
    ... 55 more

刚看到这个异常时,感觉很奇怪,我根本就没有在Mybatis中使用别名,怎么回报这个异常。后面,根据异常提示信息,找到相关配置文件UserTypeHandlerModelMapper.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.quelongjiang.mybatis.dao.UserTypeHandlerDao">
    
    <resultMap type="com.quelongjiang.mybatis.model.UserTypeHandlerModel" id="uthmEntity">
        <result property="uthm_id" column="uthm_id"/>
        <result property="uthm_name" column="uthm_name"/>
        <result property="uthm_describe" column="uthm_describe"/>
        <result property="uthm_user" column="uthm_user" 
                typeHandler="com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"  />
        <result property="uthm_createTime" column="uthm_createTime"/>
    </resultMap>
    
    <insert id="saveOneRecord">
        insert into sys_usertypehandlermodel(uthm_id , uthm_name , uthm_describe , uthm_user , uthm_createTime)
                                    values(#{uthm_id} , 
                                           #{uthm_name} , 
                                           #{uthm_describe} ,
                                           #{uthm_user , typeHandler="com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"} , 
                                           #{uthm_createTime})
    </insert>
    
    <insert id="saveMoreRecord">
        insert into sys_usertypehandlermodel(uthm_id , uthm_name , uthm_describe , uthm_user , uthm_createTime) values
        <foreach collection="list" item="item" separator=",">
            (#{item.uthm_id} , 
             #{item.uthm_name} , 
             #{item.uthm_describe} , 
             #{item.uthm_user , typeHandler=com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler} , 
             #{item.uthm_createTime})
        </foreach>
    </insert>
</mapper>

在id为saveOneRecord的insert语句中, typeHandler="com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler",使用双引号引起来。导致Mybatis将其作为别名进行解析。而又没有定义这么一个别名,导致抛出上面这个异常。其实,这个异常的解决办法很简单,只需要去除掉 typeHandler="com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler"的引号就可以了,即 typeHandler=com.quelongjiang.springSecurity.mybatis.typeHandler.NewUserTypeHandler。

这个异常信息当初困扰了我好一个多小时,后面,根据Mybatis官方帮助文档,才找到异常的解决办法,现记录一下,避免以后再出现这个错误。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM