gpt4 book ai didi

java - 在 JDBI RowMapper 中映射 Json

转载 作者:行者123 更新时间:2023-12-01 19:04:37 25 4
gpt4 key购买 nike

我正在将 JDBI v 3.11.1 与 Amazon Aurora(和 Jackson)结合使用。在我们的表格中,我们经常使用 JsonB,我觉得我所做的映射有点太复杂/太慢。

目前我正在让一个 DAO 做这样的事情:

@RegisterRowMapper(ContactMapper.class)
public interface ContactsDao {

@SqlQuery("SELECT * FROM contacts")
List<Contact> listContacts();
}

而映射器会执行以下操作:(精简到这个问题所需的内容)

public class ContactMapper implements RowMapper<Contact> {

private final ObjectMapper objectMapper = new ObjectMapper();

@Override
public Contact map(ResultSet r, StatementContext ctx) throws SQLException {

Address address = r.getString("address") == null ? null : (Address) mapJson(r.getString("address"), Address.class);

return new Contact(
r.getString("id"),
address
);
}

private Object mapJson(String json, Class clazz) {
if (Strings.isNullOrEmpty(json)) {
return null;
}
try {
return objectMapper.readValue(json, clazz);
} catch (IOException e) {
LOGGER.error("Could not map Address.", e);
return null;
}
}
}

Address 作为 JsonB 字段存储在 Aurora 中。我读过一些有关 JsonMapper Annotation 的内容,但由于 jdbi 文档相当不清楚,我不确定这是否正确。

我映射结果的方式是执行此操作的“标准”方式还是有更好/更有效的方式?

谢谢

最佳答案

有一个 json 插件,由 jackson 或 guava 支持。请参阅http://jdbi.org/#jdbi3-json

如果安装了,在像您的情况这样的嵌套属性上,只要数据库将数据类型声明为“json”/“jsonb”(不是字符串或任何内容),所有内容都应该正确映射。

此外,如果不是嵌套的话,sql 对象查询方法上的注释 @Json 就足够了(例如,Contact 是一个整体的 json)

关于java - 在 JDBI RowMapper 中映射 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59582237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com