写在前面:本节还是对上一节别名属性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类型转换器进行源码分析,以及自定义类型转换器的实战!