Mybatis源码解析——TypeHandler

mac2025-04-22  5

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()完成注册

最新回复(0)