当前位置: 首页 > 知识库问答 >
问题:

在JDBI行映射器中映射Json

公良鸿风
2023-03-14

目前我有一个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注释的文章,但由于jdbi文档不清楚,所以我不确定这是否正确。

我映射结果的方式是“标准”方式吗?还是有更好/更有效的方式?

谢谢

共有1个答案

田镜
2023-03-14

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

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

此外,sql对象查询方法上的注释@json应该足够了,如果不是嵌套的(例如,联系人作为一个整体是一个json)

 类似资料:
  • 我正在评估JDBI作为Spring、JDBC和MyBatis的可能替代方案,但遇到了一些问题。我在Spring Boot1.2.5和Spring4中使用JDBI。 我得到了下面的stacktrace,如下所示。我做错了什么?文件似乎有点缺乏。

  • 当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 前端将这个json发送到我的API 控制器:

  • 我正在构建一个REST API, 和ActiveBid类 和我的泽西请求映射器,它具有获取数据的逻辑 有人能帮我吗?我不知道和卡桑德拉共事会这么难。

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好