一、mybatis
主要属性:
1、typeHandler:不过要自定义处理类,要继承BaseTypeHandler; 数据的读写都会被这个类所过滤
<resultMap id="getTestConfigByCode" type="com.xxxxx.entity.TestConfig">
<id column="id" jdbcType="NUMERIC" property="id"/>
<result column="test_json" javaType="com.xxx.xxx.vo.TestJsonVO"
typeHandler="com.xxxx.xx.config.handler.JsonTypeHandler"
jdbcType="VARCHAR"
property="testJson" />
</resultMap>
自定义 typeHandler 类
MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {
private Class<T> clazz;
public JsonTypeHandler(Class<T> clazz) {
if (clazz == null) {
throw new IllegalArgumentException("Type argument cannot be null");
}
this.clazz = clazz;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, JSON.toJSONString(parameter));
}
@Override
public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
return this.toObject(rs.getObject(columnName), clazz);
}
@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return this.toObject(rs.getObject(columnIndex), clazz);
}
@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return this.toObject(cs.getObject(columnIndex), clazz);
}
private T toObject(Object content, Class<T> clazz) {
if (content == null) {
return null;
}
return JSON.parseObject(content.toString(), clazz);
}
}
一、mybatis-plus
mybatis-plus就方便多了,框架已经实现了自定义typeHandler类
1、可以像mybatis一样在xml中配置typeHandler属性:
typeHandler = "com.baomidou.mybatisplus.extension.handlers.jacksonTypeHandler"
2、可以在实体类中用注解:
@TableField(typeHandler = JacksonTypeHandler.class)