Mybatis源码解析——TypeHandler

TypeHandler

负责JAVA类型与JDBC类型之间的转换,TypeHandler接口的方法分两类:

  1. void setParameter():负责将JAVA类型转换为JDBC类型
  2. 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()完成注册

发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mutou_ren/article/details/102854550