springboot neo4j的配置代码

neo4j是一个图形数据库,有一个做关系图谱的需求里面需要使用到图形数据库。

w3c教程:https://www.w3cschool.cn/neo4j/

中文版的数据库可以通过image属性显示图片,官网的动画效果是通过3D.js实现的;

pom导入配置

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
 <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
            <version>3.1.4</version>
        </dependency>

配置数据库:

#neo4j
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123
spring.data.neo4j.uri=http://192.168.100.106:7474
package com.koala.console.configuration;

import org.neo4j.ogm.session.SessionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableNeo4jRepositories(basePackages = "com.koala.console.repository.neo4j")
@EnableTransactionManagement
public class Neo4jConfig {

    @Value("${blotUri}")
    private String uri;

    @Value("${spring.data.neo4j.uri}")
    private String databaseUrl;

    @Value("${spring.data.neo4j.username}")
    private String userName;

    @Value("${spring.data.neo4j.password}")
    private String password;

    @Bean
    public SessionFactory sessionFactory() {
        org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
                .uri(databaseUrl)
                .credentials(userName, password)
                .build();
        return new SessionFactory(configuration, "com.koala.console.model.neo4j");
    }

    @Bean
    public Neo4jTransactionManager transactionManager() {
        return new Neo4jTransactionManager(sessionFactory());
    }

}

使用neo4j:

neo4j基本由两部分组成,节点和关系,关系用来指示两个节点的方向和关联属性:

节点bean:

package com.koala.console.model.neo4j;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Lists;
import lombok.Data;
import org.neo4j.ogm.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Data
@NodeEntity
public class FaceNode {

    public FaceNode() {
    }

    public FaceNode(String name) {
        this.objId = name;
    }

    @Id
    @GeneratedValue
    private Long id;

    /**
     * objId
     */
    private String objId;

    @JSONField(serialize = false)
    @JsonIgnore
    @Transient
    private String startName;
    @JSONField(serialize = false)
    @JsonIgnore
    @Transient
    private String endName;

    @Transient
    private Integer pathNum;

    @Transient
    private String intimacy;

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

    @Property(name = "image")
    private String symbol;

    @Transient
    private Integer[] symbolSize = {60,60};

    @JSONField(serialize = false)
    @Transient
    private MultipartFile faceImg;
    @JSONField(serialize = false)
    @Transient
    private String startTime;

    @JSONField(serialize = false)
    @Transient
    private String endTime;

    @Relationship(type = "relation")
    private List<FaceNodePro> faceNodePros = Lists.newArrayList();

    private List<FaceNode>  children = Lists.newArrayList();

    public void addEndNode(FaceNode endNode, String title) {
        FaceNodePro pro = new FaceNodePro(title, this, endNode);
        this.faceNodePros.add(pro);
    }

    public void addStartNode(FaceNode startNode, String title) {
        FaceNodePro pro = new FaceNodePro(title, startNode, this);
        this.faceNodePros.add(pro);
    }

    public Long getId() {
        return id;
    }

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

    public String getObjId() {
        return objId;
    }

