ngbatis 如何实现一对多或其他复杂关系的实体映射

match (v:person)-[e:officer]->(v2)<-[e1:officer]-(v3:person)
where v.person.NAME contains ‘任’
return id(v) as id,properties(v).NAME as name,e.REL as rel,properties(v2).CORP_NAME as corpName, id(v2) as corpKey ,properties(v3).NAME as partners,id(v3) as partnersId
order by id asc, corpKey asc ,partnersId asc

目前我是使用原生sql进行的数据查询
然后在业务层进行对象转换
由于会耗费较多内存,想要使用ngbtais来进行相关操作
想了解下ngbatis如何对复杂关系进行映射

来。补充下你的 NebulaGraph 版本。

是使用的3.3的版本

nebula-java 返回的 ResultSet 当中包含了 columnNames,
同时 获取到的值如果不是基本类型,则包含了类型信息,如对应的 tagName, edgeName。vertex、edge内包含了 properties

在启动过程中,会建立 tag 跟 java实体之间的映射关系。
或者,如果是类型声明在 DAO 中的类型,也会根据指定的 resultType 类型来获取与上述 properties 相对应的java实体属性名,java实体的属性可以通过 @Column 来注解成与vertex prop 一样的名字,如果都是驼峰,默认不需要注解。

找到对应关系后,使用反射赋值。

3 个赞

大叶老师好棒

1 个赞

以上述 nGQL 为例:

BizPojo.java

//  如果 Person Officer ... 有对应的 PersonDao OfficerDao... 继承了 NebulaDaoBasic, 此时已构建起 tag 与 java 实体的关系,可直接使用 Map
@Data
public BizPojo {
   private Person v;
   private Officer e;
   private Map v2;
   private Officer e2;
   private Person v3;
}

ExampleDao.java

List<BizPojo> selectExample();

ExampleDao.xml

<mapper namespace="com.example.ExampleDao">

    <select id="selectExample" resultType="com.example.model.BizPojo">
      match (v:person)-[e:officer]->(v2)<-[e1:officer]-(v3:person)
      where v.person.NAME contains ‘任’
      return 
          v, e, v2, v3
      order by v asc, v2 asc ,v3 asc
    </select>

</mapper>
2 个赞

:star_struck: 大叶老师好厉害。

2 个赞

感谢,我会尝试在之后将ngbatis集成进项目中.

2 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。