SSM整合无法加载mapper.xml的问题
用idea整合SSM框架,在整合mybatis时,使用注解方式可以运行,在更改为xml配置方式后,一直报错,代码仔细检查没有问题,spring 配置文件已经正确声明mapper.xml文件位置,mapper.xml文件和对应接口文件的namespace以及id都完全正确的情况下,可以访问项目,涉及持久层操作报错500,提示未找到接口中对应方法,错误如下:
HTTP状态 500 - 内部服务器错误
类型 异常报告
消息 Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.nl.dao.AccountMapper.findById
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.nl.dao.AccountMapper.findById
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
原因:项目没有加载mapper.xml文件,原因是maven工程默认不打包工程里面的配置文件,例如xml,peoperties等,因此程序运行时在本地找不到配置文件,查看项目编译的文件夹中是否有mapper.xml文件。
具体操作:打开磁盘中该项目文件夹----target目录-----访问同项目名称的文件夹--------WEB-INF目录----------classes目录,然后根据自己项目的mapper.xml文件位置查找。
解决方法:
在maven项目的pom文件中加入以下代码,让maven加载相关文件
<build>
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
<resources>
<resource>
<!--填写主文件夹 -->
<directory>src/main/java</directory>
<includes>
<!--使打包包含这2种配置文件 -->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--不使用过滤器 -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
参考:https://blog.csdn.net/qq_15038565/article/details/102761116
完成后可以成功运行
在父子maven工程中以上方法并不适用,父工程install时子模块中的mapper文件依然不会打包进去,推荐将mapper文件统一放在resource资源目录下并且在配置文件中配置mapperlocations