当前使用版本(必填,否则不予处理)
3.4.1
您好,在初始化每个表的ResultMapping的时候,为什么不对该表使用的TypeHandler进行注册呢,是出于什么考虑?我看到了TableFieldInfo类中的一段代码,如下:
ResultMapping getResultMapping(final Configuration configuration) {
...
if (typeHandler != null && typeHandler != UnknownTypeHandler.class) {
TypeHandler<?> typeHandler = registry.getMappingTypeHandler(this.typeHandler);
if (typeHandler == null) {
typeHandler = registry.getInstance(propertyType, this.typeHandler);
// todo 这会有影响 registry.register(typeHandler);
}
builder.typeHandler(typeHandler);
}
return builder.build();
}
注册进去应该更好吧。
Comment From: miemieYaho
注册有注册的口子,你自己在xml写resultmap也不会给你注册
Comment From: jymot
@miemieYaho 不好意思,可能是我没说清楚。我自己测试,比如上面那段代码,把注释打开,这样再执行BaseBuilder.resolveTypeHandler方法的时候,就不会再获取新的TypeHandler了。其实我的期望就是BaseBuilder.resolveTypeHandler方法返回的是typeHandlerRegistry.getMappingTypeHandler中已缓存的TypeHandler,而不是每次typeHandlerRegistry.getInstance返回的新实例。
class: org.apache.ibatis.builder.BaseBuilder
protected TypeHandler<?> resolveTypeHandler(Class<?> javaType, Class<? extends TypeHandler<?>> typeHandlerType) {
if (typeHandlerType == null) {
return null;
} else {
TypeHandler<?> handler = this.typeHandlerRegistry.getMappingTypeHandler(typeHandlerType);
if (handler == null) {
handler = this.typeHandlerRegistry.getInstance(javaType, typeHandlerType);
}
return handler;
}
}
所以我没理解咱们代码中注释里面写的这会有影响,不知道会有什么影响。
关的也太草率了。