ngbatis
ngbatis copied to clipboard
how to handle PATH without NebulaDaoBasic?
nql如下:
MATCH p = shortestPath((v1:user)-[e*..5]->(v2:user))
WHERE id(v1) == 'user^1' and id(v2) == 'user^9'
RETURN relationships(p);
执行结果如下:
如何在mapper里将路径映射成自定义的关系列表?
https://github.com/nebula-contrib/ngbatis/blob/master/ngbatis-demo/src/main/resources/mapper/TestRepository.xml#L129-L129
这个子图的思路应该可以试一试
List<NgPath<String>> fiveDegreeUser( ... );
<select id="fiveDegreeUser" resultType="org.nebula.contrib.ngbatis.models.data.NgPath">
MATCH p = shortestPath((v1:user)-[e*..5]->(v2:user))
WHERE id(v1) == 'user^1' and id(v2) == 'user^9'
RETURN relationships(p) as relationships;
</select>
或者试试使用 NgPath 来接收
List<NgPath<String>> fiveDegreeUser( ... );
<select id="fiveDegreeUser" resultType="org.nebula.contrib.ngbatis.models.data.NgPath"> MATCH p = shortestPath((v1:user)-[e*..5]->(v2:user)) WHERE id(v1) == 'user^1' and id(v2) == 'user^9' RETURN relationships(p) as relationships; </select>
或者试试使用 NgPath 来接收 谢谢解答。 使用NgPath是可行的,就是xml里的ngl最后的 返回改为返回path本身,还有就是对代码有一些侵入性。
是的,会对业务代码有入侵,虽然有提供可行实现,但是不推荐。
比较好的方式是项目中自己定义实体,然后注册解析器对ResultSet进行解析。 可以继承AbstractResultHandler,按类似这样的方式进行解析,这样结果的类型可以更贴合项目需要,https://github.com/nebula-contrib/ngbatis/blob/master/src/main/java/org/nebula/contrib/ngbatis/handler/NgPathResultHandler.java
是的,会对业务代码有入侵,虽然有提供可行实现,但是不推荐。
比较好的方式是项目中自己定义实体,然后注册解析器对ResultSet进行解析。 可以继承AbstractResultHandler,按类似这样的方式进行解析,这样结果的类型可以更贴合项目需要,https://github.com/nebula-contrib/ngbatis/blob/master/src/main/java/org/nebula/contrib/ngbatis/handler/NgPathResultHandler.java
正想问NgPath.Relationship后续是否有支持属性的计划,自己实现AbstractResultHandler的确能解决属性的问题
说到 NgPath.Relationship 属性问题,我想到还有一种方案可以试试,属性结构采用的是 Map 的形式:
List<NgEdge<String>> fiveDegreeUser( ... );
不过,跟NgPath一样存在着代码入侵的问题。 如果说不怕麻烦,最佳的方案还是针对项目来定制解析