ngbatis icon indicating copy to clipboard operation
ngbatis copied to clipboard

how to handle PATH without NebulaDaoBasic?

Open xljnc opened this issue 1 year ago • 6 comments

nql如下: MATCH p = shortestPath((v1:user)-[e*..5]->(v2:user))
WHERE id(v1) == 'user^1' and id(v2) == 'user^9'
RETURN relationships(p); 执行结果如下: image 如何在mapper里将路径映射成自定义的关系列表?

xljnc avatar Jul 20 '23 13:07 xljnc

https://github.com/nebula-contrib/ngbatis/blob/master/ngbatis-demo/src/main/resources/mapper/TestRepository.xml#L129-L129

这个子图的思路应该可以试一试

CorvusYe avatar Jul 20 '23 13:07 CorvusYe

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 来接收

CorvusYe avatar Jul 20 '23 14:07 CorvusYe

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本身,还有就是对代码有一些侵入性。

xljnc avatar Jul 21 '23 05:07 xljnc

是的,会对业务代码有入侵,虽然有提供可行实现,但是不推荐。

比较好的方式是项目中自己定义实体,然后注册解析器对ResultSet进行解析。 可以继承AbstractResultHandler,按类似这样的方式进行解析,这样结果的类型可以更贴合项目需要,https://github.com/nebula-contrib/ngbatis/blob/master/src/main/java/org/nebula/contrib/ngbatis/handler/NgPathResultHandler.java

CorvusYe avatar Jul 21 '23 07:07 CorvusYe

是的,会对业务代码有入侵,虽然有提供可行实现,但是不推荐。

比较好的方式是项目中自己定义实体,然后注册解析器对ResultSet进行解析。 可以继承AbstractResultHandler,按类似这样的方式进行解析,这样结果的类型可以更贴合项目需要,https://github.com/nebula-contrib/ngbatis/blob/master/src/main/java/org/nebula/contrib/ngbatis/handler/NgPathResultHandler.java

正想问NgPath.Relationship后续是否有支持属性的计划,自己实现AbstractResultHandler的确能解决属性的问题 image

xljnc avatar Jul 21 '23 08:07 xljnc

说到 NgPath.Relationship 属性问题,我想到还有一种方案可以试试,属性结构采用的是 Map 的形式:

List<NgEdge<String>> fiveDegreeUser( ... );

不过,跟NgPath一样存在着代码入侵的问题。 如果说不怕麻烦,最佳的方案还是针对项目来定制解析

CorvusYe avatar Jul 21 '23 08:07 CorvusYe