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

Orika映射jdbc ResultSet Bean

庄新翰
2023-03-14
            try (ResultSet result = stmt.executeQuery("select 1 as internalTestPojoId, CURRENT_TIMESTAMP as now")) {
                result.next();
                MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
                mapperFactory.classMap(ResultSet.class, InternalTestPojo.class)
                        .byDefault()
                        .field("internalTestPojoId:{getInt('internalTestPojoId')|getInt('internalTestPojoId')|type=" + int.class.getName() + "}", "internalTestPojoId")
                        .field("now:{getTimestamp('now')|getTimestamp('now')|type=" + Timestamp.class.getName() + "}", "now")
                        .register();
                MapperFacade mapper = mapperFactory.getMapperFacade();
                InternalTestPojo pojo = mapper.map(result, InternalTestPojo.class);
                Assert.assertEquals(pojo.internalTestPojoId, 1);
                Assert.assertEquals(pojo.now, new Timestamp(new Date().getTime() / 1000 * 1000));

            }
protected Property getProperty(java.lang.reflect.Type type, String expr,
                               boolean isNestedLookup, Property owner) throws MappingException {
    Property property = null;
    try {
        property = super.getProperty(type, expr, isNestedLookup, null);
    } catch (MappingException e) {
        try {
            property = super.resolveInlineProperty(type,
                    expr + ":{getInt('" + expr + "')|getInt('" + expr + "')|type=" + int.class);

        } catch (MappingException subE) {
            throw e; // throw the original exception
        }
    }
    return property;
}

这很好,Orika自动确定bean上的属性名,并在expr中给我。但它没有告诉我类型。它也没有告诉我我试图映射到什么。在本例中,我只需假设目标是ResultSet。

  1. 如何知道要将数据放入的expr的类型?如果是字符串,我将进行内联绑定调用resultset.getstring(“expr”),并告诉Orika使用java.lang.string。如果是时间戳,我将进行内联绑定调用resulset.getTimestamp(“expr”)并告诉Orika使用Timestamp
  2. 我如何知道我试图从resultset映射到internaltestpojo,而不是从map映射到internaltestpojo

共有1个答案

荆树
2023-03-14

我认为最简单的方法是使用自定义类映射生成器扩展默认类映射生成器,这样您就可以通过重写byDefault方法自动向类映射添加字段。

这是一个在Orika中使用注释的简单示例:https://gist.github.com/elaatifi/5212119

您不需要使用反射,可以使用PropertyResolver查找InternalTestPojo的所有属性,并为每个属性构建ResultSet的计数器部分porperty,并将其添加到类映射中。

 类似资料:
  • 这些类映射不能用于双向映射。所以,我使用了两个不同的映射。但是使用两个不同的具有双向映射的类映射使上述方法都不起作用。我正在寻找一种方法来使用一个classmap只用于单向映射,这样我就可以使用上面的两个。 任何帮助都将不胜感激。谢了。

  • 我已经定义了对象HomeContentDTO和SubscriberUpsertDTO的映射 下面是这两个对象的映射配置 HomeContentDTO中的所有映射值都没有复制到SubscriberUpsertDTO。有人知道原因吗?

  • 我有一个对象带有字段

  • 鉴于 和 如何在Orika中映射以下内容? 我需要定制的映射器或过滤器吗?

  • 我想使用Orika library映射一个包含嵌套集合的字段。我在课堂上的领域定义如下: Pojo是一个简单的Pojo类。不幸的是,我有一个MappingException,它是由Orika内部逻辑中的NullPointerException引起的。 我做错事了吗?也许我需要使用自定义映射功能? 编辑: 下面是我的代码: } 公共类源{private final List } 公共类目的地{pri

  • 我有以下课程: 我想要两个同一类的对象,比方说: 当我把映射到时,应该保持,因为有一个。 如何使用? 我试过这样的方法: 提前谢谢