Java操作Neo4J就是這么簡單!

前幾天阿粉給大家擴展了關于 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ù)據庫你會選擇么?
評論
圖片
表情
