我在数据库中有一列,我想将其另存为JSON并取回。
我的方法是:
我将其另存为ClobTypeHandler
,并尝试将其另存为ClobTypeHandler
。
我正在使用Mybatis,但是出现以下错误。
Could not set property 'idType' of 'class package.abc' with value '{"idNum":"123","text":"ENCkk-KZJTmN8Mr5jEims0rssRow8xaAnkOtl0RQHDth1ByVtshI7zQebtcogOvYM-gNo15DwwPmduaufk03CteqRL03cRyrG4%3B","key":"}P]H73}AF}TGB$OIDCYVIIB+VW{4TR)I?U}_`_ZXP[UY$BJNXV{U~/@!F%+SVMFYT/2IAXIOPB"}' Cause: java.lang.IllegalArgumentException: argument type mismatch
下面是Java层和数据库详细信息。
class abc{
private JsonNode idType;
public String getIdType() {
return idType != null ? idType.toString():null;
}
public void setIdType(JsonNode idType) {
this.idType = idType;
}
}
mapper.xml(插入数据库)
INSERT INTO CUSTOMER
(<include refid="common_customer_insert_columns"></include>,id_type)
VALUES
(<include refid="common_customer_insert_fields"></include>,<include refid="cc_customer_insert_fields"></include>,
<choose> <when test="abc.idType !=null">#{abc.idType,typeHandler= org.apache.ibatis.type.ClobTypeHandler}</when>
<otherwise>''</otherwise></choose>);
mapper.xml(从数据库中读取)
<resultMap>
<result column="id_type" property="abc.idType"
typeHandler="org.apache.ibatis.type.ClobTypeHandler" />
</resultMap>
我尝试保存和检索的示例JSON值:
"idType": {
"idNum": "123",
"text": "ENh-KZJTmN8Mr5jEims0rssRow8xaADth1ByVtshI7zQebtcogOvYM-gNo15DwwPmduaufk03CteqRLaVwF0b3cRyrG4%3D",
"key":"}P]H73}AF}TGB$OICQ*DCYVIIB+VW{4TR)I?U}_`_ZXP[UY$BJNXV{@!F%+SVMFYT/2IAXIOPB"
}
答案 0 :(得分:0)
您可以不使用POJO来做到这一点:
ObjectMapper mapper = new ObjectMapper();
JsonNode idType = mapper.readTree(<json-string>);
答案 1 :(得分:0)
react-native upgrade
扩展了ClobTypeHandler
,因此它允许以BaseTypeHandler<String>
的形式从数据库列设置和检索值。当您像这样使用String
时:
ClobTypeHandler
底层的mybatis期望#{abc.idType,typeHandler= org.apache.ibatis.type.ClobTypeHandler}
返回abc.getIdType
,而这样做。到目前为止一切顺利。
从数据库中检索值时,使用的映射为:
String
在这种情况下,<result column="id_type" property="abc.idType"
typeHandler="org.apache.ibatis.type.ClobTypeHandler" />
尝试使用ClobTypeHandler
设置器设置idType
属性,并期望它接受setIdType
。但是setter参数为String
,因此您会收到消息,指出类型不兼容。
要解决此更改,类型设置器将在其中进行从JsonNode
到String
的转换:
JsonNode
请注意:您can use是静态的public void setIdType(String idTypeString) {
ObjectMapper mapper = new ObjectMapper();
this.idType = mapper.readTree(isTypeString);
}
,以避免在每次调用时创建它。
更好的方法是为类型ObjectMapper
创建your own TypeHandler
。它将在内部进行JsonNode
<=> String
转换,因此您JsonNode
不会被这种(不相关的)逻辑所污染。