SpringBoot+Neo4j在社交電商中,講述你是怎麼被綁定為下線的
- 2020 年 2 月 24 日
- 筆記
上兩篇文章我們主要講解了Neo4j的基本知識以及Neo4j的基本使用,這篇文章我們就以實例來深入的理解一下,我們以社交電商中的綁定關係為例,使用SpringBoot+Neo4j來實現。
Neo4j文章回顧:
- 不懂Neo4j?沒關係,一起學
- 圖文並茂教你學會操作圖數據庫Neo4j
一、分析
社交電商中,現在做的比較出色的就應該屬於花生日記,以及最近比較火的芬香。或許你經常會收到朋友或者親戚發來的分享出的商品,而當你點擊這些分享出來的商品後,那麼,恭喜你,你可能已經被綁定為下級(粉絲)了。當然,我們這裡只是舉例說明下。
下面我們就用SpringBoot+Neo4j實現別人分享出來的商品,你點擊了,註冊成為新用戶,進而被綁定為下線來詳細說明。
二、代碼架構
代碼架構如下,這裡沒有寫controller和service,以test來測試,也是為了方便。

三、代碼實現
1.引入Neo4j依賴

2.添加 neo4j 配置

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,點擊查看源碼會發現,這裏面封裝好了簡單的增刪改查。

5.增加一個官方用戶

增加完後,我們有兩種方法查看,一是在Neo4j的控制台查看,另一個是在代碼中查看。這裡我們先在Neo4j的控制台查詢下:

說明官方用戶已經增加成功了。
6.查詢官方用戶
這裡我們使用代碼查詢剛剛創建的官方用戶。

7.綁定用戶
除了官方用戶外,假設第一個註冊的是 隔壁老王,即隔壁老王綁定在了官方用戶下,也可以叫官方用戶發展了 隔壁老王為下線。

我們在控制台查看下創建的關係:
match (p:MemberInvit) return p 或者 match (p:MemberInvit)-[d:develop]->(s:MemberInvit) return p,d,s

隔壁老王人緣廣,發展了小張、小李、小吳、小周等人:

我們從控制台上查看綁定關係:

這樣,綁定關係就已經形成了。
四、源碼下載
為了方便,已經將源碼上傳到github 了,地址:https://github.com/joeBeckham/springboot-learn
五、說在最後
社交電商中經常會存在返佣,你買了東西,你的上級就會得到百分之多少,這樣,就會用到dao層中的 《查詢某個節點的直屬父節點》 方法,即:findParent。
你買了東西,可能並不會直接返佣到你的上級,可能會找某個等級的上級,這時候你就會用到dao層中的《查詢某個節點的 指定等級的所有父節點》,即:findParentByLevel。
你買了東西,可能會返佣給指定等級的最近的一個父節點,這時候你就會用到dao層中的《查詢某個節點的 指定等級的 最近的父節點》,即:findParentInfoByLevel。
這些我們就不一一舉例了。
以上就是我們今天介紹的使用SpringBoot + Neo4j來實現社交電商中的綁定邏輯。