Intelij IDEA中Mapper.xml无法构建到资源目录的问题

2024-06-19 09:44

本文主要是介绍Intelij IDEA中Mapper.xml无法构建到资源目录的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题场景:

在尝试把原本在eclipse上的Java Web项目转移至Intelij idea上时,在配置文件均与eclipse一致的情况下出现了如下报错:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.umbrella.crm_core.settings.mapper.UserMapper.selectUserByAccandPwdat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229)at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96)at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36)at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)at jdk.proxy4/jdk.proxy4.$Proxy38.selectUserByAccandPwd(Unknown Source)at cn.umbrella.crm_core.settings.service.impl.UserServiceImpl.queryUserByAccandPwd(UserServiceImpl.java:27)at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)at java.base/java.lang.reflect.Method.invoke(Method.java:580)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)...

问题描述

在eclipse中,我们的项目结构如图所示,即Mapper.xml跟Mapper接口都放在src/java目录下,项目部署tomcat后运行没有任何问题,但是到了IDEA中,项目就无法找到Mapper.xml文件,在反复确认了SpringMVC及MyBatis配置文件无误的情况下,问题仍然无法解决。

项目结构图

原因分析:

eclipse在编译项目时会按照applicationContext-datasource.xml中配置的Mapper扫描器对Mapper.xml进行扫描而Intelij IDEA不会,这其实是两者的Tomcat部署方式不同。也就是说默认情况下,eclipse是热部署,而IDEA不是,IDEA需要先用Maven将项目构建为war包,然后复制到Tomcat等webapps目录下才能运行,而这个构建过程中,由于src/main/java不是资源目录,所以mapper.xml不会被打包至target目录中。

eclipse配置tomcat时是本质上是映射了一个tomcat的镜像在.metadata的serer.core目录下,每创一个tomcat,就生成文件名为“tmp编号”的tomcat的映射文件,创建的镜像和源tomcat就没有关系,eclipse是通过这个镜像的tomcat去运行项目。
IDEA是先把项目进行构建打包,然后将war包复制到本地Tomcat的webapps目录下运行项目。
参照:Eclipse和IDEA配置Tomcat的区别


解决方案:

直接在src/main/resources目录下新建与src/main/java中mapper接口映射的目录,将mapper.xml文件转移至resources目录下,这样在applicationContext-datasource.xml中配置的Mapper扫描器地址可以不用改变。
调整后的项目结构

<!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 --><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.umbrella.crm_core.settings.mapper, cn.umbrella.crm_core.workbench.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>

另外,还有大佬提供了其他的解决方案,就是在pom.xml中配置资源目录的方法,参照下面的链接:

  1. (完美解决汇总)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  2. org.apache.ibatis.binding.BindingException Invalidbound statement (not found)的解决方案和造成原因分析

这篇关于Intelij IDEA中Mapper.xml无法构建到资源目录的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074680

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH