JDBI3的AbstractArgumentFactory.build反向

时间:2018-09-20 13:25:27

标签: java mysql jdbi

我的MySQL表看起来有三列,一个是long(user_id),另一个是varchar(名称),最后是varchar(规则(这是一个作为字符串的JSON数组))。我最近集成了JDBI3,并且正在使用其this选项。我的bean(用户类)如下所示。

@BindBean

我的规则类如下所示。

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();
});

我无法获得return this.jdbi.withHandle(handle -> { handle.registerArgument(new RuleArgumentFactory()); return handle.createQuery(SELECT_QUERY) .bind(param, paramValue) .mapToBean(User.class) .findFirst(); }); 对象,因为当JDBI尝试执行构建功能时。函数的参数变得不匹配,因为它们在接受User时变成(String, ConfigRegistry),最后抛出了错误(List<Rule>, ConfigRegistry)。有没有一种方法可以将JSON序列化为argument type mismatch对象。可能与List<Rule>相反。

0 个答案:

没有答案