美文网首页Java大数据
Java操作Neo4J就是这么简单

Java操作Neo4J就是这么简单

作者: Java弟中弟 | 来源:发表于2021-12-27 19:31 被阅读0次

    使用 Java 操作 Neo4J

    首先我们先使用原生的这种方式,导入 jar 包,然后:

    public class TestController {  
      public static void main(String[] args) {    
        Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "Yinlidong1995."));
        Session session = driver.session();      
        session.run("CREATE (n:Part {name: {name},title: {title}})",                
                    parameters( "name", "Arthur001", "title", "King001" ));     
        StatementResult result = session.run( "MATCH (a:Part) WHERE a.name = {name} " +                       
                                             "RETURN a.name AS name, a.title AS title",       
        parameters( "name", "Arthur001"));      
        while (result.hasNext()) {          
          Record record = result.next();           
          System.out.println( record.get( "title" ).asString() + "
                             " + record.get( "name" ).asString() );      
         }       
         session.close();
         driver.close();  
       }
    }
    
    

    这是一种比较古老的方式,来实现的,而且还是需要些 CQL 语句来进行实现。但是胜在非常好理解,这个时候,我们需要再来看看图,看看在 Neo4J 中他是怎么展现的。

    Java操作Neo4J就是这么简单

    通过这个,我们至少证明我们成功连上了,并且创建也成功了。

    这时候有细心的读者就会问,为啥我之前在 GraphDatabase.driver 的地方,连接的是

    bolt://localhost:7687 .

    这是因为,你启动的Neo4J 是7474,也就是说,Neo4J 服务里面可不是这个来连接,

    Java操作Neo4J就是这么简单

    SpringBoot 整合 Neo4j

    1.创建SpringBoot项目

    常规的创建SpringBoot项目,

    Java操作Neo4J就是这么简单

    创建完成之后,习惯性的要改一下 SpringBoot 的版本号,最好别用最新的,因为阿粉亲身经历,使用最新版的,出现了错误你都不知道怎么出现的,就是这么神奇,你永远都发现不了的bug。

    我们把版本号改成2.1.0,这样的话,我们在 pom 文件中加入依赖 jar

    <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-neo4j</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.10</version>
    </dependency>
    
    

    2.增加配置

    spring:  
      data:    
      neo4j:     
      url: bolt://localhost:7687    
      username: neo4j   
      password: Yinlidong1995\.  
      main:   
       allow-bean-definition-overriding: true
    
    

    3.Neo4JConfig

    package com.example.neo4j.config;
    import org.neo4j.driver.v1.AuthTokens;
    import org.neo4j.driver.v1.Driver;
    import org.neo4j.driver.v1.GraphDatabase;
    import org.neo4j.driver.v1.Session;
    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.transaction.annotation.EnableTransactionManagement;
    @Configuration@EnableNeo4jRepositories("com.example.neo4j.repository")
    @EnableTransactionManagement
    public class Neo4jConfig {    
      @Value("${spring.data.neo4j.url}")    
      private String url;    
      @Value("${spring.data.neo4j.username}")  
      private String userName;  
      @Value("${spring.data.neo4j.password}")  
      private String password;   
      @Bean(name = "session") 
      public Session neo4jSession() {  
        Driver driver = GraphDatabase.driver(url, AuthTokens.basic(userName, password));     
        return driver.session();  
      }
    }
    
    

    4.编写实体类

    package com.example.neo4j.entry;
    import org.neo4j.ogm.annotation.*;
    import java.util.HashSet;
    import java.util.Set;
    @NodeEntity("group")
    @Datapublic class GroupNode {   
      @Id    
      @GeneratedValue   
      private Long id;  
      /**     
      * 班级名称     
      */   
      @Property(name = "name")   
      private String name;    
      /**     
      * 编号    
      */   
      private String num;   
      @Relationship(type = "RelationEdge")  
      private Set<RelationEdge> sets = new HashSet<>(); 
      public void addRelation(StudentNode sonNode, String name) { 
        RelationEdge relationNode = new RelationEdge(this, sonNode, name);       
        sets.add(relationNode);  
        sonNode.getSets().add(relationNode);  
      }
    }
    
    

    学生实体类:

    package com.example.neo4j.entry;
    import org.neo4j.ogm.annotation.GeneratedValue;
    import org.neo4j.ogm.annotation.Id;
    import org.neo4j.ogm.annotation.NodeEntity;
    import org.neo4j.ogm.annotation.Relationship;
    import java.util.HashSet;
    import java.util.Set;
    /** 
    * 有点类似于Mysql中的table 映射的对象类,mysql中叫做ORM,neo4j中叫做OGM [object graph mapping] 
    */
    @NodeEntity("student")
    @Datapublic class StudentNode {    
      @Id    
      @GeneratedValue    
      private Long id;    
      /**     
      * 学生名称    
      */    
      private String name; 
      /**     
      * 性别    
      */    
      private String sex;    
      @Relationship(type = "RelationEdge", direction = "INCOMING")  
      private Set<RelationEdge> sets = new HashSet<>();  
    }
    
    
    package com.example.neo4j.entry;
    import lombok.Data;
    import org.neo4j.ogm.annotation.*;
    @RelationshipEntity(type = "RelationEdge")
    @Datapublic class RelationEdge {    
      @Id    
      @GeneratedValue   
      private Long id;    
      // 关系名    
      private String name;   
      @StartNode    
      private GroupNode groupNode;   
      @EndNode    
      private StudentNode studentNode;   
      public RelationEdge(GroupNode parentNode, StudentNode sonNode, String name) {
        this.groupNode = parentNode;       
        this.studentNode = sonNode;    
        this.name = name;   
      }
    }
    
    

    5.Repository接口

    对应的学生接口:

    package com.example.neo4j.repository;
    import com.example.neo4j.entry.StudentNode;
    import org.springframework.data.neo4j.repository.Neo4jRepository;
    public interface StudentRepository extends Neo4jRepository<StudentNode,Long> {
    }
    
    

    对应的班级接口

    package com.example.neo4j.repository;
    import com.example.neo4j.entry.GroupNode;
    import org.springframework.data.neo4j.repository.Neo4jRepository;
    public interface GroupRepository extends Neo4jRepository<GroupNode,Long> {
    }
    
    

    最后完成编写我们的 Controller

    package com.example.neo4j.controller;
    import com.example.neo4j.entry.*;
    import com.example.neo4j.repository.GroupRepository;
    import com.example.neo4j.repository.StudentRepository;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    @RequestMapping("/node")
    @Slf4jpublic class GroupController { 
      @Autowired   
      private StudentRepository studentRepository;  
      @Autowired   
      private GroupRepository groupRepository;  
      @GetMapping(value = "/create")  
      public void createNodeRelation() {  
        StudentNode studentNode1 = new StudentNode(); 
        studentNode1.setName("Alen");    
        studentNode1.setSex("男");      
        StudentNode studentNode2 = new StudentNode();
        studentNode2.setName("Kai");     
        studentNode2.setSex("女");    
        studentRepository.save(studentNode1);     
        studentRepository.save(studentNode2);    
        GroupNode groupNode = new GroupNode();   
        groupNode.setName("火箭班");   
        groupNode.setNum("298");       
        // 增加关系       
        groupNode.addRelation(studentNode1, "includes");    
        groupNode.addRelation(studentNode2, "includes"); 
        groupRepository.save(groupNode);   
      }
    }
    
    

    启动之后,访问
    http://localhost:8080/node/create

    我们再去图谱数据库看看。

    Java操作Neo4J就是这么简单 Java操作Neo4J就是这么简单

    怎么样,使用Java 操作是不是也是非常简单的呢?这样的图谱数据库你会选择么?

    相关文章

      网友评论

        本文标题:Java操作Neo4J就是这么简单

        本文链接:https://www.haomeiwen.com/subject/ckayqrtx.html