开发者

mybatis配置Mapper.xml文件时遇到的问题及解决

目录
  • myBATis配置Mapper.XML文件遇到的问题
    • 错误提示
    • 错误原因及解决办法
  • mybatis的mapper.xml配置详情
    • mapper.xml是什么?
    • 使用步骤
  • 总结

    mybatis配置Mapper.xml文件遇到的问题

    错误提示

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/dao/UserDao.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.sphttp://www.devze.comringframework.core.NestedIOException: Failed to parse mapping resource: 'file [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/mapping/UserDao.xml]'; ne开发者_C学习sted 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 'User'.  Cause: Java.lang.ClassNotFoundException: Cannot find class: User

        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1208)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)

        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)

        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)

        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)

        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)

        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)

        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4817)

        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5283)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)

        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)

        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)

        at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1736)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)

        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:483)

        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:432)

        at sun.reflect.NativeMethodAccessorImpwww.devze.coml.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)

        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

        at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)

        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)

        at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)

        at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)

        at java.security.AccessController.doPrivileged(Native Method)

        at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)

        at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)

        at sun.rmi.transport.Transport$1.run(Transport.java:200)

        at sun.rmi.transport.Transport$1.run(Transport.java:197)

        at java.security.AccessController.doPrivileged(Native Method)

        at sun.rmi.transport.Transport.serviceCall(Transport.java:196)

        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)

        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)

        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)

        at java.security.AccessController.doPrivileged(Native Method)

        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

        at java.lang.Thread.run(Thread.java:748)

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/dao/UserDao.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' 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 [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/mapping/UserDao.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 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1475)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1220)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)

        编程客栈;at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:461)

        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:435)

        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:559)

        at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)

        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)

        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:305)

        ... 60 more

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' 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 [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/mapping/UserDao.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 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)

        ... 75 more

    Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/home/hedingqin/GraduateDesign/mySupermarket/out/artifacts/mySupermarket_war_exploded/WEB-INF/classes/sms/mapping/UserDao.xml]'; nested except编程客栈ion 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 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:468)

        at org.mybatis.spring.SqlSessionFactowww.devze.comryBean.afterPropertiesSet(SqlSessionFactoryBean.java:343)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1631)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)

        ... 82 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 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        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:466)

        ... 85 more

    Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:103)

        at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:66)

        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)

        ... 87 more

    Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'User'.  Cause: java.lang.ClassNotFoundException: Cannot find class: User

        at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:117)

        at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:130)

        at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:101)

        ... 91 more

    Caused by: java.lang.ClassNotFoundException: Cannot find class: User

        at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:190)

        at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)

        at org.apache.ibatis.io.Resources.classForName(Resources.java:256)

    25-Apr-2020 21:42:42.428 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file

        at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:113)

        ... 93 more

    25-Apr-2020 21:42:42.432 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [/mySupermarket_war_exploded] startup failed due to previous errors

    25-Apr-2020 21:42:42.443 警告 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [mySupermarket_war_exploded] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

    25-Apr-2020 21:42:42.443 警告 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [mySupermarket_war_exploded] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

    [2020-04-25 09:42:42,457] Artifact mySupermarket:war exploded: Error during artifact deployment. See server log for details.

    25-Apr-2020 21:42:47.580 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/hedingqin/install/apache-tomcat-8.5.38/webapps/manager]

    25-Apr-2020 21:42:47.621 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/hedingqin/install/apache-tomcat-8.5.38/webapps/manager] has finished in [40] ms

    错误原因及解决办法

    原因:UserDao.xml中直接使用了User类的名字,应该写成User类的全称--包名加类名.只有这样才能识别出正确的类.

    方法:写全称或者在mybatis中给User类起别名.

    <typeAliases>
     <typeAlias alias="User" type="sms.entity.User" />
    </typeAliases>

    给sms.entity.User起了个别名User,这样在UserDao.xml文件中就可以直接使用User了.

    mybatis的mapper.xml配置详情

    提示:以下是本篇文章正文内容,下面案例可供参考

    mapper.xml是什么?

    mybatis配置Mapper.xml文件时遇到的问题及解决

    namespace——指定Mapper接口。

    resultMap —— 映射类,指定show类或者实体类。

    注: resultType ——指定返回类型 例:resultType = Java.lang.Integer 则返回类型为Integer类型。

    用法:查询多个值用 resultMap指定映射类。

    查询单个值用 resultType指定返回类型。

    id —— 映射别名。

    可配置多个resultMap 指定映射。

    注意:映射类需与接收类一致,否则会报show类与实体类无法转换异常。

    使用步骤

        SELECT company_id,our_person,our_contact,ourosite_email,order_no ,our_store_name FROM t_lawcase_our_party
        where 1=1 and is_enable = '1'
        <if test="orderNo!=null and orderNo !=''">
            and order_no = #{orderNo}
        </if>

    **resultMap** : 指定映射对象。

    注意:SQL语句写法需遵从Mybatis 语句写法。**JPA**写法在此不通用。

    当SQL语句需要IN多个值时,需要用到**<foreach> 标签**,Mybatis 无法用IN()这种JPA写法。

    • collection:指定集合名字
    • item: 别名。(**注意后面SQL语句写法是IN 别名 ,而不是集合名字!!!**)
    • separator:集合以什么方式隔开(逗号或者其他)
    • @Param("deptIdList"):SQL 语句参数别名。SQL根据条件查询时需用到该注解**。

    小结:mybatis 一定要注意SQL语句写法与映射类型,是使用resultMap 还是使用resultType。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