我正在写一个自定义的JsonTypeHandler,代码运行良好,但我想访问扩展BaseTypeHandler的配置字段,它似乎总是空的。为什么它是空的?我是不是漏掉了什么?

自定义JsonTypeHandler:你可以忽略下面代码中的方法。
@MappedTypes({ JsonObject.class })
@MappedJdbcTypes({JdbcType.NVARCHAR})
public class JsonTypeHandler extends BaseTypeHandler<JsonObject> {
private String sqlDialect;
@Override
public void setNonNullParameter(PreparedStatement ps, int i, JsonObject parameter, JdbcType jdbcType)
throws SQLException {
String parameterAsString = new Gson().toJson(parameter, JsonObject.class);
ps.setString(i, parameterAsString);
}
@Override
public JsonObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
String sqlJson = rs.getString(columnName);
if (null != sqlJson) {
return new Gson().fromJson(sqlJson, JsonObject.class);
}
return null;
}
@Override
public JsonObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String sqlJson = rs.getString(columnIndex);
if (null != sqlJson) {
return new Gson().fromJson(sqlJson, JsonObject.class);
}
return null;
}
@Override
public JsonObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String sqlJson = cs.getString(columnIndex);
if (null != sqlJson) {
return new Gson().fromJson(sqlJson, JsonObject.class);
}
return null;
}
}mybatis-config.xml
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<typeHandlers>
<typeHandler handler="com.dummy.JsonTypeHandler" javaType="com.google.gson.JsonObject"/>
</typeHandlers>
<databaseIdProvider type="DB_VENDOR">
<property name="PostgreSql" value="postgres"></property>
</databaseIdProvider>
<mappers>
<!--mappers-->
</mappers>
</configuration>spring-context.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation"
value="classpath:com/dummy/mybatis/mybatis-config.xml"/>
<property name="dataSource" ref="postgresDataSource"/>
</bean>版本:
dependency 'org.mybatis:mybatis:3.4.1'
mavenBom 'org.springframework:spring-framework-bom:5.2.6.RELEASE'我的目的是从BaseTypeHandler中的configuration对象获取databaseId。希望片段是可重现的。
发布于 2020-06-26 00:52:26
如本issue所述,字段BaseTypeHandler.configuration是错误添加的,计划将其删除。
可以在设置必要的属性后注册类型处理程序的实例,而不是注册Class。它看起来像这样:
JsonTypeHandler handler = new JsonTypeHandler(configuration);
configuration.getTypeHandlerRegistry().register(..., handler, ...);https://stackoverflow.com/questions/62547781
复制相似问题