推广

SpringBoot使用Neo4j

iseeyu2年前 (2024-02-21)推广117

wechatimg13.png

3.安装完成后,访对应web地址,如下:

wechatimg13.png

3.SpringBoot整合

接下来介绍SpringBoot中如何视同Neo4j。

3.1 添加Neo4j依赖

创建项目,pom文件中引入依赖,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>

3.2 配置文件

在配置文件中配置Neo4j相关配置,如下:

# neo4j配置
spring.data.neo4j.uri= bolt://localhost:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=neo4j

3.3 创建对应entity

这里以部门为例,要创建一个如下的图:

     * CEO
     *    -设计部
     *        - 设计1组
     *        - 设计2组
     *    -技术部
     *        - 前端技术部
     *        - 后端技术部
     *        - 测试技术部

那么这里简单创建一个部门实体和一个关系实体。

其中部门实体,如下:

@NodeEntity(label = "dept")
@Data
@Builder
public class Dept {

    @Id
    @GeneratedValue
    private Long id;

    @Property(name = "deptName")
    private String deptName;

}

关系实体如下:

@RelationshipEntity(type = "relationShip")
@Data
@Builder
public class RelationShip {

    @Id
    @GeneratedValue
    private Long id;

    @StartNode
    private Dept parent;

    @EndNode
    private Dept child;
}

这里说明一下几个注解的意思:

  • @NodeEntity:标明是一个节点实体
  • @RelationshipEntity:标明是一个关系实体
  • @Id:实体主键
  • @Property:实体属性
  • @GeneratedValue:实体属性值自增
  • @StartNode:开始节点(可以理解为父节点)
  • @EndNode:结束节点(可以理解为子节点)

3.4 repository

由于使用的spring-data操作neo4j,所以实现逻辑类似,创建接口继承Neo4jRepository。

DeptRepository如下:

import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface DeptRepository extends Neo4jRepository<Dept,Long> {

}

RelationShipRepository如下:

import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RelationShipRepository extends Neo4jRepository<RelationShip, Long> {

}

3.5 基本使用

这里创建了一些基础方法,使用方式和spring-data-jpa类似,由于需要构建一个本文3.1所描述的图,所以创建了一个create方法来初始化数据,完整代码如下:

@RestController
public class TestController {

    @Resource
    private DeptRepository deptRepository;
    @Resource
    private RelationShipRepository relationShipRepository;

    /**
     * CEO
     *    -设计部
     *        - 设计1组
     *        - 设计2组
     *    -技术部
     *        - 前端技术部
     *        - 后端技术部
     *        - 测试技术部
     */
    @GetMapping("create")
    public void create(){
        Dept CEO = Dept.builder().deptName("CEO").build();
        Dept dept1 = Dept.builder().deptName("设计部").build();
        Dept dept11 = Dept.builder().deptName("设计1组").build();
        Dept dept12 = Dept.builder().deptName("设计2组").build();

        Dept dept2 = Dept.builder().deptName("技术部").build();
        Dept dept21 = Dept.builder().deptName("前端技术部").build();
        Dept dept22 = Dept.builder().deptName("后端技术部").build();
        Dept dept23 = Dept.builder().deptName("测试技术部").build();
        List<Dept> depts = new ArrayList<>(Arrays.asList(CEO,dept1,dept11,dept12,dept2,dept21,dept22,dept23));
        deptRepository.saveAll(depts);

        RelationShip relationShip1 = RelationShip.builder().parent(CEO).child(dept1).build();
        RelationShip relationShip2 = RelationShip.builder().parent(CEO).child(dept2).build();
        RelationShip relationShip3 = RelationShip.builder().parent(dept1).child(dept11).build();
        RelationShip relationShip4 = RelationShip.builder().parent(dept1).child(dept12).build();
        RelationShip relationShip5 = RelationShip.builder().parent(dept2).child(dept21).build();
        RelationShip relationShip6 = RelationShip.builder().parent(dept2).child(dept22).build();
        RelationShip relationShip7 = RelationShip.builder().parent(dept2).child(dept23).build();
        List<RelationShip> relationShips = new ArrayList<>(Arrays.asList(relationShip1,relationShip2,relationShip3,relationShip4,relationShip5
                ,relationShip6,relationShip7));
        relationShipRepository.saveAll(relationShips);
    }

    @GetMapping("get")
    public RelationShip get(Long id){
        Optional<RelationShip> byId = relationShipRepository.findById(id);
        return byId.orElse(null);
    }

    @GetMapping("deleteRelationShip")
    public void deleteRelationShip(Long id){
        relationShipRepository.deleteById(id);
    }

    @GetMapping("deleteDept")
    public void deleteDept(Long id){
        deptRepository.deleteById(id);
    }

