在学习Spring完之后简单的了解了MyBatis。然后进行简单的整合,遇到MyBatista接口映射的Bean无法自动注入的问题;

代码异常:

线程“main”org.springframe .bean .factory中的异常。创建名为“UserController”的bean时出错:通过字段“userdao”表示的不满足的依赖关系;嵌套异常是org.springframe .bean .factory。BeanCreationException:在文件[C:\Users\li rui long\eclipse-workspace\MyBatis_Demo\build\classes\com\mybatis\dao\ userdao]中创建名为“userdao”的bean时出错。类]:在设置bean属性“sqlSessionFactory”时无法解析对bean“sqlSessionFactory”的引用;嵌套异常是org.springframe .bean .factory。BeanCreationException:在类路径资源[ApplicationContext]中定义名称为“sqlSessionFactory”的bean创建错误。:设置bean属性“dataSource”时不能解析对bean“dataSource”的引用;嵌套异常是org.springframe .bean .factory。BeanCreationException:创建名为“dataSource”的bean时出错:查找方法解析失败;嵌套异常是java.lang。IllegalStateException:未能从ClassLoader [jdk.internal.loader.ClassLoader . $AppClassLoader@77a567e1]内检类[org.apache.commons.dbcp2.BasicDataSource]

异常提示,控制器层的Bean无法创建,原因是MyBatis对应的映射接口无法完成映射,无法生成DAO层的Bean;

所以问题应该出现在XML文件里,

测试类,13行报错:

 package com.mybatis.test;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mybatis.controller.UserController; public class Test_Controller { public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext app = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserController coll = (UserController) app.getBean("UserController");
coll.test();
} }

