文档章节

Spring Boot 轻易访问Neo4j

快意开发
 快意开发
发布于 2016/12/01 14:31
字数 636
阅读 4445
收藏 9

在Spring Boot中访问Neo4j,通过Spring Data Neo4j可以轻易地实现。

例如,现有如下图所示的数据模型:

这表示有两个节点:用户和组,并且这两个节点的关系是从属关系,即用户从属于组。

根据这个数据模型,使用Spring Data Neo4j进行建模。

首先,在项目工程中引用Spring Boot的依赖,如下所示:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

然后,在Neo4j模块引用Neo4j的依赖,如下所示:

   <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-embedded-driver</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-bolt-driver</artifactId>
            <version>2.0.5</version>
        </dependency>
    </dependencies>

上面依赖包下载完成后,就可以使用Spring Data Neo4j进行建模和实现数据持久化。

用户节点建模:

package com.demo.neo4j.domain;

import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;

@NodeEntity
public class User {
   @GraphId
   private Long id;
   private String name;

   @Relationship(type = "从属", direction = Relationship.OUTGOING)
   private Group group;

   public User() {
   }

   public Long getId() {
      return id;
   }

   public void setId(Long id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public Group getGroup() {
      return group;
   }

   public void setGroup(Group group) {
      this.group = group;
   }
}

组节点建模:

package com.demo.neo4j.domain;

import org.neo4j.ogm.annotation.GraphId;

public class Group {
    @GraphId
    private Long id;
    private String name;

    public Group() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

数据持久化设计:

package com.demo.neo4j.repository;

import com.demo.neo4j.domain.User;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends GraphRepository<User> {
    User findByName(String name);
}

为了让上面设计生效,需要对使用的Spring Data Neo4j进行配置:

package com.demo.neo4j.config;

import org.neo4j.ogm.session.SessionFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableNeo4jRepositories(basePackages = { "com.demo.neo4j.repository" })
@EnableTransactionManagement
public class Neo4jConfig extends Neo4jConfiguration {

    @Override
    public SessionFactory getSessionFactory() {
        return new SessionFactory("com.demo.neo4j.domain");
    }

}

连接Neo4j数据库,可以使用2.x或3.x版本,或者不用安装服务器,直接使用嵌入式数据库。

使用嵌入式方式连接数据库,编辑如下内容到ogm.properties文件,并将文件保存到资源目录中:

compiler=org.neo4j.ogm.compiler.MultiStatementCypherCompiler
driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver
URI=file:///test/graph.db

最后使用如下测试用例进行测试:

package com.demo.neo4j.test;

import com.demo.neo4j.config.Neo4jConfig;
import com.demo.neo4j.domain.Group;
import com.demo.neo4j.domain.User;
import com.demo.neo4j.repository.UserRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Assert;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Neo4jConfig.class})
public class Neo4jTest {
    private static Logger log = LoggerFactory.getLogger(Neo4jTest.class);

    @Autowired
    private UserRepository userRepository;

    @Before
    public void addData() {
        Group group = new Group();
        group.setName("admins");

        User user = new User();
        user.setName("admin");
        user.setGroup(group);

        userRepository.save(user);
        Assert.notNull(user.getId());
    }

    @Test
    public void getData() {
        User user = userRepository.findByName("admin");
        Assert.notNull(user);
        log.info("\n================== user name={}; group name={} ==================",
                user.getName(), user.getGroup().getName());
    }
}

运行测试用例通过,并可看到如下结果:

================== user name=admin; group name=admins ==================

 

© 著作权归作者所有

快意开发

快意开发

粉丝 42
博文 14
码字总数 14674
作品 1
深圳
私信 提问
加载中

评论(1)

快意开发
快意开发 博主
如果想对Spring Boot有更多的了解,请即参与社区正在举行的高手问答活动:

https://www.oschina.net/question/2720166_2209142

还有可能获得幸运抽奖啊!
Spring Data Gosling SR2 发布

Spring Data 团队发布第二个服务版本 Spring Data Gosling SR2,包括 45 issues 修复和一个重要的 Spring Data JPA 方法元数据检测 bug 修复。强烈建议升级到最新版本。 此版本包括 Spring B...

oschina
2015/12/19
969
4
第二章——Spring Boot启动器与依赖管理

强烈推荐选择支持依赖管理和可以发布到“Maven中央”仓库的构建系统。推荐使用Maven或Gradle。Spring Boot可以使用其他构建系统(例如,Ant),但支持得并不是很好。 1 依赖管理 Spring Boo...

Leech
2018/02/04
0
0
Spring Data Ingalls SR14 和 Kay SR9 发布

Spring Data Ingalls SR14 和 Kay SR9 已发布。 Kay SR9 基于刚刚发布的 Spring Framework 5.0.8 之上,Spring Boot 2.0.4 选中了 Kay SR9,将为你提供方便,而 Ingalls SR14 则被 Spring B...

淡漠悠然
2018/07/29
372
0
spring boot(2)起步依赖spring-boot-starter-*详解

--The core Spring Boot starter, including auto-configuration support, logging and YAML. --Spring Boot starter核心模块,包括自动配置支持,日志和YAML。 --Support for the “Advance......

刘胜球
2017/10/25
244
0
Spring Data Neo4j 2.0.0.M1 发布

Spring Data 的 Neo4j 模块 2.0 的第一个里程碑版发布了,该版本主要进行了内部的重构,切分成几个只模块,详细包括: spring-data-neo4j: Neo4jTemplate for easy, copying object-graph-ma...

红薯
2011/10/24
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
12
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部