TypeHandler
负责JAVA类型与JDBC类型之间的转换,TypeHandler接口的方法分两类:
- void setParameter():负责将JAVA类型转换为JDBC类型
- T getResult():负责将数据从JDBC类型转换为JAVA类型
BaseTypeHandler为Mybatis提供的抽象类,主要实现交给其子类实现。
TypeHandler用于完成单个参数以及单个列值的类型转换。
TypeHandlerRegister
//记录JdbcType与TypeHandler之间的关系,前者是个枚举
private final Map<JdbcType, TypeHandler<?>> JDBC_TYPE_HANDLER_MAP = new EnumMap<JdbcType, TypeHandler<?>>(JdbcType.class);
//记录JAVA类型与向指定JDBC类型转换时的关系,如String可以转换为char、varchar等类型,所以存在一对多
private final Map<Type, Map<JdbcType, TypeHandler<?>>> TYPE_HANDLER_MAP = new ConcurrentHashMap<Type, Map<JdbcType, TypeHandler<?>>>();
//所有TypeHandler类型以及对应对象
private final Map<Class<?>, TypeHandler<?>> ALL_TYPE_HANDLERS_MAP = new HashMap<Class<?>, TypeHandler<?>>();
//空TypeHandler集合标识
private static final Map<JdbcType, TypeHandler<?>> NULL_TYPE_HANDLER_MAP = Collections.emptyMap();
通过多个重载的register()方法像上述集合中注册typeHandler对象;
通过多个重载的getTypeHandler()从上述四个集合中获取对应的TypeHandler对象;
TYpeAliasRegister
提供类的别名注册和管理功能,使用TYPE_ALIEASES字段(Map<String,Class<?>>
类型)管理别名与java类型之间的关系,使用registerAlias()完成注册