先说结论:
正如其名,Vitural File System 虚拟化文件系统。在 Mybatis 中主要最为用户自定义 Java Mapper 类,和 Type Alias 类的加载的入口。名号叫的比较大,但是在 Mybatis 中对该部分的实现相对比较简单且并不完整。甚至用鸡肋来形容都有些过奖了。该代码是 JBoss 提交并合并到了 Mybatis 主干分支。用户可以通过 JbossVFS 功能完成 MyBatis 资源的管理。但是在 SpringBoot 大行其道的今天,应用的发布都是打包成一个 jar 包发布。所以该功能基本没有任何意义。
代码组成:
VSF 是一个抽象类,mybatis 自带了两个实现类。
通过检查 org.jboss.vfs.VFS 和 org.jboss.vfs.VirtualFile 类是否存在来判断
主要实现了从 jar 包中扫描类文件或其他资源
怎么会用到这个功能:
先来看看代码流程图
从代码流程图可以看出来。xml 配置中可以使用该特性。来看看 http://mybatis.org/dtd/mybatis-3-config.dtd 是怎么描述这个特性的。
那基本可以看出来使用方法了。
参考文档:
https://mybatis.org/mybatis-3/zh/configuration.html#typeAliases
https://mybatis.org/mybatis-3/zh/configuration.html#mappers
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
<!-- 此处会调用 VFS -->
<package name="domain.blog"/>
</typeAliases>
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
<!-- 此处会调用 VFS -->
<package name="org.mybatis.builder"/>
</mappers>
</configuration>
复制代码
那么mybatis-spring项目有没有使用到该特性呢。
答案:没有,mybatis-spring 完全使用了 spring 的 org.springframework.context.annotation.ClassPathBeanDefinitionScanner 类实现了包扫描。没有于 VFS 有任何交互。
结语:
就是一个 JBoss 提交的一段代码。几乎与我们日常开发没有任何关系。完全没有任何研究意义。
评论