这是Mybatis由浅入深的第5节,前四节传送门:
【Mybatis由浅入深 -01入门】
【Mybatis由浅入深 - 02增删改查CRUD】
【Mybatis由浅入深 - 03动态SQL】
【Mybatis由浅入深 - 04结果映射】
前言
在之前的章节里, 我们接连定义了3个mapper接口和映射文件xml, 但一直没有提Mybatis是如何知道我们定义的, 按照Mybatis的灵活性来说, 这里路径肯定不是固定的。
那么Mybatis是怎么知道我们写的mapper接口和映射文件xml在哪里呢?
其实Mybatis并没有使用什么特别的技术, 只是在全局配置文件config里通过mappers元素指定的, 如果仔细想想, 换作你来开发, 方式无外乎使用包(package)路径,xml(resource)路径,类(class)路径等这几种方式.
下面我们先来看看Mybatis是如何配置的, 再结合源码来看看Mybatis是如何实现的.
第1种. package方式
package元素, 通过name指定包路径,优先级第1(最高)
必须保证接口名(例如UserMapper)和xml名(UserMapper.xml)相同,还必须在同一个包中
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="com.tiangang.dao.mapper"/>
</mappers>
第2种. resource方式
mapper元素, 通过resource指定classpath路径的相对资源, 优先级第2
不用保证同接口同包同名 (这也是前几节里使用的方式).
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="com/tiangang/dao/mapper/UserMapper.xml"/>
<mapper resource="com/tiangang/dao/mapper/UserDynamicSqlMapper.xml"/>
<mapper resource="com/tiangang/dao/mapper/AccountMapper.xml"/>
</mappers>
第3种. url方式
mapper元素, 通过url指定网络资源或者本地磁盘资源, 优先级第3
不推荐, 了解即可, 格式file:///var/mappers/AuthorMapper.xml
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:E:/mappers/AccountMapper.xml"/>
</mappers>
第4种. class方式
mapper元素, 通过class指定接口路径, 优先级第4(最低)
必须保证接口名(例如UserMapper)和xml名(UserMapper.xml)相同,还必须在同一个包中
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="com.tiangang.dao.mapper.UserMapper"/>
<mapper class="com.tiangang.dao.mapper.UserDynamicSqlMapper"/>
<mapper class="com.tiangang.dao.mapper.AccountMapper"/>
</mappers>