Springboot项目连接neo4j数据库

news2025/7/19 16:52:28

首先创建一个springboot项目,这里不再介绍。

1 导入依赖包

连接neo4j数据库的依赖包

<dependency>
      <groupId>org.neo4j</groupId>
      <artifactId>neo4j-ogm-http-driver</artifactId>
      <version>2.1.5</version>
</dependency>

spring-boot-starter-data-neo4j依赖包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>

mybatis-plus依赖包

<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.2.0</version>
</dependency>

全部的依赖包

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
    </dependencies>

2 编写application.yml文件

server:
  port: 1111
spring:
  neo4j:
    uri: bolt://localhost:7687
    authentication:
      username: neo4j
      password: 12345678
  data:
    neo4j:
      database: neo4j

3 编写实体类文件

创建Author.java实体类

package com.yz.geokg.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;

import java.util.List;

/**
 * @author Administrator
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@NodeEntity(label = "Author")
public class Author {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    // 这个不是必须的,根据自己的需要添加这个,这个是一个neo4j数据库中的关系
    @Relationship(type="is_last_known_in", direction = Relationship.OUTGOING)
    private List<Affiliation> affiliationList;
}

4 编写controller

创建AuthorController.java文件

package com.yz.geokg.controller;

import com.yz.geokg.entity.Author;
import com.yz.geokg.entity.Result;
import com.yz.geokg.service.AuthorService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author Administrator
 */
@RestController
@RequestMapping("author")
public class AuthorController {
    @Autowired
    private AuthorService authorService;

    @ApiOperation(value = "根据关键词查询作者")
    @GetMapping("/{keyword}")
    public List<Author> queryAuthorByKeyword(@PathVariable String keyword){
        return authorService.queryAuthorByKeyword(keyword);
    }
}

5 编写Service文件

创建AuthorService.java接口文件

package com.yz.geokg.service;

import com.yz.geokg.entity.Author;

import java.util.List;

/**
 * @author Administrator
 */
public interface AuthorService {

    /**
     * 根据关键词查询作者
     * @param word 关键词(文章主题)
     * @return 作者列表
     */
    List<Author> queryAuthorByKeyword(String word);
}

创建AuthorServiceImpl.java接口实现文件

package com.yz.geokg.service.impl;

import com.yz.geokg.entity.Affiliation;
import com.yz.geokg.entity.Author;
import com.yz.geokg.mapper.AffiliationMapper;
import com.yz.geokg.mapper.AuthorMapper;
import com.yz.geokg.service.AuthorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AuthorServiceImpl implements AuthorService {
    @Autowired
    private AuthorMapper authorMapper;
    @Autowired
    private AffiliationMapper affiliationMapper;

    @Override
    public List<Author> queryAuthorByKeyword(String word) {
        List<Author> authorList = authorMapper.queryAuthorByKeyword(word);
        for(Author author : authorList){
            List<Affiliation> affiliations = affiliationMapper.queryAffiliationByAuthor(author.getName());
            author.setAffiliationList(affiliations);
        }
        return authorList;
    }
}

6 编写mapper文件

创建AuthorMapper文件

package com.yz.geokg.mapper;

import com.yz.geokg.entity.Author;
import com.yz.geokg.entity.Illustration;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Administrator
 */
@Mapper
@Repository
public interface AuthorMapper extends Neo4jRepository<Author, Long> {

    /**
     * 根据文献标题查询作者
     * @param title 文献标题
     * @return 作者列表
     */
    @Query("MATCH p=(n:Paper{title:$title})-[r:is_written_by]->(a:Author) RETURN a")
    List<Author> queryAuthorByTitle(@Param("title")String title);

    @Query("MATCH (a:Author)<-[r1:is_written_by]-(p:Paper)-[r2:has_keyword]->(k:KeyWord{word:$word}) RETURN DISTINCT a")
    List<Author> queryAuthorByKeyword(@Param("word")String word);
}

