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 29ca2d8..42474b1 100644 --- a/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java +++ b/src/main/java/org/nebula/contrib/ngbatis/proxy/NebulaDaoBasic.java @@ -4,29 +4,23 @@ package org.nebula.contrib.ngbatis.proxy; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.edgeName; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.entityType; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.getClassModel; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.getCqlTpl; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.getMethodModel; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.pkType; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.proxy; -import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.vertexName; - import com.vesoft.nebula.client.graph.data.ResultSet; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; import org.nebula.contrib.ngbatis.exception.QueryException; +import org.nebula.contrib.ngbatis.handler.CollectionStringResultHandler; import org.nebula.contrib.ngbatis.models.ClassModel; import org.nebula.contrib.ngbatis.models.MethodModel; import org.nebula.contrib.ngbatis.models.data.NgPath; import org.nebula.contrib.ngbatis.utils.Page; import org.springframework.data.repository.query.Param; +import java.io.Serializable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.nebula.contrib.ngbatis.proxy.NebulaDaoBasicExt.*; + /** * 数据访问的基类,用于提供单表 CRUD 与基本的节点关系操作
* 以下在方法注释中所说的“对应类型” 均指的是 泛 型T @@ -38,6 +32,7 @@ public interface NebulaDaoBasic { // region query zoom + /** *

通过主键查询对应表的单条记录

* @@ -183,6 +178,7 @@ default Long countPage(Page page) { // endregion // region insert zoom + /** *

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

* @@ -215,6 +211,7 @@ default Integer insertSelective(T record) { /** * 批量插入全字段 + * * @param ts 当前Tag下的多节点 */ default void insertBatch(List ts) { @@ -225,12 +222,13 @@ default void insertBatch(List ts) { /** * 批量插入非空字段 + * * @param ts 当前Tag下多个顶点 */ default void insertSelectiveBatch(List ts) { MethodModel methodModel = getMethodModel(); ClassModel classModel = getClassModel(this.getClass()); - MapperProxy.invoke(classModel,methodModel,ts); + MapperProxy.invoke(classModel, methodModel, ts); } // endregion @@ -263,6 +261,7 @@ default T updateByIdSelective(T record) { /** * 批量更新行记录,selective + * * @param ts 当前Tag下的多节点 */ default void updateByIdBatchSelective(List ts) { @@ -288,6 +287,7 @@ default void upsertByIdSelective(T record) { // endregion // region delete zoom + /** *

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

* @@ -329,6 +329,7 @@ default Integer deleteById(I id) { } // endregion + /** *

通过 主键批量删除当前记录

* @@ -345,6 +346,7 @@ default Integer deleteByIdBatch(Collection ids) { } // region graph special + /** * 根据三元组值,插入关系。任一参数为空,不执行。 * @@ -376,9 +378,9 @@ default void insertEdgeBatch(List triplets) { * 根据三元组值, 插入关系。任一参数为空,不执行。 *

Selective: 仅处理非空字段

* - * @param src 开始节点值 - * @param edge 关系值 - * @param dst 结束节点值 + * @param src 开始节点值 + * @param edge 关系值 + * @param dst 结束节点值 */ default void insertEdgeSelective(Object src, Object edge, Object dst) { if (dst == null || src == null || edge == null) { @@ -393,9 +395,9 @@ default void insertEdgeSelective(Object src, Object edge, Object dst) { * 根据三元组值, 插入关系。任一参数为空,不执行。 *

Selective: 仅处理非空字段

* - * @param src 开始节点值 - * @param edge 关系值 - * @param dst 结束节点值 + * @param src 开始节点值 + * @param edge 关系值 + * @param dst 结束节点值 */ default void upsertEdgeSelective(Object src, Object edge, Object dst) { if (dst == null || src == null || edge == null) { @@ -411,22 +413,22 @@ default void upsertEdgeSelective(Object src, Object edge, Object dst) { * * @param startId 开始节点的 id * @param edgeType 关系类型 - * @param endId 结束节点的 id + * @param endId 结束节点的 id * @return 数据库中,两个 id 的节点是否有关系 */ default Boolean existsEdge(I startId, Class edgeType, I endId) { String cqlTpl = getCqlTpl(); String edgeName = edgeName(edgeType); return (Boolean) proxy(this.getClass(), Boolean.class, cqlTpl, - new Class[]{Serializable.class, Class.class, Serializable.class}, startId, edgeName, - endId); + new Class[]{Serializable.class, Class.class, Serializable.class}, startId, edgeName, + endId); } /** * 通过结束节点id与关系类型获取所有开始节点,
开始节点类型为当前接口实现类所管理的实体对应的类型 * * @param edgeType 关系类型 - * @param endId 结束节点的 id + * @param endId 结束节点的 id * @return 开始节点列表 */ default List listStartNodes(Class edgeType, I endId) { @@ -439,7 +441,7 @@ default List listStartNodes(Class edgeType, I endId) { * * @param startType 开始节点的类型 * @param edgeType 关系类型 - * @param endId 结束节点的 id + * @param endId 结束节点的 id * @return 开始节点列表 */ default List listStartNodes(Class startType, Class edgeType, I endId) { @@ -449,14 +451,14 @@ default List listStartNodes(Class startType, Class edgeType, I endId) { Class daoType = this.getClass(); Class returnType = entityType(daoType); return (List) proxy(daoType, returnType, cqlTpl, - new Class[]{Class.class, Class.class, Serializable.class}, startVertexName, edgeName, - endId); + new Class[]{Class.class, Class.class, Serializable.class}, startVertexName, edgeName, + endId); } /** * 通过开始节点id与关系类型获取所有结束节点,
结束节点类型为当前接口实现类所管理的实体对应的类型 * - * @param startId 开始节点id + * @param startId 开始节点id * @param edgeType 关系类型 * @return 结束节点列表 */ @@ -468,9 +470,9 @@ default List listEndNodes(I startId, Class edgeType) { /** * 指定结束节点类型 并通过开始节点id与关系类型获取所有结束节点 * - * @param startId 开始节点的id + * @param startId 开始节点的id * @param edgeType 关系类型 - * @param endType 结束节点的类型 + * @param endType 结束节点的类型 * @return 结束节点列表 */ default List listEndNodes(I startId, Class edgeType, Class endType) { @@ -488,7 +490,7 @@ default List listEndNodes(I startId, Class edgeType, Class endType) { * 通过结束节点id与关系类型获取第一个开始节点,
开始节点类型为当前接口实现类所管理的实体对应的类型 (对应类型) * * @param edgeType 关系类型 - * @param endId 结束节点的 id + * @param endId 结束节点的 id * @return 开始节点 */ default T startNode(Class edgeType, I endId) { @@ -501,8 +503,8 @@ default T startNode(Class edgeType, I endId) { * * @param startType 开始节点的类型 * @param edgeType 关系类型 - * @param endId 结束节点的 id - * @param 开始节点的类型 + * @param endId 结束节点的 id + * @param 开始节点的类型 * @return 开始节点 */ default E startNode(Class startType, Class edgeType, I endId) { @@ -512,17 +514,18 @@ default E startNode(Class startType, Class edgeType, I endId) { Class daoType = this.getClass(); Class returnType = entityType(daoType); return (E) proxy(daoType, returnType, cqlTpl, - new Class[]{Class.class, Class.class, Serializable.class}, startVertexName, edgeName, - endId); + new Class[]{Class.class, Class.class, Serializable.class}, startVertexName, edgeName, + endId); } /** * Find the shortest path by srcId and dstId. + * * @param srcId the start node's id * @param dstId the end node's id * @return Shortest path list. entities containing vertext in path. - * If you want to obtain attributes within an entity, - * you need to use “with prop” in the nGQL. + * If you want to obtain attributes within an entity, + * you need to use “with prop” in the nGQL. */ default List> shortestPath(@Param("srcId") I srcId, @Param("dstId") I dstId) { MethodModel methodModel = getMethodModel(); @@ -534,22 +537,23 @@ default List> shortestPath(@Param("srcId") I srcId, @Param("dstId") I /** * 查找指定起始点和目的点之间的最短路径 - * @param srcId 起始点id - * @param dstId 目的点id + * + * @param srcId 起始点id + * @param dstId 目的点id * @param edgeTypeList Edge type 列表 - * @param direction REVERSELY表示反向,BIDIRECT表示双向 + * @param direction REVERSELY表示反向,BIDIRECT表示双向 * @return 起始点和目的点之间的最短路径 */ - default List> shortestOptionalPath(@Param("srcId") I srcId,@Param("dstId") I dstId, - @Param("edgeTypeList") List edgeTypeList, - @Param("direction") String direction + default List> shortestOptionalPath(@Param("srcId") I srcId, @Param("dstId") I dstId, + @Param("edgeTypeList") List edgeTypeList, + @Param("direction") String direction ) { MethodModel methodModel = getMethodModel(); methodModel.setReturnType(Collection.class); methodModel.setResultType(NgPath.class); ClassModel classModel = getClassModel(this.getClass()); return (List>) MapperProxy.invoke(classModel, methodModel, - srcId, dstId,edgeTypeList,direction); + srcId, dstId, edgeTypeList, direction); } // endregion @@ -557,19 +561,15 @@ default List> shortestOptionalPath(@Param("srcId") I srcId,@Param("dst /** * 列出所有图空间 + * * @return 所有图空间 */ default List showSpaces() { MethodModel methodModel = getMethodModel(); - methodModel.setReturnType(ResultSet.class); - methodModel.setResultType(ResultSet.class); + methodModel.setReturnType(CollectionStringResultHandler.class); + methodModel.setResultType(String.class); ClassModel classModel = getClassModel(this.getClass()); - ResultSet resultSet = (ResultSet) MapperProxy.invoke(classModel, methodModel); - List spaceNames = new ArrayList(); - for (int i = 0; i < resultSet.rowsSize(); i++) { - spaceNames.add(resultSet.rowValues(i).get("Name").toString()); - } - return spaceNames; + return (List) MapperProxy.invoke(classModel, methodModel); }