- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在数据库中有一列,我想将其保存为 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 层和 DB 的详细信息。
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"
}
最佳答案
员工.java
public class Employee {
private int id;
private String name;
private Config config; //save as josn in DB
}
配置.java
public class Config implements Serializable{
private static final long serialVersionUID = 1L;
private String key;
private String value;
private String msg;
private int referenceNumber;
}
JsonTypeHandler.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@MappedTypes({Config.class})
public class JsonTypeHandler extends BaseTypeHandler<Config> {
ObjectMapper objectMapper = new ObjectMapper();
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Config config, JdbcType jdbcType) throws SQLException {
try {
preparedStatement.setObject(i, objectMapper.writeValueAsString(config));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
@Override
public Config getNullableResult(ResultSet resultSet, String s) throws SQLException {
if(resultSet.getString(s) != null){
try {
return objectMapper.readValue(resultSet.getString(s), Config.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public Config getNullableResult(ResultSet resultSet, int i) throws SQLException {
if(resultSet.getString(i) != null){
try {
return objectMapper.readValue(resultSet.getString(i), Config.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public Config getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
if(callableStatement.getString(i) != null){
try {
return objectMapper.readValue(callableStatement.getString(i), Config.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
}
MyBatis 插入查询
@Insert("insert into employee(name, config) values(#{employee.name}, #{employee.config, typeHandler=com.example.demo.image.JsonTypeHandler})")
void saveEmployee(@Param("employee") Employee employee);
MyBatis 选择查询
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "config", column = "config", typeHandler =com.example.demo.image.JsonTypeHandler.class),
})
@Select("select id, name, config from employee")
List<Employee> getAll();
关于java - 使用 myBatis 从数据库读取 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396753/
1.概述 转载:MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质
1.概述 转载:核心配置综述之StatementHandler 2.MyBatis 四大组件之StatementHandler StatementHandler 是四大组件中最重要的一个对象,负责操作
1.概述 转载:MyBatis 启动流程 MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。My
1.概述 转载:MyBatis 基础搭建及架构概述 2.MyBatis 是什么? MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。MyBatis消除了大部分JDBC的样板代码、
1.概述 转载:核心配置综述之 ParameterHandler MyBatis 四大核心组件我们已经了解到了两种,一个是 Executor ,它是MyBatis 解析SQL请求首先会经过的第一道关卡
1.概述 转载:核心配置综述之 ResultSetHandler 我们之前介绍过了MyBatis 四大核心配置之 Executor、StatementHandler、 ParameterHandler
如果我使用mybatis,我可以很容易地得到更新的行数,就像 update table set desc = 'xxx' where name = ? 但是,如果我想获取更新的行数,而不是计数,我该如
如何在MyBatis 3中使用小于等于 SELECT * FROM( SELECT * FROM TABLE1 WHERE COL1 =#{COL1,jdbc
我将 mybatis3.0.6 与 java 一起使用 哪个性能更好? [select id="getData" parameterType="Integer" resultType="Integer
我无法在 mybatis 中使用动态排序类型创建 SQL,如下例 select user_profile.user_profile_id, user_profile.first_name
这是一个流行的例子。 insert into ACCOUNT ( ACC_ID, ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL )values (
我下载了MyBatis,文件夹中有一个mybatis-3.0.4-javadoc.jar,我解压并打开它,但它几乎是空的。 哪里可以找到MyBatis的API文档? 最佳答案 http://repo1
我正在尝试为 ArrayList 编写类型处理程序,但这给了我错误,任何人都可以帮助我。 我想将 ArrayList 作为 VARCHAR 存储在数据库中并将其检索为 ArrayList。 packa
目录 依赖 配置 CodeGenerator mybatis-plus-generator + clickhouse 自动生成代码 依赖
目录 三者实现对比 使用fluent mybatis 来实现上面的功能 换成mybatis原生实现效果 换成mybatis plus
例如,我有查询从员工中选择 ID、姓名、年龄、地址,而不是拥有员工对象列表。我希望有一个 map 列表,如 list{ map{ ("id", 123), ("name","jac
我在使 MyBatis (3.4.6) 工作时遇到一些麻烦。 我已将 mybatis-config.xml 文件放置在项目的 src/main/resources 文件夹中,但是当我运行单元测试时,出
我现在使用 Mybatis 和 spring-boot。我没有添加mybatis-config.xml。我根据说明通过 application.properties 为数据源和 mybatis 进行所
这是我的第一篇文章,用我糟糕的英语...... 我使用的是MyBatis3.0 在查询中,我使用 SqlBuilder 的方法如下: public class DataStatisticSqlBuil
主题:MyBatis:Boolean Paraeter:MyBatis 正在使用 Getter 内容: 大家好, 我一直在寻找解决我近乎简单的 MyBatis 问题的方法: 给定代码(仅必要部分):
我是一名优秀的程序员,十分优秀!