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