我的mysql表看起来有三列,一列是long(userid),另一列是varchar(name),最后是varchar(rules(这是一个json数组作为string))。我最近集成了jdbi3,我正在使用它的 @BindBean
选项。我的bean(用户类)如下所示。
public class User {
private long id;
private String name;
private List<Rule> rules;
}
我的规则类如下所示。
public class Rule {
private long id;
}
我还创造了一个 AbstractArgumentFactory
如下
public class RuleArgumentFactory extends AbstractArgumentFactory<List<Rule>> {
public RuleArgumentFactory() {
super(Types.VARCHAR);
}
@Override
protected Argument build(List<Rule> value, ConfigRegistry config) {
return (position, statement, ctx) -> statement.setString(position, valueToJson());
}
}
我终于把 ArgumentFactory
在执行数据库查询时处理。现在,当我像下面这样执行更新或插入操作时,它工作得很好。
this.jdbi.useHandle(handle -> {
handle.registerArgument(new RuleArgumentFactory());
handle.createUpdate(UPDATE_QUERY)
.bindBean(User)
.execute();
});
但问题是当我执行select查询时,
return this.jdbi.withHandle(handle -> {
handle.registerArgument(new RuleArgumentFactory());
return handle.createQuery(SELECT_QUERY)
.bind(param, paramValue)
.mapToBean(User.class)
.findFirst();
});
我拿不到钥匙 User
对象,因为当jdbi尝试执行构建函数时。函数的参数变得不匹配 (String, ConfigRegistry)
当它接受 (List<Rule>, ConfigRegistry)
最后抛出错误 argument type mismatch
. 有没有办法把json序列化到 List<Rule>
对象。也许是与之相反的东西 build()
.
暂无答案!
目前还没有任何答案,快来回答吧!