SpringBoot+Neo4j在社交电商中,讲述你是怎么被绑定为下线的

上两篇文章我们主要讲解了Neo4j的基本知识以及Neo4j的基本使用,这篇文章我们就以实例来深入的理解一下,我们以社交电商中的绑定关系为例,使用SpringBoot+Neo4j来实现。

Neo4j文章回顾:

不懂Neo4j?没关系,一起学

不懂Neo4j?没关系,先学增删改查

一、分析

社交电商中,现在做的比较出色的就应该属于花生日记,以及最近比较火的芬香。或许你经常会收到朋友或者亲戚发来的分享出的商品,而当你点击这些分享出来的商品后,那么,恭喜你,你可能已经被绑定为下级(粉丝)了。当然,我们这里只是举例说明下。

下面我们就用SpringBoot+Neo4j实现别人分享出来的商品,你点击了,注册成为新用户,进而被绑定为下线来详细说明。

二、代码架构

代码架构如下,这里没有写controller和service,以test来测试,也是为了方便。

1578887311044

三、代码实现

1.引入Neo4j依赖

1578882711200

2.添加 neo4j 配置

1578882765769

3.添加Neo4j 节点类

这里添加一个MemberInvit节点,有点注解类似于Mysql中的table 映射的对象类,mysql中叫做ORM,neo4j中叫做OGM。这里要使用到的是 @NodeEntity 注解和 @Id注解。

@NodeEntity声明该类为Neo4j的节点类

@Id Neo4j的主键。

package com.xsjt.learn.neo4j.model; import lombok.*; import org.neo4j.ogm.annotation.Id; import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.Relationship; import java.io.Serializable; import java.util.HashSet; import java.util.Set; /** * @author Joe */ @Data @Builder @AllArgsConstructor @NoArgsConstructor @NodeEntity(label = "MemberInvit") public class MemberInvit implements Serializable { /** 用户id */ @Id private Long mId; /** 用户名称 */ private String name; /** 用户等级 */ private Integer level; /** 发展的下级 */ @Relationship(type = "develop") private Set<MemberInvit> fans; /** * 发展 方法 * @param memberInvit 用户邀请信息 */ public void develop(MemberInvit memberInvit) { if (fans == null) { fans = new HashSet<>(); } fans.add(memberInvit); } }

4.创建repositories类

当然,下面的方法不一定在我们绑定示例中用得到,但是在社交电商中这些都是基本要用的。

package com.xsjt.learn.neo4j.dao; import com.xsjt.learn.neo4j.model.MemberInvit; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; /** * dao层 * @author Joe * @date 2020-01-13 */ @Repository public interface MemberInvitRepository extends Neo4jRepository<MemberInvit, String> { /** * 根据节点id查询节点信息 * @param mId * @return */ MemberInvit findBymId(Long mId); /** * 查询某个节点的所有子节点 * @param mId * @return */ @Query("Match (p:MemberInvit{mId:{mId}})-[*]->(s:MemberInvit) return s ") List<MemberInvit> findChildList(Long mId); /** * 查询某个节点的直属父节点 * @param mId * @return */ @Query("Match (p:MemberInvit)-[*]->(s:MemberInvit{mId:{mId}}) return p limit 1") MemberInvit findParent(@Param("mId") Long mId); /** * 查询某个节点的所有父节点 * @param mId * @return */ @Query("Match (p:MemberInvit)-[*]->(s:MemberInvit{mId:{mId}}) return p") List<MemberInvit> findParentList(@Param("mId") Long mId); /** * 查询某个节点的 指定等级的 最近的父节点 * @param mId * @param level * @return */ @Query("Match (p:MemberInvit{level:{level}})-[*]->(s:MemberInvit{mId:{mId}}) return p limit 1") MemberInvit findParentInfoByLevel(@Param("mId") Long mId, @Param("level") Integer level); /** * 查询某个节点的 指定等级的所有父节点 * @param mId * @param level * @return */ @Query("Match (p:MemberInvit{level:{level}})-[*]->(s:MemberInvit{mId:{mId}}) return p") List<MemberInvit> findParentByLevel(@Param("mId") Long mId, @Param("level") Integer level); }

这里继承了Neo4jRepository,点击查看源码会发现,这里面封装好了简单的增删改查。

1578883557886

5.增加一个官方用户

1578884611664

增加完后,我们有两种方法查看,一是在Neo4j的控制台查看,另一个是在代码中查看。这里我们先在Neo4j的控制台查询下:

1578884729236

说明官方用户已经增加成功了。

6.查询官方用户

这里我们使用代码查询刚刚创建的官方用户。

1578884860283

7.绑定用户

除了官方用户外,假设第一个注册的是 隔壁老王,即隔壁老王绑定在了官方用户下,也可以叫官方用户发展了 隔壁老王为下线。

1578885814796

我们在控制台查看下创建的关系:

match (p:MemberInvit) return p 或者 match (p:MemberInvit)-[d:develop]->(s:MemberInvit) return p,d,s

1578886003913

隔壁老王人缘广,发展了小张、小李、小吴、小周等人:

1578886625902

我们从控制台上查看绑定关系:

1578886677904

这样,绑定关系就已经形成了。

四、源码下载

为了方便,已经将源码上传到github 了,地址:https://github.com/joeBeckham/springboot-learn

五、说在最后

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyyjd.html