文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 操作 Neo4J 就是这么简单!

2024-12-02 11:32

关注

本文转载自微信公众号「Java极客技术」,作者鸭血粉丝Tang。转载本文请联系Java极客技术公众号。

前几天阿粉给大家扩展了关于 Neo4J 图谱数据库的内容,今天阿粉教给大家如何使用 Java 来操作 Neo4j 数据库。

使用 Java 操作 Neo4J

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

  1. public class TestController { 
  2.     public static void main(String[] args) { 
  3.         Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j""Yinlidong1995.")); 
  4.         Session session = driver.session(); 
  5.         session.run("CREATE (n:Part {name: {name},title: {title}})"
  6.                 parameters( "name""Arthur001""title""King001" )); 
  7.         StatementResult result = session.run( "MATCH (a:Part) WHERE a.name = {name} " + 
  8.                         "RETURN a.name AS name, a.title AS title"
  9.                 parameters( "name""Arthur001")); 
  10.         while (result.hasNext()) { 
  11.             Record record = result.next(); 
  12.             System.out.println( record.get( "title" ).asString() + "" + record.get( "name" ).asString() ); 
  13.         } 
  14.         session.close(); 
  15.         driver.close(); 
  16.     } 

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

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

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

bolt://localhost:7687.

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

SpringBoot 整合 Neo4j

1.创建SpringBoot项目

常规的创建SpringBoot项目,

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

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

  1.  
  2.  org.springframework.boot 
  3.  spring-boot-starter-data-neo4j 
  4.  
  5.  
  6.  org.projectlombok 
  7.  lombok 
  8.  1.16.10 
  9.  

 

2.增加配置

  1. spring: 
  2.   data: 
  3.     neo4j: 
  4.       url: bolt://localhost:7687 
  5.       username: neo4j 
  6.       password: Yinlidong1995. 
  7.   main: 
  8.     allow-bean-definition-overriding: true 

3.Neo4JConfig

  1. package com.example.neo4j.config; 
  2.  
  3. import org.neo4j.driver.v1.AuthTokens; 
  4. import org.neo4j.driver.v1.Driver; 
  5. import org.neo4j.driver.v1.GraphDatabase; 
  6. import org.neo4j.driver.v1.Session; 
  7. import org.springframework.beans.factory.annotation.Value; 
  8. import org.springframework.context.annotation.Bean; 
  9. import org.springframework.context.annotation.Configuration; 
  10. import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; 
  11. import org.springframework.transaction.annotation.EnableTransactionManagement; 
  12.  
  13. @Configuration 
  14. @EnableNeo4jRepositories("com.example.neo4j.repository"
  15. @EnableTransactionManagement 
  16. public class Neo4jConfig { 
  17.     @Value("${spring.data.neo4j.url}"
  18.     private String url; 
  19.     @Value("${spring.data.neo4j.username}"
  20.     private String userName; 
  21.     @Value("${spring.data.neo4j.password}"
  22.     private String password
  23.  
  24.     @Bean(name = "session"
  25.     public Session neo4jSession() { 
  26.         Driver driver = GraphDatabase.driver(url, AuthTokens.basic(userName, password)); 
  27.         return driver.session(); 
  28.     } 

4.编写实体类

  1. package com.example.neo4j.entry; 
  2.  
  3. import org.neo4j.ogm.annotation.*; 
  4.  
  5. import java.util.HashSet; 
  6. import java.util.Set
  7. @NodeEntity("group"
  8. @Data 
  9. public class GroupNode { 
  10.     @Id 
  11.     @GeneratedValue 
  12.     private Long id; 
  13.  
  14.      
  15.     @Property(name = "name"
  16.     private String name
  17.  
  18.      
  19.     private String num; 
  20.  
  21.     @Relationship(type = "RelationEdge"
  22.     private Set sets = new HashSet<>(); 
  23.  
  24.     public void addRelation(StudentNode sonNode, String name) { 
  25.         RelationEdge relationNode = new RelationEdge(this, sonNode, name); 
  26.         sets.add(relationNode); 
  27.         sonNode.getSets().add(relationNode); 
  28.     } 

学生实体类:

  1. package com.example.neo4j.entry; 
  2. import org.neo4j.ogm.annotation.GeneratedValue; 
  3. import org.neo4j.ogm.annotation.Id; 
  4. import org.neo4j.ogm.annotation.NodeEntity; 
  5. import org.neo4j.ogm.annotation.Relationship; 
  6.  
  7. import java.util.HashSet; 
  8. import java.util.Set
  9.  
  10.  
  11. @NodeEntity("student"
  12. @Data 
  13. public class StudentNode { 
  14.     @Id 
  15.     @GeneratedValue 
  16.     private Long id; 
  17.  
  18.      
  19.     private String name
  20.  
  21.      
  22.     private String sex; 
  23.  
  24.     @Relationship(type = "RelationEdge", direction = "INCOMING"
  25.     private Set sets = new HashSet<>(); 
  26.     
  1. package com.example.neo4j.entry; 
  2. import lombok.Data; 
  3. import org.neo4j.ogm.annotation.*; 
  4.  
  5. @RelationshipEntity(type = "RelationEdge"
  6. @Data 
  7. public class RelationEdge { 
  8.     @Id 
  9.     @GeneratedValue 
  10.     private Long id; 
  11.  
  12.     // 关系名 
  13.     private String name
  14.  
  15.     @StartNode 
  16.     private GroupNode groupNode; 
  17.  
  18.     @EndNode 
  19.     private StudentNode studentNode; 
  20.  
  21.     public RelationEdge(GroupNode parentNode, StudentNode sonNode, String name) { 
  22.         this.groupNode = parentNode; 
  23.         this.studentNode = sonNode; 
  24.         this.name = name
  25.     } 

5.Repository接口

对应的学生接口:

  1. package com.example.neo4j.repository; 
  2.  
  3. import com.example.neo4j.entry.StudentNode; 
  4. import org.springframework.data.neo4j.repository.Neo4jRepository; 
  5.  
  6. public interface StudentRepository extends Neo4jRepository { 

对应的班级接口

  1. package com.example.neo4j.repository; 
  2.  
  3. import com.example.neo4j.entry.GroupNode; 
  4. import org.springframework.data.neo4j.repository.Neo4jRepository; 
  5.  
  6. public interface GroupRepository extends Neo4jRepository { 

最后完成编写我们的 Controller

  1. package com.example.neo4j.controller; 
  2.  
  3. import com.example.neo4j.entry.*; 
  4. import com.example.neo4j.repository.GroupRepository; 
  5. import com.example.neo4j.repository.StudentRepository; 
  6. import lombok.extern.slf4j.Slf4j; 
  7. import org.springframework.beans.factory.annotation.Autowired; 
  8. import org.springframework.web.bind.annotation.GetMapping; 
  9. import org.springframework.web.bind.annotation.RequestMapping; 
  10. import org.springframework.web.bind.annotation.RestController; 
  11.  
  12.  
  13. @RestController 
  14. @RequestMapping("/node"
  15. @Slf4j 
  16. public class GroupController { 
  17.  
  18.     @Autowired 
  19.     private StudentRepository studentRepository; 
  20.     @Autowired 
  21.     private GroupRepository groupRepository; 
  22.  
  23.     @GetMapping(value = "/create"
  24.     public void createNodeRelation() { 
  25.         StudentNode studentNode1 = new StudentNode(); 
  26.         studentNode1.setName("Alen"); 
  27.         studentNode1.setSex("男"); 
  28.         StudentNode studentNode2 = new StudentNode(); 
  29.         studentNode2.setName("Kai"); 
  30.         studentNode2.setSex("女"); 
  31.         studentRepository.save(studentNode1); 
  32.         studentRepository.save(studentNode2); 
  33.  
  34.         GroupNode groupNode = new GroupNode(); 
  35.         groupNode.setName("火箭班"); 
  36.         groupNode.setNum("298"); 
  37.         // 增加关系 
  38.         groupNode.addRelation(studentNode1, "includes"); 
  39.         groupNode.addRelation(studentNode2, "includes"); 
  40.         groupRepository.save(groupNode); 
  41.     } 

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

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

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

 

来源:Java极客技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