使用Orika代替Spring Data Commons

时间:2013-03-19 14:58:45

标签: orika

有几个像Neo4j这样的Spring Data项目使用Spring Data Commons来构建PersistentEntity / PeristentProperty(基本上是类型信息加属性geters和setter)和EntityConverter从本机存储滚动到Java。这就是SDN(Spring Data Neo4j)所做的事情以及它捆绑BeanWrapper转换器以确保Neo4j数据结构允许某些属性类型。

基本上,Java bean标有@NodeEntity注释,并且bean在写入节点时会被分解(认为只有简单属性的bean),它们是由关系对象链接的。

想知道我是否可以和Orika一样吗?意味着通过注释标识类并在复杂递归时处理每个属性。例如:

 @NodeEntity
 class Software {
    String name;
    ....
    Organisation organisation;
    ....
 } 

 @NodeEntity
 class Organisation {
    String name;
 }

应分为2个节点,每个节点包含属性名称和关系对象(表示组织为软件成员)。

1 个答案:

答案 0 :(得分:3)

以下是支持自定义注释的Orika ClassMapBuilder示例,我认为您可以根据自己的需要进行调整。

Gist : AnnotationClassMapBuilder

对于Node(或MongoDB的DBObject),您可以使用自定义属性解析器,看看: http://orika-mapper.github.com/orika-docs/advanced-mappings.html(ElementPropertyResolver)

修改

Orika通过类映射构建映射器,实际上,只是属性对的属性集合,可以是任何具有名称,类型和设置器或/和getter的东西。

您可以自动为Bean中的每个属性创建Neo4J中的等效项,并让Orika构建映射器。

例如,您可以创建一个Person(名称) - > PrintStream映射器, 在其中为每个人的属性(名称)创建打印数据的等效项(System.out)

示例

final Builder name = new Property.Builder()
                          .name("name")
                          .type(String.class.getName())
                          .setter("append(\"My name : \").append(%s).append('\\n')");       
factory.classMap(Person.class, PrintStream.class).fieldMap("name", name, false).add().register();

factory.getMapperFacade().map(person, System.out); // This print to default output stream, My name : xxxx