您的位置:首页 > 其它

mybatis-TypeAliasRegistry--类型别名注册

2016-10-28 17:58 417 查看
typeAliases节点主要用来设置别名,其实这是挺好用的一个功能, 通过配置别名,我们不用再指定完整的包名,并且还能取别名。

可以通过别名和反射知识创建别名对应类型的实例

package org.apache.ibatis.type;

import java.math.BigDecimal;

import java.math.BigInteger;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Locale;

import java.util.Map;

import java.util.Set;

public class TypeAliasRegistry {

//Class<?>它是个通配泛型,?可以代表任何类型

  private final Map<String, Class<?>> TYPE_ALIASES = new HashMap<String, Class<?>>();

/**

* 默认为通用类别取别名并注册到map里

*/

public TypeAliasRegistry() {

//
TODO Auto-generated constructor stub

registerAlias("string", String.class);

    registerAlias("byte", Byte.class);

    registerAlias("long", Long.class);

    registerAlias("short", Short.class);

    registerAlias("int", Integer.class);

    registerAlias("integer", Integer.class);

    registerAlias("double", Double.class);

    registerAlias("float", Float.class);

    registerAlias("boolean", Boolean.class);

    registerAlias("byte[]", Byte[].class);

    registerAlias("long[]", Long[].class);

    registerAlias("short[]", Short[].class);

    registerAlias("int[]", Integer[].class);

    registerAlias("integer[]", Integer[].class);

    registerAlias("double[]", Double[].class);

    registerAlias("float[]", Float[].class);

    registerAlias("boolean[]", Boolean[].class);

    registerAlias("_byte",
byte.class);

    registerAlias("_long",
long.class);

    registerAlias("_short",
short.class);

    registerAlias("_int",
int.class);

    registerAlias("_integer",
int.class);

    registerAlias("_double",
double.class);

    registerAlias("_float",
float.class);

    registerAlias("_boolean",
boolean.class);

    registerAlias("_byte[]",
byte[].class);

    registerAlias("_long[]",
long[].class);

    registerAlias("_short[]",
short[].class);

    registerAlias("_int[]",
int[].class);

    registerAlias("_integer[]",
int[].class);

    registerAlias("_double[]",
double[].class);

    registerAlias("_float[]",
float[].class);

    registerAlias("_boolean[]",
boolean[].class);

    registerAlias("date", Date.class);

    registerAlias("decimal", BigDecimal.class);

    registerAlias("bigdecimal", BigDecimal.class);

    registerAlias("biginteger", BigInteger.class);

    registerAlias("object", Object.class);

    registerAlias("date[]", Date[].class);

    registerAlias("decimal[]", BigDecimal[].class);

    registerAlias("bigdecimal[]", BigDecimal[].class);

    registerAlias("biginteger[]", BigInteger[].class);

    registerAlias("object[]", Object[].class);

    registerAlias("map", Map.class);

    registerAlias("hashmap", HashMap.class);

    registerAlias("list", List.class);

    registerAlias("arraylist", ArrayList.class);

    registerAlias("collection", Collection.class);

    registerAlias("iterator", Iterator.class);

    registerAlias("ResultSet", ResultSet.class);

}

/**
 * 这个方法最重要 是讲如何讲将别名对应的类型注册到map里

* 将别名和别名对应的类型注册到map里

* @param alias 别名 为key

* @param value 类型 为value

*/

public
void registerAlias(String alias , Class<?>
value){

if(alias ==
null){

throw
new TypeException("this parameter alias cannot be null");

}

String key =
alias.toLowerCase(Locale.ENGLISH);

if((TYPE_ALIASES.containsKey(key) &&
TYPE_ALIASES.get(key)!=null) && ((Class)TYPE_ALIASES.get(key)).equals(value)){

throw
new TypeException("The alias '" +
alias + "' is already mapped to the value '" + ((Class)TYPE_ALIASES.get(key)).getName() +
"'.");

}

TYPE_ALIASES.put(key,
value);

}

/**

* 获取 TYPE_ALIASES

* @return

*/

public Map<String, Class<?>> getTypeAliases(){

return Collections.unmodifiableMap(TYPE_ALIASES);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: