一、问题描述
对于下边这种目录结构,直接在xml中书写sql语句,运行时爆出异常:
查看日志,主要描述是找不到接口和mapper.xml的对应关系。
二、问题原因
maven工程的默认机制是编译阶段只加载src-main-java中的java代码,而不加载xml文件。
查看target中mapper文件中只有编译的.class文件。
三、解决办法
(1)使用注解的方式写sql语句(@Select("写sql代码"))
这种方式可以解决maven不加载xml文件,运行代码成功,在swagger中请求也正常。
(2)手动迁移
注解的方式可以解决问题,但是大量的sql语句堆积在代码中,会大大增加代码和sql代 码的耦合度。可以手动将xml文件放入target.**.mapper文件中,也能够正常运行代码。
(3)添加依赖和配置文件方式解决
第一步:在pom中添加如下依赖
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include> <!--将src/main/java目录下所有的xml文件也加载到目标文件中-->
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
第二步:在配置文件中加入如下语句
# mapper文件的扫描路径
mybatis-plus:
mapper-locations: classpath:com/atguigu/eduservice/mapper/xml/*.xml
四、问题解决
三种方式都可以解决此问题,如果帮到了您,麻烦点个关注^~^ ^~^ ^~^