diff --git a/ngbatis-demo/src/test/java/ye/weicheng/ngbatis/demo/NebulaBasicDaoTests.java b/ngbatis-demo/src/test/java/ye/weicheng/ngbatis/demo/NebulaBasicDaoTests.java index fc061ee..a816315 100644 --- a/ngbatis-demo/src/test/java/ye/weicheng/ngbatis/demo/NebulaBasicDaoTests.java +++ b/ngbatis-demo/src/test/java/ye/weicheng/ngbatis/demo/NebulaBasicDaoTests.java @@ -501,6 +501,12 @@ public void listStartNodes() { System.out.println(JSON.toJSONString(personList)); } + @Test + public void listEndNodes() { + List personList = repository.listEndNodes("易小海", Like.class); + System.out.println(JSON.toJSONString(personList)); + } + @Test public void startNode() { Person whoIsStartForTest = repository.startNode(Like.class, "易小海"); diff --git a/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java b/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java index 993b74b..cdbc48d 100644 --- a/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java +++ b/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java @@ -178,7 +178,7 @@ default Long countPage(Page page) { return (Long) MapperProxy.invoke(classModel, methodModel, page); } // endregion - + // region insert zoom /** *

插入一条记录,全属性插入

@@ -273,7 +273,7 @@ default void upsertByIdSelective(T record) { MapperProxy.invoke(classModel, methodModel, record); } // endregion - + // region delete zoom /** *

数据操作,逻辑删除接口,前提当前类 有字段 is_del

@@ -414,20 +414,32 @@ default Boolean existsEdge(I startId, Class edgeType, I endId) { * * @param edgeType 关系类型 * @param endId 结束节点的 id - * @return 开始节点 + * @return 开始节点列表 */ default List listStartNodes(Class edgeType, I endId) { Class startType = entityType(this.getClass()); return (List) listStartNodes(startType, edgeType, endId); } + /** + * 通过开始节点id与关系类型获取所有结束节点,
结束节点类型为当前接口实现类所管理的实体对应的类型 + * + * @param startId 开始节点id + * @param edgeType 关系类型 + * @return 结束节点列表 + */ + default List listEndNodes(I startId, Class edgeType) { + Class endType = entityType(this.getClass()); + return (List) listEndNodes(startId, edgeType, endType); + } + /** * 指定开始节点类型,并通过结束节点id与关系类型获取所有开始节点 * * @param startType 开始节点的类型 * @param edgeType 关系类型 * @param endId 结束节点的 id - * @return 开始节点 + * @return 开始节点列表 */ default List listStartNodes(Class startType, Class edgeType, I endId) { String cqlTpl = getCqlTpl(); @@ -440,6 +452,25 @@ default List listStartNodes(Class startType, Class edgeType, I endId) { endId); } + /** + * 指定结束节点类型 并通过开始节点id与关系类型获取所有结束节点 + * + * @param startId 开始节点的id + * @param edgeType 关系类型 + * @param endType 结束节点的类型 + * @return 结束节点列表 + */ + default List listEndNodes(I startId, Class edgeType, Class endType) { + String cqlTpl = getCqlTpl(); + String endVertexName = vertexName(endType); + String edgeName = edgeName(edgeType); + Class daoType = this.getClass(); + Class returnType = entityType(daoType); + return (List) proxy(daoType, returnType, cqlTpl, + new Class[]{Serializable.class, Class.class, Class.class}, startId, edgeName, + endVertexName); + } + /** * 通过结束节点id与关系类型获取第一个开始节点,
开始节点类型为当前接口实现类所管理的实体对应的类型 (对应类型) * diff --git a/src/main/resources/NebulaDaoBasic.xml b/src/main/resources/NebulaDaoBasic.xml index 97ed131..3bda8fa 100644 --- a/src/main/resources/NebulaDaoBasic.xml +++ b/src/main/resources/NebulaDaoBasic.xml @@ -367,6 +367,12 @@ RETURN n + +