没有注释的marklogic pojo数据绑定

时间:2015-07-14 10:49:42

标签: mapping marklogic pojo

是否可以在不使用注释的情况下定义映射?如下所述:

  

@id或@PathIndexProperty(scalarType = ScalarType.STRING)

我想在外部文件中定义绑定,并说 newPojoRepository 以使用它来进行映射。

感谢。

耳廓

2 个答案:

答案 0 :(得分:1)

您始终可以创建一个新类,该类扩展您的独立pojo对象并将您的pojo注释附加到新类。这是一个例子。请记住在ManagedCat / averageHeight上创建int类型的Path Range Index。

Cat.java

public class Cat {
    private String id;
    private int averageHeight;

    public Cat() {}

    public Cat(String id, int averageHeight) {
        this.id = id;
        this.averageHeight = averageHeight;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getAverageHeight() {
        return averageHeight;
    }

    public void setAverageHeight(int averageHeight) {
        this.averageHeight = averageHeight;
    }

    public String toString() {
        return "id=[" + id + "] averageHeight=[" + averageHeight + "]";
    }
}

ManagedCat.java

import com.marklogic.client.pojo.annotation.Id;
import com.marklogic.client.pojo.annotation.PathIndexProperty;
import com.marklogic.client.pojo.annotation.PathIndexProperty.ScalarType;

public class ManagedCat extends Cat {
    public ManagedCat() {
        super();
    }

    public ManagedCat(String id, int averageHeight) {
        super(id, averageHeight);
    }

    @Id
    @Override
    public String getId() {
        return super.getId();
    }

    @PathIndexProperty(scalarType = ScalarType.STRING)
    @Override
    public int getAverageHeight() {
        return super.getAverageHeight();
    }
}

CatManager.java

import com.marklogic.client.DatabaseClient;
import com.marklogic.client.DatabaseClientFactory;
import static com.marklogic.client.DatabaseClientFactory.Authentication.DIGEST;
import com.marklogic.client.pojo.PojoPage;
import com.marklogic.client.pojo.PojoQueryDefinition;
import com.marklogic.client.pojo.PojoRepository;
import static com.marklogic.client.pojo.PojoQueryBuilder.Operator.GT;
import java.util.ArrayList;
import java.util.List;

public class CatManager {
    private DatabaseClient client = DatabaseClientFactory.newClient(
        "localhost", 8000, "admin", "admin", DIGEST);
    private PojoRepository<ManagedCat, String> catRepo =
        client.newPojoRepository(ManagedCat.class, String.class);
    private PojoQueryDefinition largeCatQuery =
        catRepo.getQueryBuilder().range("averageHeight", GT, 20);
    private long start = 1;

    public void saveCat(ManagedCat cat) {
        catRepo.write(cat);
    }

    public Cat getCat(String id) {
        return catRepo.read(id);
    }

    public List<Cat> getLargeCats() {
        ArrayList list = new ArrayList<Cat>();
        catRepo.search(largeCatQuery, start)
            .forEach(cat -> list.add(cat));
        return list;
    }

    public static void main(String[] args) {
        CatManager catMgr = new CatManager();
        catMgr.saveCat( new ManagedCat("houseCat", 10) );
        catMgr.saveCat( new ManagedCat("lion",     45) );

        System.out.println("saved house cat=[" + catMgr.getCat("houseCat")+ "]");
        System.out.println("saved lion=[" + catMgr.getCat("lion")+ "]");
        System.out.println("large cats=[" + catMgr.getLargeCats()  + "]");
    }
}

答案 1 :(得分:0)

在Java中,这是一个常见的问题,存在许多可用的数据映射工具,可为您提供多种选择。 首先,大多数数据映射工具都乐于忽略他们没有专门处理的注释。一个常见的用例是将JAXB类映射到其他用途(其中包含注释)。 例如,杰克逊数据绑定库(https://github.com/FasterXML/jackson-databind)在具有“外国”的课程中可以完美地工作。注释。我会首先检查您的工具,以验证您是否需要做任何事情。

更常见的情况是,数据映射工具需要自己的注释,但您想要映射您没有源或不能更改的第三方类。再次,杰克逊处理这个很好的选择,包括&#34; View&#34;和&#34; Mixin&#34;

对于未连接到序列化的数据绑定库以及为此同样的问题而设计的数据绑定库考虑纯粹的&#34;数据映射&#34;图书馆 它会将一个类映射/复制到另一个类,而无需自定义任何一个类。

MapStruct:http://mapstruct.org/ 推土机:https://github.com/DozerMapper/dozer

请注意,Jackson的DataMapper适用于数据绑定和数据映射。

这里列出了很多 - 我还没有尝试过大部分这些, http://www.javacodegeeks.com/2013/10/java-object-to-object-mapper.html