写在前面:本节还是对上一节别名属性typeAliases源码分析的补充内容,目的就是让大家彻底深入理解mybatis源码,方便大家的使用和扩展!

 

在使用mybatis时候,很少去配置别名!那么别名用的最多的地方就是mapper.xml 文件中  书写sql时,比如:

<select id="selectByPrimaryKey"  resultType="string" parameterType="int" >
SELECTT * FROM TABLE_NAME
</select>

 

Sql语句配置resultType和parameterType的所使用的类型别名时,很多人在犹豫这个类型的别名用什么呢?其实没有配置的情况下,mybatis提供了一套别名对应关系,这里给大家总结了下,给大家参考用。如下:

 

区分 类型 别名
基本类型的包装对象 String.class string
Byte.class byte
Short.class short
Integer.class int
Integer.class integer
Double.class double
Float.class float
Boolean.class boolean
基本类型的包装对象数组 Byte[].class byte[]
Long[].class long[]
Short[].class short[]
Integer[].class int[]
Integer[].class integer[]
Double[].class double[]
Float[].class float[]
Boolean[].class boolean[]
基本类型 byte.class _byte
long.class _long
short.class _short
int.class _int
int.class _integer
double.class _double
float.class _float
boolean.class _boolean
基本类型数组 byte[].class _byte[]
long[].class _long[]
short[].class _short[]
int[].class _int[]
int[].class _integer[]
double[].class _double[]
float[].class _float[]
boolean[].class _boolean[]
部门对象 Date.class date
BigDecimal.class decimal
BigDecimal.class bigdecimal
BigInteger.class biginteger
Object.class object
Date[].class date[]
BigDecimal[].class decimal[]
BigDecimal[].class bigdecimal[]
BigInteger[].class biginteger[]
Object[].class object[]
Map.class map
HashMap.class hashmap
List.class list
ArrayList.class arraylist
Collection.class collection
Iterator.class iterator
ResultSet.class ResultSet

 

上面这些常用类型别名的配置源码在哪里了?

 

上节分析了别名相关源码(配置属性typeAliases和typeAliasesPackage),其中提到一个类TypeAliasRegistry。这个类就是别名包装类,源码如下:

 

public TypeAliasRegistry() {

   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);
 }

 

typeAliases相关的源码分析就到这里了,下一节对主要对typeHandler类型转换器进行源码分析,以及自定义类型转换器的实战!