对ApplicationContext.xml配置文件进行一步步排查:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 指定需要扫描的包,使注解生效 --> <context:component-scan base-package="com.mybatis.po"/>
<context:component-scan base-package="com.mybatis.dao"/>
<context:component-scan base-package="com.mybatis.Controller"/>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name="url" value ="jdbc:mysql://localhost:3306/Springtest?characterEncoding=utf8"/>
<property name="username" value = "root"/>
<property name="password" value ="mysql" />
<!-- 可同时连接的最大的连接数 -->
<property name="maxActive" value="60" />
<!-- 最大的空闲的连接数 -->
<property name="maxTotal" value="60" />
<!-- 最小的空闲的连接数,低于这个数量会被创建新的连接,默认为0 -->
<property name="maxIdle" value="5" />
<!-- 连接池启动时创建的初始化连接数量,默认值为0 -->
<property name="initialSize" value="5" />
</bean>
<!-- 添加事务支持 -->
<bean id = "txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name = "dataSource" ref = "dataSource"/>
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager ="txManager"/>
<!-- 配置Mybatis工厂,同时指定数据源,并与MyBatista完美结合 -->
<bean id="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref ="dataSource"/>
<!-- configLocation 的属性为Mybatis 的核心配置文件 -->
<property name = "configLocation" value = "classpath:mybatis-config.xml"></property>
</bean>
<!-- Mapper 代理开发,使用Spring自动扫描MyBatista的接口并装配 -->
<!-- Spring 将指定包中所有的被@Mapper注解标注的接口自动装配为MyBatatis的映射接口 -->
<bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- MyBatis-spring组件的扫描器 -->
<property name="basePackage" value = "com.mybatis.dao"/>
<property name="sqlSessionFactoryBeanName" value = "sqlSessionFactory"/>
</bean> </beans>
  1. 检查扫描的包名,是否有写错或者少写的。
  2. 确定数据源的配置正常,我的问题就出在这里,修改数据库配置信息(密码等),看是否会报不一样的错,当还是原来的错,说明配置文件没有加载或者数据源错误。我用的DBCP数据源(需要导入两个包DBCP+连接池包),修改密码后还是报同样的错误所以我尝试着用Spring自带的数据源,解决了问题,正确代码:
     <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 指定需要扫描的包,使注解生效 --> <context:component-scan base-package="com.mybatis.po"/>
    <context:component-scan base-package="com.mybatis.dao"/>
    <context:component-scan base-package="com.mybatis.Controller"/>
    <!-- 配置数据源 -->
    <bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value = "com.mysql.jdbc.Driver"/>
    <property name="url" value ="jdbc:mysql://localhost:3306/Springtest?characterEncoding=utf8"/>
    <property name="username" value = "root"/>
    <property name="password" value ="mysql" />
    </bean> <!-- 添加事务支持 -->
    <bean id = "txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name = "dataSource" ref = "dataSource"/>
    </bean>
    <!-- 开启事务注解 -->
    <tx:annotation-driven transaction-manager ="txManager"/>
    <!-- 配置Mybatis工厂,同时指定数据源,并与MyBatista完美结合 -->
    <bean id="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref ="dataSource"/>
    <!-- configLocation 的属性为Mybatis 的核心配置文件 -->
    <property name = "configLocation" value = "classpath:mybatis-config.xml"></property>
    </bean>
    <!-- Mapper 代理开发,使用Spring自动扫描MyBatista的接口并装配 -->
    <!-- Spring 将指定包中所有的被@Mapper注解标注的接口自动装配为MyBatatis的映射接口 -->
    <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- MyBatis-spring组件的扫描器 -->
    <property name="basePackage" value = "com.mybatis.dao"/>
    <property name="sqlSessionFactoryBeanName" value = "sqlSessionFactory"/>
    </bean> </beans>
  3. 检查对应的依赖类,配置文件路径能否Ctrl进去。MyBatis的核心文件和映射文件路径是否正确。以下是我的代码:
  4. <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <mappers>
    <!-- 映射文件-->
    <mapper resource = "com/mybatis/dao/UserMapper.xml"/>
    </mappers>
    </configuration
     
  5. <?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.mybatis.dao.UserDao">
    <!-- 根据ID查询用户信息 -->
    <select id="selectUserById" parameterType = "Integer" resultType = "com.mybatis.po.Myuser">
    SELECT * FROM user WHERE uid = #{uid}
    </select>
    <!--
    <select id="selectAllUser" resultType = "com.mybatis.po.Myuser">
    SELECT * FROM user
    </select>
    添加一个用户,#{uname}为com.mybatis.po.MyUser属性值
    <insert id ="addUser" parameterType = "com.mybatis.po.Myuser">
    INSERT INTO user (uname,usex) VALUES (#{uname},#{usex})
    </insert>
    修改一个用户
    <update id="updateUser" parameterType = "com.mybatis.po.Myuser">
    UPDATE user SET uname = #{unmae},usex = #{user} where uid = #{uid}
    </update>
    删除一个用户
    <delete id = "delectUser" parameterType = "Integer">
    DELECT from user WHERE uid = #{uid}
    </delete> -->
    </mapper >

    看Dao层的接口和Mapped的映射文件是否是在同一包下。

类似问题的博客:

https://blog.csdn.net/h363659487/article/details/74275972

https://blog.csdn.net/u012385190/article/details/53186552

         嗯嗯,第一次写这样的博客,希望会对大家有帮助!!,愿我们都被温柔以待!2019.4.21。

spring整合mybatis接口无法注入问题的更多相关文章

  1. spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现

    知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...

  2. spring 整合 mybatis 中数据源的几种配置方式

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...

  3. Mybatis学习(六)————— Spring整合mybatis

    一.Spring整合mybatis思路 非常简单,这里先回顾一下mybatis最基础的根基, mybatis,有两个配置文件 全局配置文件SqlMapConfig.xml(配置数据源,全局变量,加载映 ...

  4. Mybatis(六) Spring整合mybatis

    心莫浮躁~踏踏实实走,一步一个脚印,就算不学习,玩,能干嘛呢?人生就是那样,要找点有意思,打发时间的事情来做,而钻研技术,动脑动手的过程,还是比其他工作更有意思些~ so,努力啥的都是强迫自己做自以为 ...

  5. 简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题

    https://blog.csdn.net/RicardoDing/article/details/79899686 近期,在使用spring和mybatis框架编写代码时,sqlSession不需要 ...

  6. Spring整合MyBatis(三)sqlSessionFactory创建

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 目录 一.SqlSessionFactoryBean的初始化 二.获取 ...

  7. Spring整合MyBatis(二)Spring整合MyBatis

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 了解了MyBatis的独立使用过程后,我们再看看它与Spring整合的 ...

  8. Spring整合Mybatis案例,献给初学的朋友

    今天我们来学习Spring整合Mybatis. 开发环境:Ide:MyEclipse 2017 CI JDK:1.8 首先我们简单的认识下这两个框架 1.Mybatis MyBatis是一个支持普通S ...

  9. SPring整合Mybatis方式一

    Spring整合Mybatis 需要maven包: mysql-connector-java 5.1.47, mybatis 3.5.2, spring-webmvc 5.2.2.RELEASE, s ...

随机推荐

  1. FBOSS: Building Switch Software at Scale

    BOSS: 大规模环境下交换机软件构建 本文为SIGCOMM 2018 论文,由Facebook提供. 本文翻译了论文的关键内容. 摘要: 在网络设备(例如交换机和路由器)上运行的传统软件,通常是由供 ...

  2. monaco editor + vue的配置

    monaco editor是vscode的御用编辑器. 功能非常强大,使用方便轻巧,对js\ts等等语言支持都良好,能方便的扩展以支持其他语言或者自定义的特性. 夸了这么多,这里只说它一个问题: 这货 ...

  3. android studio 撤销和恢复

    我的Android studio版本是2.2版本 1.Ctrl+z是撤销快捷键 2.如果Ctrl+z 掉的内容,又反悔了,快捷键为:Ctrl + Shift + z.

  4. idea 启动调试模式总提示端口58346被占用问题

    在开发的时候,莫名其妙没法用jrebel调试模式启动了tomcat了,最开始以为是后台端口占用问题,然而把后台java程序全部关了都没用.仔细排查,根据提示发现是端口58346被占用了, 于是便在 w ...

  5. PHP文件域上传

    PHP中使用文件域上传文件,需要几个步骤,首先先判断有无文件域,然后判断是否选择了文件,最后判断文件是否上传成功. 需要注意的是 表单中有文件域,必须将method设置为post, enctype设置 ...

  6. 写给需要的Javaer-大数据学习路线篇

    已经更新100+篇~ 关注公众号,BAT大神带你飞~ 听说你还在写Java,看Spring,看Dubbo,今天SpringCloud, 明天Dubbo3.X新版本... 10个开发9个半在写Java后 ...

  7. Kubernetes系列之理解K8s Service的几种模式

    今天给大家介绍下k8s的service的几种访问模式. 概述 我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要 ...

  8. Xapian的内存索引-添加文档

    本文主要记录Xapian的内存索引在添加文档过程中,做了哪些事情. 内容主要为函数执行过程中的流水线. demo代码: Xapian::WritableDatabase db = Xapian::In ...

  9. .Net WebApi 初探

    实现服务层与api层共用,也就表明Service层就是api层. 关键类和接口 System.Web.Http.Dispatcher.DefaultHttpControllerSelector web ...

  10. Ocelot统一权限验证

    Ocelot作为网关,可以用来作统一验证,接上一篇博客,我们继续 前一篇,我们创建了OcelotGateway网关项目,DemoAAPI项目,DemoBAPI项目,为了验证用户并分发Token,现在还 ...