mybatis源码配置文件解析之三:解析typeAliases标签

本文详细解析了mybatis配置文件中typeAliases标签的使用,包括<package>和<typeAlias>标签的配置和解析过程。mybatis会根据<package>标签扫描指定包下所有类并注册别名,而<typeAlias>标签允许为单个类自定义别名。在解析过程中,mybatis会检查类上的@Alias注解以确定别名。解析顺序要求<typeAlias>标签必须在<package>标签之前。此外,文章还探讨了别名注册的细节和使用规则。
摘要由CSDN通过智能技术生成

在前边的博客在分析了mybatis解析settings标签,《mybatis源码配置文件解析之二:解析settings标签》。下面来看解析typeAliases标签的过程。

一、概述

在mybatis核心配置文件(mybatis-config.xml)中有关typeAliases的配置如下,

<typeAliases>
       <package name="cn.com.mybatis.bean"></package>
       <typeAlias name="user" type="cn.com.mybatis.bean.User"></typeAlias>
</typeAliases>

上面给出了两种配置typeAlias的放式,一种是配置package标签,一种是typeAlias表。

我上面的配置是有问题的,在测试的时候一直报下面的错误,

上面的问题困扰了笔者好久,没找到原因,因为解析typeAliases标签的源码中找不到任何的原因,最后排查日志,原来是在加载核心配置文件的时候要把配置和mybatis的dtd文件进行验证,这里是验证出错了,具体的错误是typeAlias标签必须在package标签的前边,也就是标签是有顺序的。把配置改为下面的顺序,程序正常,

<typeAliases>
       <typeAlias alias="user" type="cn.com.mybatis.bean.User"></typeAlias>
       <package name="cn.com.mybatis.bean"/>
    </typeAliases>

1、配置<package>标签

<package>标签配置的是一个包名,mybatis会扫描该包下的所有类,并注册一个别名,这里在标签中无法为某个类指定一个自定义的别名,mybatis提供了另外一种方式可以使用自定义的别名,即@Alias注解,在类上标记该注解,如下,

package cn.com.mybatis.bean;

import org.apache.ibatis.type.Alias;

//配置别名为myMenu
@Alias(value="myMenu")
public class Menu {

    private String menuId;
    private String menuName;
    private String url;
}

上面为Menu类配置了别名,在扫描该包的时候会使用自定义的别名,不会使用mybatis默认的别名规则(Class.getSimpleName())

2、配置<typeAlias>标签

这种配置是单独为某个类配置别名,其中alias属性可以不配置,不配置则使用mybatis默认的别名规则,如下

<typeAlias alias="MyUser" type="cn.com.mybatis.bean.User"></typeAlias>

上面看了typeAlias的两种配置方式,那么何为typeAlias,意思就是给一个类配置一个别名,如这里有一个cn.com.mybatis.bean.User类,可以为其配置别名为MyUser,

那么在配置文件中便可以使用别名代替类的全限类名,目的是简便。这里需要注意的是配置的别名的使用范围仅限于mybatis的配置文件中(包含核心配置文件和Mpper映射文件)

二、详述

上面,了解了typeAlias的配置及作用,下面看mybatis是如何解析的。

在XMLConfigBuilder类中的parseConfiguration方法,

  private void parseConfiguration(XNode root) {
    try {
      //issue #117 read properties first
      //解析properties标签    
      propertiesElement(root.evalNode("properties"));
      //解析settings标签,1、把<setting>标签解析为Properties对象
      Properties settings = settingsAsProperties(root.evalNode("settings"));
      /*2、对<settings>标签中的<setting>标签中的内容进行解析,这里解析的是<setting name="vfsImpl" value=",">
      * VFS是mybatis中用来表示虚拟文件系统的一个抽象类,用来查找指定路径下的资源。上面的key为vfsImpl的value可以是VFS的具体实现,必须
      * 是权限类名,多个使用逗号隔开,如果存在则设置到configuration中的vfsImpl属性中,如果存在多个,则设置到configuration中的仅是最后一个
      * */
      loadCustomVfs(settings);
      //解析别名标签,例<typeAlias alias="user" type="cn.com.bean.User"/>
      typeAliasesElement(root.evalNode("typeAliases"));
      //解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登登PTE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值