• 【坑】解决maven管理SSM中mybatis的mapper文件扫描失败的问题



    好久没有写博客了,11月底来到公司实习,上个月写个小demo,趁此回顾下SSM,今天将最近的积累记录下;

    前言

    在学习 mybatis 的时候,都知道要将 mapper.xml 文件和 mapper 接口放在一个包下面,便于直接扫描接口,创建代理对象;

    在这里插入图片描述

    就像图中这样;

    但是在 SSM 整合开发,整个项目使用 maven 管理的过程中,总是会遇到莫名其妙的 BUG :比如我们使用 mapper.xml 中的某个方法的时候,总是提示找不到该方法,有时候是 mapper.xml 文件的方法和 接口 中的方法写的不一样导致的;

    但是有时候明明你写的都一样,或者上午你还是可以正常使用的,午休起来,发现只要涉及到数据库的操作,使用了 mapper.xml 的方法,都会提示找不到方法 ;

    Invalid bound statement (not found): cn.hyc.mapper.UserMapper.findUser For Login 对应的SQL 语句必定存在的,但是它提示找不到;

    这种情况时不时的发生,自己都相信写代码是玄学编程了;

    下面介绍一种改进方式;


    改进方式来替换原始的使用方式

    1. mapper 接口单独放在 main/java 目录下一个文件夹里面
      在这里插入图片描述

    2. mapper.xml 映射文件,放在 resource 文件下面的单独文件中,不和接口放在一起
      在这里插入图片描述

    3. 配置文件中配置扫描

      扫描方式,稍微有点改变,需要注意下:

      	// 扫描接口还是一样的
          <!--批量扫描 mapper,自动生成代理对象 -->
          <!--扫描mapper接口-->
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
              <property name="basePackage" value="cn.hyc.mapper"/>
              <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
          </bean>
      
       // 对 xml 映射文件也需要单独的扫描下,在里面添加一个  name="mapperLocations" ,扫描 xml 文件
          <!--扫描 xml 映射文件 -->
          <!-- 配置 sqlSessionFactory,让 spring 管理sqlSessionFactory -->
          <!-- class 类在 spring-mybatis的整合包里面 -->
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件 -->
              <property name="mapperLocations"  value="classpath:mapper/*.xml"/>
              <!--mybatis全局配置文件 -->
              <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
              <property name="dataSource" ref="dataSource" />
          </bean>
      

      至此完工了!


    后记

    当初遇到这bug的时候,修改了4个多小时,还是停滞不前,一筹莫展,自己已经 hold 不住了 ,自己会的三脚猫功夫全用上了,在自己的认知中,mapper 就是这样玩的;

    后来师傅来看下,发现不是代码的问题,看下配置方式,说 ,不要再使用放在一起的方式,实际项目中,没有人那样使用,分开放

    至此又学会了一招;

    – 2019年1月14日10:06:31

    时至今日,知道了这个问题产生的原因:IDEA 默认是不会扫描 Java 目录下面的 xml 文件的,因此,有两种解决方法,一种就是本文提到的;

    另外一种,这是修改 pom 文件,在里面使得 IDEA 读取 Java 目录下面的 xml 文件 ;

    – 2019年3月18日09:41:40

  • 相关阅读:
    一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
    常用Git命令大全
    职场被边缘化是怎样的
    HTTP网络设置
    java黑科技
    cmd执行java命令
    python 使用镜像下载依赖包
    初识go语言
    华为交换机(S5720)配置日志外发syslog服务器
    Neo4j记录
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665609.html
Copyright © 2020-2023  润新知