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

Orika属性表达式映射

乌俊健
2023-03-14

鉴于

classA {

    long fahr;
....

classB {
    long cels;
....

如何在Orika中映射以下内容?

A.fahr <-> (B.cels*9)/5   

我需要定制的映射器或过滤器吗?

共有2个答案

闻人花蜂
2023-03-14

它更适合使用转换器(按id)。

金正阳
2023-03-14

如果两者的数据类型不同,我建议使用字段级转换器,但由于它们的数据类型相同,我们必须为整个类使用自定义转换器。这是适合此用例的示例转换器。

import ma.glasnost.orika.BoundMapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.converter.ConverterFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;

public class EntryClass {

    public static void main(String[] args) {
        EntryClass ec = new EntryClass();
        BoundMapperFacade<A, B> facade = getMapperFactory().getMapperFacade(A.class, B.class);
        A fahr = new A(455);
        B cels = facade.map(fahr);
        System.out.println(cels);
        A revFahr = facade.mapReverse(cels);
        System.out.println(revFahr);
    }

    private static MapperFactory getMapperFactory() {
        MapperFactory factory = new DefaultMapperFactory.Builder()
                                .build();
        ConverterFactory cfactory = factory.getConverterFactory();
        cfactory.registerConverter(new FahrCelsConverter());
        factory.classMap(A.class, B.class)
                .field("fahr", "cels")
                .byDefault()
                .register();
        return factory;
    }
}

public class A {

    long fahr;

    public A(long fahr) {
        this.fahr = fahr;
    }


    public long getFahr() {
        return fahr;
    }


    public void setFahr(long fahr) {
        this.fahr = fahr;
    }


    @Override
    public String toString() {
        return "A [fahr=" + fahr + "]";
    }
}

public class B {

    long cels;

    public B(long cels) {
        this.cels = cels;
    }

    public long getCels() {
        return cels;
    }

    public void setCels(long cels) {
        this.cels = cels;
    }

    @Override
    public String toString() {
        return "B [cels=" + cels + "]";
    }
}

public class FahrCelsConverter extends BidirectionalConverter<A, B>
{
@Override
public B convertTo(A source, Type<B> destinationType, MappingContext mappingContext) {      
    if(source != null)
    {
        return new B((source.fahr - 32) * 5 / 9);
    }
    return null;
}

@Override
public A convertFrom(B source, Type<A> destinationType, MappingContext mappingContext) {
    if(source != null)
    {
        return new A((source.cels / 5) * 9 + 32);
    }
    return null;
}
}
 类似资料:
  • 映射类上的属性可以链接到SQL表达式,SQL表达式可用于查询。 使用杂交种 将相对简单的SQL表达式链接到类的最简单和最灵活的方法是使用一个在本节中描述的所谓的“混合属性”。 混合属性 . 混合提供了一个同时在Python和SQL表达式级别工作的表达式。例如,下面我们映射一个类 User ,包含属性 firstname 和 lastname 包括一个混合动力车 fullname ,这是两个字符串的

  • 接下来我们来看看属性表达式。在之前的例子中,属性表达式只涉及到被管理的实体类的直接属性,在创建查询时我们已经确保解析出的属性是被管理实体类的属性之一。实际上,我们可以定义嵌套属性。假设Person类有一个Address,Address中又有ZipCode。在这种情况下,下面方法的方法名会通过x.address.zipCode来检索属性。 List<Person> findByAddressZipC

  • 我有一个对象带有字段

  • 在我的Spring Boot应用程序(基于JHipster 4)中,我试图使用属性表达式根据Spring文档中描述的相关实体的属性来过滤我的查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-方法。查询属性表达式 我想得到所有的约会,在他们的约会计划中有一个特定的雇员帐户

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

  • 假设bean映射器用于将业务Modell映射到DTO模型,反之亦然:哪一个提供了转换属性路径的简单方法? 根据这份优秀的bean映射器列表,并在他们的网站上进一步阅读,如果发现ModelMapper和Orika看起来很有吸引力。