    @GetMapping("deleteAll")
    public void deleteAll(){
        deptRepository.deleteAll();
        relationShipRepository.deleteAll();
    }
}

执行create方法初始化数据,结果如下图所示:

wechatimg13.png

其余测试方法这里就不在演示了,可以自行测试。

4.Neo4j基本命令

4.1 操作命令简介

接下来介绍一下Neo4j的基本操作命令。

  • CREATE命令:创建节点命令
  • MATCH命令:查询命令
  • RETURN命令:返回数据命令
  • DELETE命令:删除命令,可以用于删除节点和关联节点信息
  • REMOVE命令:可以用于删除标签和属性

4.2 简单练习

创建命令,可以用来创建节点和关系节点,比如我们要在创建一个部门,秘书部,如下,执行如下命令:

CREATE (d:dept {deptName:"秘书部"})

操作后如下图所示:

wechatimg13.png

目前可以看到,秘书部和其余节点是没有关系的,那么接下来将秘书部与CEO创建关系,执行如下命令:

MATCH (n:dept {deptName:"CEO"}),(m:dept {deptName:"秘书部"}) CREATE (n)-[r:relationShip]->(m) return r;

查看结果如图:

wechatimg13.png

可以看到秘书部已经挂在了CEO节点下。

其中从上面就可以看出,CQL语句大致结构如下:

  • MATCH RETURN:查询命中结果返回;
  • MATCH CREATE RETURN:查询后创建关系返回;
  • MATCH DELETE:查询命中删除;

5.源码

源码地址:https://gitee.com/dalaoyang/springboot_learn/tree/master/springboot2_neo4j

6.参考

参考地址:

https://baike.baidu.com/item/Neo4j/9952114?fr=aladdin
http://www.neo4j.org

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57569.html

相关文章

拒绝空谈(拒绝空谈专注实干)

拒绝空谈(拒绝空谈专注实干)

网络营销是现在我们常常聊起的话题,很多人都开始讨论,网络营销是什么呢?为什么需要网络营销呢?到底网络营销能够为企业带来什么?如果我要做网络营销,有哪些方面是我必须要考虑的呢?其实上面这些问题也是小编一直以来的一个问题。对于身处于互联网时代我们,了解网络营销是很有必要的,特别是对企业而言是很重要的。想...

揭晓网站做搜索引擎优化但仍然没有排名的原因。

揭晓网站做搜索引擎优化但仍然没有排名的原因。

搜索引擎优化理想的状态是用短的时间把一个词优化到主页上,但是很多人遇到了实时性,相反,他们显然付出了很多精力,却无法达到他们理想的效果,特别是当他们循序渐进地遵循规则优化步骤时,比如内容是原创的,外链也很准确,但网站却没有排名,这无疑是一件非常令人沮丧的事情,很难找出他们网站中存在什么样的硬伤害,这...

如何获得高质量的外链。

如何获得高质量的外链。

对于一个网站,我们需要做的首件事就是把你的网站提交到搜索引擎目录。一般来说,对于国内网站来说,提交给百度、360和搜狗是可以的。其他搜索引擎,如谷歌、爱文、网易和搜狗,流量相对较小。如果你觉得有必要,你可以提交。 寻找网站交换资源,通常称为友谊链接或外链资源。互惠链接的基础是你的网站的内...

4000 字实战解析,微信生态如何获客。

4000 字实战解析,微信生态如何获客。

对于 B 端来说,微信生态内的获客有很多相似和共通之处,说明其中是可以提炼一些规律和可复用的方法的。遂之产生了复盘整个「体系 + 项目」的想法。 再来说说微信生态为什么对于 B 端获客很重要? 以 B 端的企业官网为例,5% 的注册转化率算是平均水平,大量用钱砸过来的客户流失。 但鉴...

运营人,怎么通过运营自己赚到钱?

运营人,怎么通过运营自己赚到钱?

编辑导语:运营人明明就懂一些专业的方法,但却没有运营好自己,成了许多运营人焦虑的原因,觉得自己赚不到钱。为什么这部分人运营不好自己,运营人对于赚钱又该有什么样的心态?要怎么才能赚到钱?一起来看看这篇文章,希望能够缓解你的焦虑。 运营人,其实最该运营的就是自己! 声明一下:本文...

10个TikTok营销技巧(1)

10个TikTok营销技巧(1)

想提高你在TikTok上的知名度吗?从如何使用有趣的、有吸引力的来与他们的受众建立联系中获得启发。TikTok作为一种通过视频内容接触数百万人的方式,已经迅速进入领域。领先的品牌正在寻找各种方法来利用他们可用的营销可能性。你怎么能模仿他们的成功呢?熟悉使TikTok内容具有...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片