【坑】解决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 语句必定存在的,但是它提示找不到;
这种情况时不时的发生,自己都相信写代码是玄学编程了;
下面介绍一种改进方式;
改进方式来替换原始的使用方式
mapper
接口单独放在main/java
目录下一个文件夹里面
mapper.xml
映射文件,放在 resource 文件下面的单独文件中,不和接口放在一起
配置文件中配置扫描
扫描方式,稍微有点改变,需要注意下:
// 扫描接口还是一样的
<!--批量扫描 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文件扫描失败的问题的更多相关文章
- Maven管理SSM框架的pom.xml文件配置(自己主动下载所依赖的jar包)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25403855 <project xml ...
- 解决Maven并行编译中出现打包错误问题的思路
解决Maven并行编译中出现打包错误问题的思路 并行构建 Maven 3.x 提供了并行编译的能力,通过执行下列命令就可以利用构建服务器的多线程/多核性能提升构建速度: mvn -T 4 clean ...
- 【mybatis】idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin
idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin,名字可能叫Free mybatis-plugin 安装上之后,可能需要重启ide ...
- 自动生成Mybatis的Mapper文件
自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,myba ...
- MyBatis的Mapper文件的foreach标签详解
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...
- IDEA中MyBaits的Mapper文件颜色问题
IDEA中MyBaits的Mapper文件颜色问题 在IDEA中Mapper文件的展示 包含的警告及其解决方案 然后我们就完成了,效果如下 在IDEA中Mapper文件的展示 在IDEA中,Mappe ...
- 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 ...
- mybatis整合spring,使用org.mybatis.spring.mapper.MapperScannerConfigurer扫描出现问题
<!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties" ...
- mybatis写mapper文件注意事项(转)
原文链接:http://wksandy.iteye.com/blog/1443133 xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响 < < > & ...
随机推荐
- java equals 和 == 区别
equals 可以重写, == 不可重写 equals 是方法 equals 是 Object 的方法. 基本作用:判断两个对象是否为引用 public class Object { // 省略部分代 ...
- 理解 java 使用 异或 交换两数
网上看了一些使用异或交换两数,不是很好理解.现在写一下自己的理解. 首先是 异或原则,对于任意 x: x ^ x == 0; x ^ 0 == x; 思路: 根据原则,可以得到两个公式: 求a: ...
- P3144 [USACO16OPEN]关闭农场——离线,并查集
https://www.luogu.org/problem/P3144 每次关闭一个农场,农场之间有边相连,问每次关闭后开着的农场是否是一个连通块: 数据小,离线搞: 我们先记录删的顺序,然后倒着来, ...
- C++标准库分析总结(五)——<Deque、Queue、Stack设计原则>
本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征 1.Deque基本结构 Deque(双向队列)也号称连续空间(其实是给使用者一个善意的谎言,只是为了好用),其实它使用分段拼接起来的 ...
- 微信小程序 使用字体图标 iconfont
第一步:在阿里巴巴矢量图标库下载需要的图标 地址:https://www.iconfont.cn/ 添加至项目 第二步:打开在线代码 将在线代码复制 第三步:点击下载至本地下载图标 将下载的downl ...
- WORD转HTML-python第三方包Mammoth(官方文档翻译)
Mammoth 官方 Mammoth可用于将.docx文档(比如由Microsoft Word创建的)转换为HTML.Mammoth致力于通过文档中的语义信息生成简洁的HTML,而忽略一些其他细节.例 ...
- 阿里云OSS的 存储包、下行流量包、回流流量包 三者有啥关系
阿里云OSS的 存储包.下行流量包.回流流量包 三者有啥关系 一.总结 一句话总结: 你把文件放 oss,会占用存储空间,存储包覆盖这部分费用 你访问存储在 oss 里面的文件,会产生下行流量,就是从 ...
- LTDC/DMA2D——液晶显示
1.显示器的基本参数 (1) 像素像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点. (2) 分辨率一些嵌入式设备的显示器常常以“行像素值 x列像素值”表示屏幕的分辨率.如分辨率 800x ...
- oracle利用触发器实现将ddl操作存入数据表中
先创建DDL数据库事件操作表: create table ddl_event( sys_time date primary key, event_name ), ), obj_type ), obj_ ...
- uefi是如何启动linux内核的?
答:uefi启动linux内核有两条路径: 1. uefi直接进入uefi shell来启动linux内核 2. uefi直接进入uefi shell启动grub启动器,然后进入grub shell启 ...