1

我正在使用 Selma,我有以下课程:

public class Customer
{
    private int id;
    private String email;
    private String firstName;
    private String lastName;
    private Date registeredDate;
    private List<Address> addresses;

}

我想将其映射到:

public class Customer
{
    private String id;
    private String email;
    private String firstName;
    private String lastName;
    private Date registeredDate;
    private String company;
    private Address address1;
    private Address address2;
}

有没有办法将 (int)id转换为 (String)id并将第一个地址从Listtoaddress1和第二个地址设置为address2

我正在考虑使用拦截器,但这样我将不得不手动映射Address类。有没有办法使用 Selma 自动映射拦截器中的地址类?例如:

 public class CustomerCustomMapper
{
    public void interceptMyCustomerToCustomer(com.mycode.domain.Customer source, Customer destination) {

        if(source.getAddresses() != null && source.getAddresses().size() > 0)
        {
            com.mycode.domain.Address myAddress1 = source.getAddresses().get(0);

            AddressMapper addressMapper = Selma.builder(AddressMapper.class).build();

            Address address1 = addressMapper.mapAddress(myAddress1);
            destination.setAddress1(address1);

           // do the same for address2
        }
    }

编辑

关于映射地址类,我按照上面显示的方式进行了操作。AddressMapper我用下面的代码创建了一个:Address toAddress(com.mycode.domain.Address address);

然后我创建了一个 addressMapper 并使用它自动映射地址:

AddressMapper addressMapper = Selma.builder(AddressMapper.class).build();

至于id,目前我必须为我映射的每个类创建一个拦截器(几乎每个类都有一个id(SQL)),并像这样手动设置id:destination.setId(Integer.toString(source.getId()));

实际上这很令人沮丧,但遗憾的是我找不到更好的选择。

4

1 回答 1

1

对于地址拦截器的列表是一个很好的答案。

对于 int 到 String,您可以指定从 int 到 String 的自定义映射器映射(请参阅http://www.selma-java.org/#custom-mapper)。

但我建议使用抽象映射器而不是构建新的映射器来映射地址。这样您就可以将您的特定代码集成到映射器中并直接调用地址映射器方法(请参阅http://www.selma-java.org/#abstract-mapper)。

对于 toString 的东西,你也可以向 Github 添加一个特性请求。我很乐意添加此功能。

于 2016-02-18T11:07:54.760 回答