diff --git a/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java b/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java index aa9763c..145bf65 100644 --- a/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java +++ b/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java @@ -1,6 +1,8 @@ package com.idata.tools.ngbatisdemo; import com.idata.tools.ngbatisdemo.dao.UserDao; +import com.idata.tools.ngbatisdemo.dao.UserFollowUserDao; +import com.idata.tools.ngbatisdemo.dto.VertexAndEdgeResult; import com.idata.tools.ngbatisdemo.pojo.User; import com.idata.tools.ngbatisdemo.service.UserService; import org.springframework.boot.SpringApplication; @@ -23,15 +25,58 @@ public class NgbatisDemoApplication { userService.demos(); UserDao userDao = context.getBean(UserDao.class); - List list = userDao.selectListString(); - list.forEach(System.out::println); +// List list = userDao.selectListString(); +// list.forEach(System.out::println); User user = new User(); user.setName("james"); - System.out.println(userDao.selectUser()); - System.out.println("==============="); + System.out.println("===============selectByUser"); +// System.out.println(userDao.selectByUser(user)); + + System.out.println("===============selectAgeGt"); +// System.out.println(userDao.selectAgeGt(30)); + + System.out.println("===============selectListString"); +// System.out.println(userDao.selectListString()); + + System.out.println("===============selectUsersMap"); +// System.out.println(userDao.selectUsersMap()); + + System.out.println("===============listUserId"); +// System.out.println(userDao.listUserId()); + + System.out.println("===============selectTriple"); + List result = userDao.selectTriple("znwukfngjlzousboeypixyohrmljlsqzoljdgkdz"); + System.out.println("result.size(): " + result.size()); + result.forEach((vertexAndEdgeResult) -> { + System.out.println(vertexAndEdgeResult.getE()); + System.out.println(vertexAndEdgeResult.getN2()); + System.out.println(vertexAndEdgeResult.getTagType()); + System.out.println(vertexAndEdgeResult.getEdgeType()); + }); + System.out.println("result.size(): " + result.size()); +// List> maps = userDao.selectTriple(); +// maps.forEach(map -> { +// Set> entries = map.entrySet(); +// entries.forEach(entry -> { +// System.out.println("key: " + entry.getKey()); +// System.out.println("value: " + entry.getValue()); +// }); +// }); + + System.out.println("==============countEdge"); + int count = userDao.countEdge("znwukfngjlzousboeypixyohrmljlsqzoljdgkdz"); + System.out.println(count); + + System.out.println("===============listEdge"); + UserFollowUserDao userFollowUserDao = context.getBean(UserFollowUserDao.class); +// List userFollowUsers = userFollowUserDao.listEdge(); +// userFollowUsers.forEach(System.out::println); + + + + - System.out.println(userDao.selectListString()); } } diff --git a/src/main/java/com/idata/tools/ngbatisdemo/base/BaseVertex.java b/src/main/java/com/idata/tools/ngbatisdemo/base/BaseVertex.java new file mode 100644 index 0000000..217e33a --- /dev/null +++ b/src/main/java/com/idata/tools/ngbatisdemo/base/BaseVertex.java @@ -0,0 +1,16 @@ +package com.idata.tools.ngbatisdemo.base; + +import org.nebula.contrib.ngbatis.annotations.base.Tag; +import org.nebula.contrib.ngbatis.base.GraphBaseVertex; + +import javax.persistence.Id; + +/** + * @description: + * @author: ChenYawei + * @date: 2025/3/18 16:58 + */ +@Tag(name = "vertex_base") +public abstract class BaseVertex extends GraphBaseVertex { + +} diff --git a/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java index 00c472d..fd7e11b 100644 --- a/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java +++ b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java @@ -1,5 +1,6 @@ package com.idata.tools.ngbatisdemo.dao; +import com.idata.tools.ngbatisdemo.dto.VertexAndEdgeResult; import com.idata.tools.ngbatisdemo.pojo.User; import org.nebula.contrib.ngbatis.proxy.NebulaDaoBasic; import org.springframework.data.repository.query.Param; @@ -19,10 +20,12 @@ public interface UserDao extends NebulaDaoBasic { // new features from v1.2.0 Integer returnAge(@Param("User")User User); - User selectUser(); - User selectByUser(User user); + List selectUser(); + List selectByUser(User user); + List listUserId(); List selectAgeGt(Integer age); List selectListString(); - List selectUsersMap(); - Map selectTriple(); + List> selectUsersMap(); + List selectTriple(String id); + Integer countEdge(String id); } diff --git a/src/main/java/com/idata/tools/ngbatisdemo/dao/UserFollowUserDao.java b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserFollowUserDao.java new file mode 100644 index 0000000..e7bbcd5 --- /dev/null +++ b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserFollowUserDao.java @@ -0,0 +1,16 @@ +package com.idata.tools.ngbatisdemo.dao; + +import com.idata.tools.ngbatisdemo.pojo.UserFollowUser; + +import java.util.List; + +/** + * @description: + * @author: ChenYawei + * @date: 2025/3/18 14:20 + */ +public interface UserFollowUserDao { + + List listEdge(); + +} diff --git a/src/main/java/com/idata/tools/ngbatisdemo/dto/VertexAndEdgeResult.java b/src/main/java/com/idata/tools/ngbatisdemo/dto/VertexAndEdgeResult.java new file mode 100644 index 0000000..19ff4c5 --- /dev/null +++ b/src/main/java/com/idata/tools/ngbatisdemo/dto/VertexAndEdgeResult.java @@ -0,0 +1,32 @@ +package com.idata.tools.ngbatisdemo.dto; + +import com.idata.tools.ngbatisdemo.base.BaseVertex; +import com.idata.tools.ngbatisdemo.pojo.User; +import com.idata.tools.ngbatisdemo.pojo.UserFollowUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @description: + * @author: ChenYawei + * @date: 2025/3/18 14:47 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class VertexAndEdgeResult { + + private User n; + + private UserFollowUser e; + + private User n2; + + private String edgeType; + + private List tagType; + +} diff --git a/src/main/java/com/idata/tools/ngbatisdemo/pojo/User.java b/src/main/java/com/idata/tools/ngbatisdemo/pojo/User.java index 6757dbe..147167b 100644 --- a/src/main/java/com/idata/tools/ngbatisdemo/pojo/User.java +++ b/src/main/java/com/idata/tools/ngbatisdemo/pojo/User.java @@ -1,11 +1,14 @@ package com.idata.tools.ngbatisdemo.pojo; +import com.idata.tools.ngbatisdemo.base.BaseVertex; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.nebula.contrib.ngbatis.annotations.base.Tag; +import org.nebula.contrib.ngbatis.base.GraphBaseVertex; +import javax.persistence.Column; import javax.persistence.Id; -import javax.persistence.Table; /** * @description: @@ -16,14 +19,37 @@ import javax.persistence.Table; @Data @AllArgsConstructor @NoArgsConstructor -@Table(name = "user") -public class User { +//@Table(name = "user") +@Tag(name = "user") +public class User extends GraphBaseVertex { @Id private String id; - private String name; - + @Column(name = "screen_name") + private String screenName; private String platform; + @Column(name = "favourites_count") + private int favouritesCount; + @Column(name = "followers_count") + private int followersCount; + @Column(name = "friends_count") + private int friendsCount; + @Column(name = "listed_count") + private int listedCount; + @Column(name = "following_count") + private int followingCount; + @Column(name = "gather_time") + private String gatherTime; + @Column(name = "register_location") + private String registerLocation; + @Column(name = "region") + private String region; + private String position; + private String label; + private String party; + private String standpoint; + private String verified; + private String url; } diff --git a/src/main/java/com/idata/tools/ngbatisdemo/pojo/UserFollowUser.java b/src/main/java/com/idata/tools/ngbatisdemo/pojo/UserFollowUser.java index acaae84..bfdd23f 100644 --- a/src/main/java/com/idata/tools/ngbatisdemo/pojo/UserFollowUser.java +++ b/src/main/java/com/idata/tools/ngbatisdemo/pojo/UserFollowUser.java @@ -1,9 +1,12 @@ package com.idata.tools.ngbatisdemo.pojo; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import org.nebula.contrib.ngbatis.annotations.DstId; import org.nebula.contrib.ngbatis.annotations.SrcId; import org.nebula.contrib.ngbatis.annotations.base.EdgeType; +import org.nebula.contrib.ngbatis.base.GraphBaseEdge; import javax.persistence.Column; import javax.persistence.Id; @@ -15,8 +18,10 @@ import javax.persistence.Id; */ @Data +@AllArgsConstructor +@NoArgsConstructor @EdgeType(name = "user_follow_user") -public class UserFollowUser { +public class UserFollowUser extends GraphBaseEdge { @Id private Long rank; diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 1d65c84..aa65d03 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -5,10 +5,16 @@ nebula: # space name needs to be informed through annotations(@Space) or xml(space="test") # default false(false: Session pool map will not be initialized) use-session-pool: false # since v1.1.2 + entity-scan: + base-packages: com.idata.tools.nbbatisdemo.pojo # 指向具体子类包路径 + exclude-filters: + - annotation: com.idata.tools.nbbatisdemo.base # 排除基类包路径 + hosts: 172.16.20.2:9669, 172.16.20.4:9669, 172.16.20.5:9669 username: root password: nebula space: Y0210_TEST +# space: Y24_1206 pool-config: min-conns-size: 2 max-conns-size: 4 diff --git a/src/main/resources/mapper/UserFollowUser.xml b/src/main/resources/mapper/UserFollowUser.xml new file mode 100644 index 0000000..f7eccf3 --- /dev/null +++ b/src/main/resources/mapper/UserFollowUser.xml @@ -0,0 +1,30 @@ + + + + + ${myInt} + + + + RETURN @ng.include('include-test-value',{'myInt':age}); + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index b74ed43..a0ff7aa 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -30,6 +30,12 @@ LIMIT 100 + + - + MATCH (n: user)-[e]->(n2) + where id(n) == $p0 + RETURN e as link, n2 as targetVertex, type(e) as edgeType, tags(n2) as tagType LIMIT 100 + + + +