<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java操作Neo4J就是這么簡單!

          共 6407字,需瀏覽 13分鐘

           ·

          2022-01-20 14:25

          前幾天阿粉給大家擴展了關于 Neo4J 圖譜數(shù)據庫的內容,今天阿粉教給大家如何使用 Java 來操作 Neo4j 數(shù)據庫。

          使用 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();
          ????}
          }

          這是一種比較古老的方式,來實現(xiàn)的,而且還是需要些 CQL 語句來進行實現(xiàn)。但是勝在非常好理解,這個時候,我們需要再來看看圖,看看在 Neo4J 中他是怎么展現(xiàn)的。

          通過這個,我們至少證明我們成功連上了,并且創(chuàng)建也成功了。

          這時候有細心的讀者就會問,為啥我之前在 GraphDatabase.driver 的地方,連接的是

          bolt://localhost:7687.

          這是因為,你啟動的Neo4J 是7474,也就是說,Neo4J 服務里面可不是這個來連接,

          SpringBoot 整合 Neo4j

          1.創(chuàng)建SpringBoot項目

          常規(guī)的創(chuàng)建SpringBoot項目,

          創(chuàng)建完成之后,習慣性的要改一下 SpringBoot 的版本號,最好別用最新的,因為阿粉親身經歷,使用最新版的,出現(xiàn)了錯誤你都不知道怎么出現(xiàn)的,就是這么神奇,你永遠都發(fā)現(xiàn)不了的bug。

          我們把版本號改成2.1.0,這樣的話,我們在 pom 文件中加入依賴 jar


          ?org.springframework.boot
          ?spring-boot-starter-data-neo4j


          ?org.projectlombok
          ?lombok
          ?1.16.10

          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")
          @Data
          public?class?GroupNode?{
          ????@Id
          ????@GeneratedValue
          ????private?Long?id;

          ????/**
          ?????*?班級名稱
          ?????*/
          ????@Property(name?=?"name")
          ????private?String?name;

          ????/**
          ?????*?編號
          ?????*/
          ????private?String?num;

          ????@Relationship(type?=?"RelationEdge")
          ????private?Set?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")
          @Data
          public?class?StudentNode?{
          ????@Id
          ????@GeneratedValue
          ????private?Long?id;

          ????/**
          ?????*?學生名稱
          ?????*/
          ????private?String?name;

          ????/**
          ?????*?性別
          ?????*/
          ????private?String?sex;

          ????@Relationship(type?=?"RelationEdge",?direction?=?"INCOMING")
          ????private?Set?sets?=?new?HashSet<>();
          ???
          }


          package?com.example.neo4j.entry;
          import?lombok.Data;
          import?org.neo4j.ogm.annotation.*;

          @RelationshipEntity(type?=?"RelationEdge")
          @Data
          public?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?{
          }


          對應的班級接口

          package?com.example.neo4j.repository;

          import?com.example.neo4j.entry.GroupNode;
          import?org.springframework.data.neo4j.repository.Neo4jRepository;

          public?interface?GroupRepository?extends?Neo4jRepository?{
          }

          最后完成編寫我們的 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")
          @Slf4j
          public?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

          我們再去圖譜數(shù)據庫看看。

          怎么樣,使用Java 操作是不是也是非常簡單的呢?這樣的圖譜數(shù)據庫你會選擇么?

          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久久三级视频 | 色香蕉视频在线 | 成人视频网站17 | 超碰在线大香蕉 | 黄色永久网站 |