关于mybatis通用BaseMapper的问题 国际体育365 📅 2025-07-12 10:40:03 👤 admin 👁️ 7638 ❤️ 771 社区 Java EE 帖子详情 关于mybatis通用BaseMapper的问题 PeaceLoop 2015-05-18 04:54:54 BaseMapper是我自定义的一个接口,定义了基本CRUD方法,供其他Mapper接口继承。 问题是如果有一个以上的Mapper继承时,就会报错。 expected single matching bean but found 2 这个问题大家都知道 注解继承冲突 两个bean父类相同注入时就会报这错 需要指定value 但问题是mybatis的mapper是没有实现类的 好像配置有哪里不对 谁知道咋办? ...全文 28434 20 打赏 收藏 关于mybatis通用BaseMapper的问题 BaseMapper是我自定义的一个接口,定义了基本CRUD方法,供其他Mapper接口继承。 问题是如果有一个以上的Mapper继承时,就会报错。 expected single matching bean but found 2 这个问题大家都知道 注解继承冲突 两个bean父类相同注入时就会报这错 需要指定value 但问题是mybatis的mapper是没有实现类的 好像配置有哪里不对 谁知道咋办? 复制链接 扫一扫 分享 转发到动态 举报 AI 作业 写回复 配置赞助广告取 消 确 定 用AI写文章 20 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 璞玉Hope 2019-05-23 打赏举报 回复 楼主,baseMapper对应的xml文件怎么呢? qq_39535310 2018-06-26 打赏举报 回复 才了解接触这个点 达兔哥 2017-08-16 打赏举报 回复 解决了吗?我的跟你一样,不是没有扫描包的问题 小刺风 2017-04-06 打赏举报 回复 你需要做的事在公用service中把你的公用mapper设置为抽象的,抽象的实体就不会被spring给加载了。 public abstract class BaseServiceImpl implements BaseService { public abstract BaseMapper getBaseMapper(); } 小刺风 2017-04-06 打赏举报 回复 哥们他们都不对 sinat_28583841 2017-03-09 打赏举报 回复 解决方案在这里!BaseServiceImpl 改成abstract。 yanyongboy 2016-07-12 打赏举报 回复 这个问题我也约到了,虽然问题过去已久,但希望我的回答能帮到以后遇到同样问题的人: public abstract class BaseService implements IBaseService { @Resource //----此处会出现歧义,导致报错 private BaseMapper baseMapper; 加入:public void setBaseMapper(BaseMapper baseMapper) { this.baseMapper= baseMapper; } 改成在BaseService的实现类中注入mapper 如:public class MenuService extends BaseService implements MenuService @Resource private MenuMapper menuMapper; @Autowired public void setMenuMapper(){ super. setBaseMapper(menuMapper); } PeaceLoop 2015-05-20 打赏举报 回复 是忘了扫描basemapper所在包了 包名不一样 PeaceLoop 2015-05-18 打赏举报 回复 求大神啊 整了一天没整好 要通宵了 PeaceLoop 2015-05-18 打赏举报 回复 哎 这样也一样 引用 10 楼 u013761410 的回复:我是这样配置的 songjy3 2015-05-18 打赏举报 回复 我是这样配置的 PeaceLoop 2015-05-18 打赏举报 回复 后台信息 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.sinosig.ygcf.framework.persistence.BaseMapper] is defined: expected single matching bean but found 2: salaryMapper,userMapper at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:870) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:775) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424) at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:282) at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:520) at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365) at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213) at org.apache.maven.cli.MavenCli.main(MavenCli.java:157) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 2015-05-18 18:01:20.841:WARN:oejsh.RequestLogHandler:!RequestLog 2015-05-18 18:01:20.865:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server PeaceLoop 2015-05-18 打赏举报 回复 引用 4 楼 u013761410 的回复:配置文件怎么写的? 配置文件在楼上 PeaceLoop 2015-05-18 打赏举报 回复 引用 5 楼 shijing266 的回复:按道理接口是可以被多个接口继承的,出现expected single matching bean but found 2 说明父类被注解了两次 其实我以前搭过一遍mybatis的框架 最近借着struts2换springmvc的关系 我又重新搭了一遍并做了一些地方的优化 配置文件貌似也没啥问题 我把整个配置文件放在以前的项目里也不报错 实在不知道咋整 其实我以前也遇到过这个问题 那时候试了好多种方法 最后不知道怎么的莫名其妙就好了。。。 配置文件如下 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="true"> classpath:config/jdbc.properties destroy-method="close"> value="com.sinosig.ygcf.demo.domain,com.sinosig.ygcf.framework.domain" /> classpath:com/sinosig/ygcf/demo/persistence/*Mapper.xml class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> expression="execution(* com.sinosig.ygcf.demo.service..*.*(..))" /> advice-ref="transactionAdvice" /> class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> DisableCircularReferenceDetect class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"> class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> /WEB-INF/views/ utf-8 0 songjy3 2015-05-18 打赏举报 回复 我写的接口继承没问题啊 执笔记忆的空白 2015-05-18 打赏举报 回复 按道理接口是可以被多个接口继承的,出现expected single matching bean but found 2 说明父类被注解了两次 songjy3 2015-05-18 打赏举报 回复 配置文件怎么写的? PeaceLoop 2015-05-18 打赏举报 回复 引用 1 楼 shijing266 的回复:你两个子类实现了同一个接口,然后都用@Autowired去注解,是这个意思吧? http://blog.csdn.net/moneyshi/article/details/38875083 我没写类,只写了三个接口。就会出现这种问题。mybatis不需要写类。 PeaceLoop 2015-05-18 打赏举报 回复 具体代码 public interface BaseMapper { /** * 根据实体非空字段条件进行查询 * * @param t * @return */ public List select(T t); //略 } public interface UserMapper extends BaseMapper { } 只要再多写一个XxxMapper就会报错 执笔记忆的空白 2015-05-18 打赏举报 回复 你两个子类实现了同一个接口,然后都用@Autowired去注解,是这个意思吧? http://blog.csdn.net/moneyshi/article/details/38875083 Mybatis通用DAO设计封装(mybatis) NULL 博文链接:https://zhaoshijie.iteye.com/blog/2003209 Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x NULL 博文链接:https://fanshuyao.iteye.com/blog/2413143 mybatis通用mapper 这个工具类封装了mybatis通用的mapper和通用的service Spring boot集成Mybatis通用mapper 这是我写的一个Spring boot集成Mybatis通用mapper并连接MySQL数据库实现增删改查的一个小例子 Spring集成MyBatis 通用Mapper以及 pagehelper分页插件 Spring集成MyBatis 通用Mapper以及 pagehelper分页插件 Java EE 67,549 社区成员 225,860 社区内容 发帖 与我相关 我的任务 Java EE J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。 复制链接 扫一扫 分享 确定 社区描述 J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。 社区管理员 加入社区 获取链接或二维码 近7日 近30日 至今 加载中 查看更多榜单 社区公告 暂无公告 试试用AI创作助手写篇文章吧 + 用AI写文章 ← 13个功能强大的php开发工具推荐及下载 键盘快捷删除键是哪个 →