7 测试

在test文件夹下编写测试类

@Test
    void getImage(){
        List<Author> authorList = authorMapper.queryAuthorByTitle("中国海、陆相页岩层系岩相组合多样性与非常规油气勘探意义");
        System.out.println("=====查询结果=====");
        for(Author author : authorList){
            System.out.println(author);
        }
    }

输出结果

如有疑问可留言或评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能算法几个重要指标

一、几个前置概念 TP&#xff08;True Positive&#xff09;&#xff1a;正确的正例&#xff0c;正类被判定成正类 FN&#xff08;False Negative&#xff09;&#xff1a;错误的反例&#xff0c;漏报&#xff0c;正类被判定为假类 FP&#xff08;False Positive&#xff09…

dp之数位dp---(度的数量)

题目&#xff1a; 思路&#xff1a; 首先对题目意思进行分析&#xff1a;恰好等于 K 个互不相等的 B 的整数次幂之和&#xff0c;这句话的意思是说对于某一个B进制数x说&#xff0c;x只有k位上只有1&#xff0c;其他位都为0。然后让你求区间[X,Y]的满足条件的数字有多少&#x…

MyBatis开发详解

MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&am…

信息系统基本知识(五)信息系统安全技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.6 信息系统安全技术 1.6.1 信息系统安全的有关概念 信息安全的概念&#xff1a;信息安全强…

机器人向生产力系统迈进,优艾智合稳步“从1到100”

在中国&#xff0c;机器人的“成长”总是令人惊讶。这些“钢铁生命”和“芯片生命”&#xff0c;在工厂流水线、物流仓储园区、机房电站飞速复制&#xff0c;充当产业的手、眼和大脑。国际机器人联合会IFR的数据显示&#xff0c;2020-2024年&#xff0c;中国机器人市场规模CAGR…

源码解析——HashMap

