好久没有写博客了,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

【坑】解决maven管理SSM中mybatis的mapper文件扫描失败的问题的更多相关文章

  1. Maven管理SSM框架的pom.xml文件配置(自己主动下载所依赖的jar包)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25403855 <project xml ...

  2. 解决Maven并行编译中出现打包错误问题的思路

    解决Maven并行编译中出现打包错误问题的思路 并行构建 Maven 3.x 提供了并行编译的能力,通过执行下列命令就可以利用构建服务器的多线程/多核性能提升构建速度: mvn -T 4 clean ...

  3. 【mybatis】idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin

    idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin,名字可能叫Free mybatis-plugin 安装上之后,可能需要重启ide ...

  4. 自动生成Mybatis的Mapper文件

    自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,myba ...

  5. MyBatis的Mapper文件的foreach标签详解

    MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...

  6. IDEA中MyBaits的Mapper文件颜色问题

    IDEA中MyBaits的Mapper文件颜色问题 在IDEA中Mapper文件的展示 包含的警告及其解决方案 然后我们就完成了,效果如下 在IDEA中Mapper文件的展示 在IDEA中,Mappe ...

  7. Eclipse中mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....

    1.下载dtd文件 2.在eclipse中配置本地dtd文件: Window->Preferences->XML->XML Catalog->User Specified En ...

  8. mybatis整合spring,使用org.mybatis.spring.mapper.MapperScannerConfigurer扫描出现问题

    <!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties" ...

  9. mybatis写mapper文件注意事项(转)

    原文链接:http://wksandy.iteye.com/blog/1443133 xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响 < < > & ...

随机推荐

  1. 01.Flink笔记-编译、部署

    Flink开发环境部署配置 Flink是一个以Java及Scala作为开发语言的开源大数据项目,代码开源在github上,并使用maven来编译和构建项目.所需工具:Java.maven.Git. 本 ...

  2. spring + spring mvc 使用 maven 编译出现异常

    异常如下: [INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------- ...

  3. linux下redis的安装、启动、关闭和卸载

    edis 在Linux 和 在Windows 下的安装是有很大的不同的,和通常的软件安装是一样的. 一  下载 Redis 安装包 去redis 官网下载reids 安装包, redis 官网默认只提 ...

  4. linux 编写定时任务,查询服务是否挂掉

    shell 脚本 #!/bin/bash a=`netstat -unltp|grep fdfs|wc -l` echo "$a" if [ "$a" -ne ...

  5. AGC022E Median Replace

    题意 给出一个长度为奇数\(n\)的残缺01串,问有多少种补全方法,每次将连续三个位替换为它们的中位数后,能有一种方案使它变为1. \(n \le 3*10^5\) 思路 左边表示栈顶. 将操作简化为 ...

  6. CentOS 6.5系统中mysql数据库还原后出现无法读表

    图形化工具还原提示如下: 命令行输入 mysql> use netmanage;  Database changed  mysql> show tables;  ERROR 1018 (H ...

  7. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  8. Framework7 + Angular 开发问题解决汇总

    本篇主要汇总一下使用Framework7 + Angular 开发中遇到的一些难点及我的解决方法,以后再遇到会在这里继续更新. 一.页面表格按需加载 情况描述:默认加载10条,在用户上拉页面是再进行下 ...

  9. DevOps时代的软件过程改进探讨 杨振涛 云加社区 今天 作者:杨振涛,腾讯云TVP 本文从Jenkins,DevOps,云原生等视角探讨了软件过程改进在各个时代的挑战和价值,重新审视了SPI在软件开发和交付的效率和质量提升方面的意义

    DevOps时代的软件过程改进探讨 杨振涛 云加社区 今天 作者:杨振涛,腾讯云TVP 本文从Jenkins,DevOps,云原生等视角探讨了软件过程改进在各个时代的挑战和价值,重新审视了SPI在软件 ...

  10. android studio: 实现类似于XCode中的#pragma mark的效果

    代码行数写多了,想找一个指定的方法真困难,关键有时候记不住方法的名字,用Ctrl+O也不好使,突然想到以前做iOS开发时,XCode里有一个#pragma mark的功能,很好用:在代码中定义这样一个 ...