mybatis和spring整合时这个报错,应该这样解决!

01

问题描述

今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下。

报错问题如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'empService' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mybatis.spring.mapper.MapperScannerConfigurer' to required type 'org.dao.EmpDaoMapper' for property 'empDao'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mybatis.spring.mapper.MapperScannerConfigurer] to required type [org.dao.EmpDaoMapper] for property 'empDao': no matching editors or conversion strategy foundat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:636)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:934)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)at org.test.TestMain.before(TestMain.java:21)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)at org.junit.runners.ParentRunner.run(ParentRunner.java:236)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.ConversionNotSupportedException: Failed to convert property value of type 'org.mybatis.spring.mapper.MapperScannerConfigurer' to required type 'org.dao.EmpDaoMapper' for property 'empDao'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mybatis.spring.mapper.MapperScannerConfigurer] to required type [org.dao.EmpDaoMapper] for property 'empDao': no matching editors or conversion strategy foundat org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:464)at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:495)at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:489)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1465)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1424)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)... 34 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.mybatis.spring.mapper.MapperScannerConfigurer] to required type [org.dao.EmpDaoMapper] for property 'empDao': no matching editors or conversion strategy foundat org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267)at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:449)... 40 more

下面是spring的所有配置文件信息:

配置数据源信息:

<!-- 配置数据源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/schooldb"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean>

配置SqlSessionFactory信息,以及加载数据源:

<!-- 加载数据源 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><!-- 配置mapper属性 --><property name="mapperLocations"><list><value>classpath:org/dao/*/*.xml</value></list></property><!-- 配置mybatis配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"></property></bean>

使用MapperScannerConfigurer注入映射器:

<!-- 使用MapperScannerConfigurer --><bean id="empDao" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="org.dao"></property></bean>

下面就是配置Service层:

<bean id="empService" class="org.service.impl.EmpServiceImpl"><property name="empDao" ref="empDao"></property></bean>

问题就出在“配置Service层”这一步,原来在未使用MapperScannerConfigurer的时候,程序是可以正常跑起来的,但是加上MapperScannerConfigurer,程序就报错,找了好半天,终于发现,原来粗心的将对象名写错了,下面是问题的解决方式:

02

解决问题

更正MapperScannerConfigurer注入映射器和empService注入映射器,代码如下:

<!-- 使用MapperScannerConfigurer --><bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="org.dao"></property></bean><bean id="empService" class="org.service.impl.EmpServiceImpl"><property name="empDao" ref="empDaoMapper"></property></bean>

然后运行项目,正常执行:

03

分析问题

当我们使用MapperScannerConfigurer注入映射器时,可以不用Mapper的实现类,但是Mapper的接口名必须要与所对应的SQL映射文件名一模一样,且接口中的方法名需与SQL映射文件的id名相同。

通过MapperScannerConfigurer可以批量生成映射器实现,映射器被注册到Spring的容器时,spring会自动根据其接口名给其命名,默认规则是首字母小写的非完全限定名。比如上面代码中的接口名为EmpDaoMapper,那默认命名就是empDaoMapper,原来在ref引入对象的时候,写的是empDao,所以就报错。改成其默认的命名empDaoMapper问题解决。

希望大家在整合框架的时候,能认真细心,避免出现没必要的bug,耽误时间。

辣椒酱,了解下呗~

往期精彩

考研生的努力程度是有多恐怖!

2020-12-27

越优秀的人越努力,越努力的人越幸运!

2020-12-26

“老师,为什么我一上课就感到困,听课听的总是走神?”

2020-12-25

最好的方法,是为你们量身定制!

2020-12-23

“桌面日历”记录的事件居然是看某某视频……

2020-12-21

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个简单的例子,学习自定义注解和AOP

转载自 一个简单的例子&#xff0c;学习自定义注解和AOP 记得今年年初刚开始面试的时候&#xff0c;被问的最多的就是你知道Spring的两大核心嘛&#xff1f;那你说说什么是AOP&#xff0c;什么是IOC&#xff1f;我相信你可能也被问了很多次了。 1、到底是什么是AOP&#xff…

Xamarin for iOS 11(一) - 初尝ARKit

编者语&#xff1a;Xamarin 的兼容性是它最大的优点&#xff0c;对于iOS / Android 新的功能支持也是无缝的&#xff0c;做到100%兼容。Xamarin.ios for iOS 11.0的支持已经开始&#xff0c;大家可以在这里下载最新的Preview支持 (https://releases.xamarin.com/preview-xcode-…

挺不喜欢下雪的

你要储蓄你的可爱&#xff0c;眷顾你的善良&#xff0c;变得勇敢。当这个世界越来越坏时&#xff0c;只希望你能越来越好。——《南山南》昨天夜间&#xff0c;窗外雪花飘飘&#xff0c;朋友圈中到处都是晒下雪的照片&#xff0c;有的说是“这是2020年的第一场雪”&#xff0c;…

是什么使你留在你的公司

一个故事 之前离职的一个同事&#xff0c;是典型的技术型人才&#xff0c;前段时间跟他一起吃饭&#xff0c;得知他工作状况不是很理想&#xff08;他在创业型团队&#xff0c;工作强度非常大&#xff0c;且做出来的东西得不到应有的认可&#xff0c;公司给他的报酬也不是很高…

有些事,父母一定不能依着孩子!

今天的文章&#xff0c;可能有的人不太喜欢。在我教学这么些年以来&#xff0c;这个问题在今年出现的最多——父母总是站在孩子的角度&#xff0c;不管什么事都是依着孩子&#xff1b;如果此事对孩子好也就罢辽&#xff0c;但是明明对孩子没有一点好处&#xff0c;还要和孩子一…

“看起来你每天都要做好多事,你有时间吗?”

“我看你每天要干的事好多啊,你有那么多时间吗?” “有啊,早起会儿,晚睡会儿,时间就出来了” 我每天确实是要做好多事。 01 我是一个喜欢规律生活的人,通常会将自己的一天划分为好多块,每一块时间安排的事都不一样,不太喜欢别人打乱我的生活规律,也不知道这是好事还是…

Sentinel限流保护

自定义限流错误页

浅谈 EF CORE 迁移和实例化的几种方式

出于学习和测试的简单需要&#xff0c;使用 Console 来作为 EF CORE 的承载程序是最合适不过的。今天笔者就将平时的几种使用方式总结成文&#xff0c;以供参考&#xff0c;同时也是给本人一个温故知新的机会。因为没有一个完整的脉络&#xff0c;所以也只是想起什么写点什么&a…

Redis 高可用特性之 “持久化” 详解

转载自 Redis 高可用特性之 “持久化” 详解 在之前的文章中&#xff0c;介绍了《Redis的内存模型》&#xff0c;从这篇文章开始&#xff0c;将依次介绍 Redis 高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了 Redis 高…

这本书强烈推荐看看!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】今天&#xff0c;给大家推荐一本书《计算机是怎样跑起来的》&#xff0c;作者&#xff1a;矢泽久雄。也不知道它是怎么进入我的书架的&#xff0c;由于最近一直在看理财类的书籍&#xff0c;所以以前加入…

基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级

1、前言 surging受到不少.net同学的青睐&#xff0c;也提了不少问题&#xff0c;提的最多的是什么时候集成API 网关&#xff0c;在这里回答大家最近已经开始着手研发&#xff0c;应该在1,2个月内会有个初版API网关&#xff0c;其它像Token身份验证&#xff0c;限流降级等功能完…

1 分钟教会你用 Spring Boot 发邮件

转载自 1 分钟教会你用 Spring Boot 发邮件 Spring Boot 提供了一个发送邮件的简单抽象&#xff0c;使用的是下面这个接口。 org.springframework.mail.javamail.JavaMailSender Spring Boot 提供了一个 starter&#xff0c;并能自动配置&#xff0c;下面来做个小例子&#xf…

小二,先来两桂花豆沙包!

“包子嘞&#xff0c;卖包子嘞&#xff0c;新出锅的大包子&#xff0c;走过路过千万不要错过呦~包子嘞……”某年某月某下午&#xff0c;百万包子铺进来一人&#xff0c;进来便招呼&#xff1a;“小二&#xff0c;包子怎么卖&#xff1f;”小二&#xff1a;“客官&#xff0c;你…

SQL Server 2017 RC1 现已实现 Linux 功能扩展

经过七个预览版本的迭代之后&#xff0c;Microsoft 宣告发布第一个 SQL Server 2017 候选版本。开发人员可以藉由该版本来探索一些扩展 SQL Server Linux 版能力的新改进。 在这些新改进中&#xff0c;首先是对 Linux 上SQL Server 的 Active Directory 身份验证的支持。使用 …

一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?

如题&#xff1a;一百馒头一百僧&#xff0c;大僧三个更无争&#xff0c;小僧三人分一个大小和尚得几丁&#xff1f; 要求使用java实现求得大僧小僧各有多少人&#xff1f; public class shdjshj {public static void main(String[] args) {for(int i 1;i<100;i){int j 1…

Microsoft使用.NET Core SDK遥测数据

Microsoft发布了采集自.NET Core SDK用户的遥测原始数据集。数据集的时间跨度是从2016年第三季度到2017年第二季度&#xff0c;为了解当前开发人员使用SDK的情况提供了一个视角。据Microsoft的Rich Lander介绍&#xff0c;今后Microsoft将每季度提供一次遥测数据集&#xff0c;…