源码解析——HashMap1. 什么 是HashMap2. 为什么要使用HashMap3. HashMap的使用4. 源码解析4.1 关键问题4.1 存储结构4.2 HashMap 的容量和负载因子4.3 初始化过程4.3 put() 方法实现原理4.3.1 hash()4.3.2 resize()4.4 get() 方法实现原理5. 面试题总结6. ConcurrentHashmap(J…

【办公类-16-06】“2022下学期 总园活动室(沙水+建构)排班表”(python 排班表系列)

背景需求&#xff1a;最近保教主任一直在为总园的活动室安排而头疼不已&#xff0c;和组长们商议许久&#xff0c;依旧无法合理把活动室安排好。3月2日下午&#xff0c;听主任和游戏室成员聊了一个小时的排班&#xff0c;结论是除沙水和建构外&#xff0c;其余空余时间都是”自…

【RGB3DS道路检测车智慧运维解决方案】助力城市道路运维数字化转型

随着数字城市建设的全面推进&#xff0c;交通运维数字化转型也逐步进入新的层次。道路表观病害检测作为养护运维的基础和关键环节&#xff0c;亟待投入更多关注。 针对国家对交通运维数字化转型的相关要求与及时有效评估路面健康情况的需求&#xff0c;博雅弘拓科技力推【RGB3…

互联网大厂效率到底有多高?且看大腕怎么说

互联网公司的效率到底有多高&#xff1f; 看抖音创始人张一鸣怎么说 趣讲大白话&#xff1a;组织能力是关键 【趣讲信息科技96期】 ******************************* 对组织而言需要把优秀的标准清晰无误的传递且不断精进。含糊和混淆其实是牺牲。——抖音创始人张一鸣。 把信…

面向对象设计模式:结构型模式之适配器模式

一、引入 Object Oriented Adapters 二、XX 模式 aka&#xff1a;Wrapper (包装器) 2.1 Intent 意图 Convert the interface of a class into another interface clients expect. 将一个类的接口转换成客户希望的另外一个接口. 作为两个不兼容的接口之间的桥梁 适配器模式使…

Leetcode.1359 有效的快递序列数目

题目链接 Leetcode.1359 有效的快递序列数目 Rating &#xff1a; 1723 题目描述 给你 n笔订单&#xff0c;每笔订单都需要快递服务。 请你统计所有有效的 收件/配送 序列的数目&#xff0c;确保第 i 个物品的配送服务 delivery(i)总是在其收件服务 pickup(i)之后。 由于答案…

Locally Differentially Private Protocols for Frequency Estimation论文笔记

文章目录1.Pure LDP Protocol1.1相关背景1.2支持集1.3相关定义2.Basic one-time RAPPOR3.Rappor4.Direct Encoding4.1GRR4.2RR5.Unary Encoding5.1Symmetric Unary Encoding5.1Optimized Unary Encoding6.Local Hashing6.1Binary Local Hashing6.2Local Hashing6.3Optimal Loca…

Java后端实现Excel导入和导出

文章目录前言1.1准备1.2 Excel导入1.2.1 解析为JSON1.2.2 解析为对象&#xff08;基础&#xff09;1.2.3 解析为对象&#xff08;字段自动映射&#xff09;1.2.4 解析为对象&#xff08;获取行号&#xff09;1.2.5 解析为对象&#xff08;获取原始数据&#xff09;1.2.6 解析为…

JavaScript 条件语句 If ... Else实例集合

文章目录JavaScript 条件语句 If ... Else实例集合If 语句If...else 语句随机链接Switch 语句JavaScript 条件语句 If … Else实例集合 If 语句 源码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>梁辰兴实例</t…

stack_queue

目录&#xff1a;stack的介绍stack的使用stack的模拟实现queue的介绍queue的使用queue的模拟实现容器适配器是什么priority_queue的介绍priority_queue的使用priority_queue的模拟实现为什么要引“#include<functional>”头文件&#xff1f;回调函数仿函数stack的介绍 s…

无线蓝牙耳机佩戴舒适的有哪几款?入耳舒适的蓝牙耳机推荐

耳机已经成了现代年轻人不可缺少的东西&#xff0c;选择一款佩戴舒适的蓝牙耳机&#xff0c;使人幸福感爆棚&#xff0c;并且还能感受导音质出色声音表现力&#xff0c;下面整理了几款入耳舒适的耳机。 一、南卡小音舱蓝牙耳机 单耳重量&#xff1a;3.1g 佩戴类型&#xff1a…

FISCO BCOS(二十八)———使用java SDK与区块链交互

一、基本环境准备 1、部署配置jdk1.8 https://blog.csdn.net/weixin_46457946/article/details/1232435132、搭建单群组FISCO BCOS联盟链 https://blog.csdn.net/weixin_46457946/article/details/1225463343、配置及使用控制台 https://blog.csdn.net/weixin_46457946/art…

Vue2的基本使用

一、vue的基本使用 第一步 引入vue.js文件 <script src"https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script> 或者<script src"./js/vue.js"></script> 第二步 在body中设置一个挂载点 {{msg}} <div id"app…

Web3中的营销:如何在2023年获得优势

Mar. 2022, Daniel在过去的一年里&#xff0c;让人们对你的Web3项目或协议感兴趣已经变得越来越有挑战性。许多曾经充满希望的项目因为各种不同的原因&#xff0c;都在熊市中倒下了。然而&#xff0c;那些迄今为止幸存下来的项目都有一个共同点&#xff1a;强大的社区。Web3营销…

九龙证券“风光储锂芯”集体回暖 创业板指探低回升

周一&#xff0c;A股三大指数体现分解&#xff0c;沪指微跌&#xff0c;创业板指探低上升小幅上涨。盘面上&#xff0c;“风景储锂芯”集体反弹&#xff0c;6G概念再度大涨&#xff0c;消费股午后逆势走强&#xff0c;酒店旅游方向领涨&#xff0c;而前期热门的数字经济概念震动…