博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在springBoot中使用Mapper类问题
阅读量:3963 次
发布时间:2019-05-24

本文共 2732 字,大约阅读时间需要 9 分钟。

文章目录


背景

版本如下:

springboot=1.5.9

jdk=1.8
maven=3.5

在springBoot中使用mapper类,因为有其xml文件的存在,所以其xml文件的存放位置不同,会导致出现运行是否能够调用xml文件的问题存在;这个问题我遇到N多次了,不好好的解决一番,实在是不好继续写项目下去了;

xml文件跟mapper分开

方式一

当xml文件跟mapper文件分开的时候,也就是将xml文件放在springBoot下的src/main/resources文件下,如下所示:

在这里插入图片描述

application.properties

当分开的时候,我们需要在application.properties主配置文件中配置如下:

mybatis.mapper-locations=classpath:mapper/*.xml

mybatis.type-aliases-package=com.drillsb.demo.pojo

第一个:
mybatis.mapper-locations
这个是xml文件的路径
第二个:
mybatis.type-aliases-package
这个是项目所在的pojo的路径

主程序类

为了让mybatis扫描到我们的包,还需要在主程序中声明Mapper包的扫描,如下:

在这里插入图片描述

Mapper

照理来说,按照Mybatis的配置,使用xml文件配置Mapper类的话,不需要在Mapper类中添加注解的,当我们在Service类中直接调用就是了,因为配置文件指明了;但是这样是不行的!

当我们在Service中调用的时候,还是会报无法注入,如下展示:
在PermissionMapper类中:
在这里插入图片描述

之后在Service类中使用Autowired注入,如下:

在这里插入图片描述
注意了:
这样虽然报错,但是项目运行没有一点影响!
这样虽然报错,但是项目运行没有一点影响!
这样虽然报错,但是项目运行没有一点影响!
如图运行成功:
在这里插入图片描述

也就是说是无伤大雅的,也符合前面说的;

但是要想消除这个idea的报错也可以滴;无法注入,是说没有这样的Bean存在,那么我们就添加一个注解,注入Bean嘛,所以在Mapper包下的所有mapper接口添加一个

@Repository注解
或者是
@Component注解

其效果是一样的,都是告知spring管理这个类为Bean;但是个人还是习惯使用@Repository注解,毕竟这个是spring专门用于标注Dao类的;

这样就不会有报错了,如下:
在这里插入图片描述
在这里插入图片描述

方式二

在方式一中,我们需要在主程序类中告诉Mybatis扫描mapper包;添加@MapperScan注解

如下:
在这里插入图片描述
我们也可以在每一个mapper接口中添加@Mapper注解,这样就不需要在主程序类中添加扫描了;如下:
在这里插入图片描述
当然方式二,较为麻烦,还是喜欢方式一。。。。

注意点

在上面的两种方式中,有一个绕不开的点,就是在resources目录下创建的目录的时候,跟在java目录下创建目录是不一样的;

在java文件中我们创建的目录可以使用

.

这样表示子级目录,但是在resources文件下创建使用.

idea创建的时候就会误认为是一个名字,如下这样创建:

在这里插入图片描述
在盘符系统中,是这样的:
在这里插入图片描述
点开之后就只是一个文件,如下:
在这里插入图片描述

实际上我们需要使用的是子级目录形式,也就是在application.properties中写的:

mybatis.mapper-locations=classpath:mapper/*.xml

是一个目录路径;

所以,在resources目录下创建文件,需要以/创建,如下这样的形式:

在这里插入图片描述

当我们创建之后,会发现,是跟用.创建出来的一模一样的名字,如下:
在这里插入图片描述
但是,这两者是不一样的!!!
但是,这两者是不一样的!!!
但是,这两者是不一样的!!!

这个锅就是idea来背!!!!!当我们打开其目录结构,就可以发现,如下:

在这里插入图片描述

惊喜加以外。。。。。。。

点开之后如下:
在这里插入图片描述
唉,就这个问题,困扰了我很久很久!!!
但是idea本身也可查看其到底是否是一个目录,如下:
在这里插入图片描述
这样就可以显示是否是一个目录结构了,如下:
在这里插入图片描述

大大感谢下面博文,鞠躬!!!!

参考的博文:

xml文件跟mapper在同一个目录下

这个就不分方式一跟方式二了;因为只是注解所处方式以及数量不同;

这个也是idea的坑。。。。。。

application.properties

在application.properties文件中,如下:

mybatis.mapper-locations=classpath:com.drillsb.demo.mapper/*.xml

mybatis.type-aliases-package=com.drillsb.demo.pojo

在mapper包下

将原来在resources的mapper目录下的xml文件全部剪切到mapper包下,如下:

在这里插入图片描述

主程序类

主程序类还是指明了Mybatis扫描的包,如下:

在这里插入图片描述
然后运行主程序类,再访问,如下:
在这里插入图片描述
报错:无法使用在mapper包下xml文件中指明的语句;

注意了

xml文件是没有问题的,其它的也没有问题的;因为按照前面分开mapper类和xml文件,运行及其功能都是没有问题的!!!

并且在Ecplise中运行,按照上面的方式去配置,运行也没问题。。。。

但是在idea中就是不行。。。。。。。

百度了好大一会儿,才解决;

在idea中,默认情况下是不会去编译src/main/java下的xml文件的!!!
在idea中,默认情况下是不会去编译src/main/java下的xml文件的!!!
在idea中,默认情况下是不会去编译src/main/java下的xml文件的!!!

所以需要我们自己配置src/main/java也可以编译资源文件,在pom.xml文件中,如下:

src/main/java
**/*.xml

注意这个资源是配置到build标签下的

然后当我们再运行的时候,就成功了~~~~
如下:
在这里插入图片描述
并且在编译文件中也有,如下:
在这里插入图片描述
参考博文:

感想

一篇写下来花了好几个小时,当然收获也不浅!总算是解决了;码字不易,如果有帮助的话,帅哥美女们点个赞好嘛!!!

转载地址:http://jcgzi.baihongyu.com/

你可能感兴趣的文章
格式化数字和货币
查看>>
再论点号
查看>>
字符组集合运算
查看>>
POSIX 字符组
查看>>
Spring Batch 核心概念 2
查看>>
格式化日期和时间
查看>>
局部匹配模式
查看>>
匹配的起始位置 \G
查看>>
条件判断
查看>>
贪婪,非贪婪和占有量词的区别
查看>>
分组,捕获及后向引用
查看>>
格式化消息
查看>>
保护性 copy
查看>>
私有域的访问权限
查看>>
方法重载
查看>>
域和局部变量的初始值
查看>>
对象初始化方式及顺序
查看>>
重写 equals 方法
查看>>
重写 hashCode 方法
查看>>
Spring Batch 注册监听器
查看>>