java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis-config.xml文件中的mappers标签

mybatis-config.xml文件中的mappers标签使用

作者:一只呆小白

在MyBatis配置中,<mapper>标签关键用于指定SQL Mapper的XML文件路径,主要有三种指定方式:resource、url和class,Resource方式从类的根路径开始,适合放在项目内部保障移植性,URL方式指定绝对路径,移植性差,适用于外部路径

前言

在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接口必须在同一个目录下。并且名字一致。

名称一致很好实现,在同一目录下如何实现?难道我们要在java文件夹下的mapper文件夹下创建xml文件?答案是否定的。 

上面我们讨论resource的时候,我们发现java文件夹和resources文件夹其实是“一个文件夹”,只不过起了两个名字。因此我们只需要在resources文件夹下创建同等的文件夹结构就可以了。

实战

在resources文件夹下创建同等文件夹

这里必须是/不可以是.具体为什么,你可以试试。

放文件

设置mapper标签

运行一个测试案例

结果

再次查看target文件夹

可以看出上面我们我们分别将接口和xml文件放在Java和resources同级目录下,但其实他们在同一目录下,再次证实。二者分别放在java和resources文件夹下的同级文件夹下,最终会被放在同一个文件夹下。

问题

如果有多个.xml文件我们一一写出来的话mapper标签也会有很多,还是很麻烦的,强大的MyBatis又给我们解决了

我们只需要使用package标签即可,我们只需要指定接口(动态代理相关知识)所在包名即可,不需要一一指定接口名,但实现的功能是一样的。

这就意味着我们以后不用再一一指定xml文件了,还是非常舒服的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文