前言
在MyBatis中,< mapper >标签非常重要,因为它对应着我们存放sql语句的xml文件,在之前的使用中我们都是使用resource来指定路径,但其实除了resource可以指定路径的还有url和class但路径形式有所不同,下面来讨论一下有什么不同。
resource
resource对应的路径是从类的根路径开始的。
什么是类的根路径?
以在idea的maven项目中,src文件夹下的main文件夹下的java文件夹和resources文件夹同级,虽然二者是两个文件夹,但他们其实都是类的根路径。
从图中可以看出,上面java下的com文件夹和resource文件夹下的xml文件在target文件夹中处于同一文件夹的同一级。
resource用法实例
resources文件夹下位置
url
这种方式是一种绝对路径的方式,这种方式不要求配置文件必须放到类路径当中,哪里都行,只要提供一个绝对路径就行。这种方式使用极少,因为移植性太差。
为什么说移植性太差?
因为在例如在windows下url对应的路径带有D盘等,但在mac和Linux下没有D盘的概念,这就会造成,项目的移植性很差。
class
这个位置提供的是mapper接口的全限定接口名,必须带有包名的。
mapper标签的作用是指定SqlMapper.xml文件的路径,指定接口名有什么用呢?
举例:< mapper class=“com.powernode.mybatis.mapper.CarMapper”/>
如果你class指定是:com.powernode.mybatis.mapper.CarMapper
那么mybatis框架会自动去com/powernode/mybatis/mapper目录下查找CarMapper.xml文件。
注意:也就是说:如果你采用这种方式,那么你必须保证CarMapper.xml文件和CarMapper接口必须在同一个目录下
。并且名字一致
。
CarMapper接口-> CarMapper.xml
LogMapper接口-> LogMapper.xml
名称一致很好实现,在同一目录下如何实现?难道我们要在java文件夹下的mapper文件夹下创建xml文件?答案是否定
的。
上面我们讨论resource的时候,我们发现java文件夹和resources文件夹其实是“一个文件夹
”,只不过起了两个名字。因此我们只需要在resources文件夹下创建同等的文件夹结构就可以了。
实战
在resources文件夹下创建同等文件夹
这里必须是/
不可以是.
具体为什么,你可以试试。
放文件
设置mapper标签
运行一个测试案例
结果
再次查看target文件夹
可以看出上面我们我们分别将接口和xml文件放在Java和resources同级目录下,但其实他们在同一目录下,再次证实。二者分别放在java和resources文件夹下的同级文件夹下,最终会被放在同一个文件夹下。
问题
如果有多个.xml文件我们一一写出来的话mapper标签也会有很多,还是很麻烦的,强大的MyBatis又给我们解决了
我们只需要使用package标签即可,我们只需要指定接口(动态代理相关知识)所在包名即可,不需要一一指定接口名,但实现的功能是一样的。
这就意味着我们以后不用再一一指定xml文件了,还是非常舒服的
。