    public void setObjId(String objId) {
        this.objId = objId;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public List<FaceNodePro> getFaceNodePros() {
        return faceNodePros;
    }

    public void setFaceNodePros(List<FaceNodePro> faceNodePros) {
        this.faceNodePros = faceNodePros;
    }

    public String getStartName() {
        return startName;
    }

    public void setStartName(String startName) {
        this.startName = startName;
    }

    public String getEndName() {
        return endName;
    }

    public void setEndName(String endName) {
        this.endName = endName;
    }

    public MultipartFile getFaceImg() {
        return faceImg;
    }

    public void setFaceImg(MultipartFile faceImg) {
        this.faceImg = faceImg;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public String getScenes() {
        return scenes;
    }

    public void setScenes(String scenes) {
        this.scenes = scenes;
    }
}

关系bean:

package com.koala.console.model.neo4j;

import com.fasterxml.jackson.annotation.JsonBackReference;
import org.neo4j.ogm.annotation.*;

@RelationshipEntity(type = "relation")
public class FaceNodePro {

    public FaceNodePro() {
    }

    public FaceNodePro(String intimacy, FaceNode startNode, FaceNode endNode) {
        this.intimacy = intimacy;
        this.startNode = startNode;
        this.endNode = endNode;
    }

    @Id
    @GeneratedValue
    private Long nodeProId;

    /**
     * 亲密度
     */
    @Property
    private String intimacy;

    @JsonBackReference
    @StartNode
    private FaceNode startNode;

    @EndNode
    private FaceNode endNode;

    public Long getNodeProId() {
        return nodeProId;
    }

    public void setNodeProId(Long nodeProId) {
        this.nodeProId = nodeProId;
    }

    public String getIntimacy() {
        return intimacy;
    }

    public void setIntimacy(String intimacy) {
        this.intimacy = intimacy;
    }

    public FaceNode getStartNode() {
        return startNode;
    }

    public void setStartNode(FaceNode startNode) {
        this.startNode = startNode;
    }

    public FaceNode getEndNode() {
        return endNode;
    }

    public void setEndNode(FaceNode endNode) {
        this.endNode = endNode;
    }
}

Repository实现:

@Repository
public interface FaceNodeRepository extends Neo4jRepository<FaceNode, Long> {

    FaceNode findByObjId(@Param("objId") String objId);

    /**
     * 查询节点Node指定层级的图
     *
     * @param
     * @return
     */
    @Query(value = "MATCH n=(:FaceNode{objId:{objId}})-[*..6]->() RETURN n")
    List<FaceNode> findByHierarchical(@Param("objId") String objId);

}

剩下的使用都是很简单的事情。

我收集了一些会使用到的语句:

查询节点Node所有的关系
match(Node{name:'5c26219bd3e2dca5322110bb'})-[:PLAYED_IN]->(yf)return Node,yf
查询节点Node的2层关系图
MATCH n=(:Node{name:"5c262177d3e2dca5322110b3"})-[*..1]-() return n
两个陌生人之间的所有最短认识路径
MATCH n = allshortestPaths((小讯:朋友圈{姓名:"小讯"})-[*..6]-(小菲:朋友圈{姓名:"小菲"})) return n
查询节点Node指向的所有节点
MATCH (:Node { name: '5c262137d3e2dca5322110a7' })-->(movie)RETURN movie;
查询标签Node所有节点
match(n)--(m:Node)return n;
批量创建Node节点的朋友圈
MATCH (Node:Node {name:"4j2ap"})FOREACH (name in ["Johan","Rajesh","Anna","Julia","Andrew"] |CREATE (Node)-[:FRIEND]->(:Person {name:name}))
查询两个节点有向关系条数
match (:FaceNode{name:"gong"})-[r:PLAYED_IN]->(:FaceNode{name:"eza2e"})return count(r)

参考:

转载自:https://www.cxymm.net/article/sinat_21184471/87092034
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/sinat_21184471/article/details/87092034

到此这篇关于springboot neo4j的文章就介绍到这了,更多相关springboot neo4j内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot结合Neo4j自定义cypherSql的方法

    前言 SpringBoot引入neo4j <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> <spring.boot.version>2.2.11.RELEASE</spring.boot.version> 大

  • springBoot 与neo4j的简单整合示例

    Neo4j简介 Neo4j是基于java语言实现的世界领先的图形数据库, 是一个高性能的图形存储,具有成熟和强大的数据库所需的所有功能,如友好的查询语言(Cypher)和ACID事务.对于许多应用程序,与关系数据库相比,Neo4j提供了数量级的性能优势.主要应用于图检索和关系计算.其优点在于: 节点没上线(3.0以后去掉了限制) 扩展性很好,支持集群和企业版 数据ETL有丰富的工具支持,自带GUI 良好的WebUI 更加详细的介绍参考:https://neo4j.com/docs/getting

  • springboot neo4j的配置代码

    neo4j是一个图形数据库,有一个做关系图谱的需求里面需要使用到图形数据库. w3c教程:https://www.w3cschool.cn/neo4j/ 中文版的数据库可以通过image属性显示图片,官网的动画效果是通过3D.js实现的: pom导入配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j<

  • springboot项目访问静态资源的配置代码实例

    这篇文章主要介绍了springboot项目访问静态资源的配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这里只是简单记录当上传图片不是放在tomcat其他服务器中时,只是放在磁盘中便可以这样配置,在项目启动后可以访问到磁盘中的资源. @Configuration public class SystemConfigurer implements WebMvcConfigurer { @Value("${jeewx.path.uploa

  • springboot多数据源配置及切换的示例代码详解

    注:本文的多数据源配置及切换的实现方法是,在框架中封装,具体项目中配置及使用,也适用于多模块项目 配置文件数据源读取 通过springboot的Envioment和Binder对象进行读取,无需手动声明DataSource的Bean yml数据源配置格式如下: spring: datasource: master: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver url:

  • SpringBoot使用minio及配置代码

    目录 1.导入 minio jar包 2.配置 3.实现 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等. MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL. 1.导入 minio jar包 <dependency> <groupId>io.minio</groupId> <

  • SpringBoot集成Kafka 配置工具类的详细代码

    目录 1.单播模式,只有一个消费者组 2.广播模式,多个消费者组 spring-kafka 是基于 java版的 kafka client与spring的集成,提供了 KafkaTemplate,封装了各种方法,方便操作,它封装了apache的kafka-client,不需要再导入client依赖 <!-- kafka --> <dependency> <groupId>org.springframework.kafka</groupId> <arti

  • 详解SpringBoot和Mybatis配置多数据源

    目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL.在SpringBoot中,配置多数据源的方式十分便捷, 下面开始上代码: 在pom.xml文件中需要添加一些依赖 <!-- Spring Boot Mybatis 依赖 --> <dependency> <groupId>org.mybatis.spring.b

  • SpringBoot整合Shiro的代码详解

    shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和shiro整合的功能!接下来就用springboot结合springmvc,mybatis,整合shiro完成对于用户登录的判定和权限的验证. 1.准备数据库表结构 这里主要涉及到五张表:用户表,角色表(用户所拥有的角色),权限表(角色所涉及到的权限),用户-角色表(用户和角色是多对多的),角色-权限表

  • spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法

    串行的定时任务 @Component public class ScheduledTimer { private Logger logger = Logger.getLogger(this.getClass()); /** * 定时任务,1分钟执行1次,更新潜在客户超时客户共享状态 */ @Scheduled(cron="0 0/1 8-20 * * ?") public void executeUpdateCuTask() { Thread current = Thread.curr

  • 详解Springboot整合Dubbo之代码集成和发布

    本文介绍了Springboot整合Dubbo之代码集成和发布,分享给大家,具体如下: 1. boot-dubbo-api相关 打开boot-dubbo-api项目,正在src/main/java下创建一个包,并创建你需要dubbo暴露的接口TestService.java,并创建一个实体类用于测试User.java.如下图所示: 创建文件和包结构 User.java package com.boot.domain; import lombok.Data; import java.io.Seria

  • springboot的java配置方式(实例讲解)

    1.创建User实体类. @Data public class User { private String username; private String password; private Integer age; } 2.创建UserDao用于模拟数据库交互. public class UserDao{ public List<User> queryUserList() { List<User> result = new ArrayList<User>(); //

随机推荐