Spring Boot整合neo4j

这篇具有很好参考价值的文章主要介绍了Spring Boot整合neo4j。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Neo4 j概览

springboot整合neo4j框架,neo4j,spring boot

相关版本信息

jdk 1.8

neo4j-enterprise-3.5.35

idea 2021

maven 3.6.3

SpringBoot整合neo4j实操

1、配置文件

Pom文件中引入依赖 Spring生态中Spring-data部分不仅仅提供了Spring-data-jpa , 也提供了Spring-data-neo4j 支持spring和 neo4j的完美融合,pom.xml 文件中依赖

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

yml文件中配置连接属性

spring:
  data:
    neo4j:
      uri: bolt://localhost:7687
      username: neo4j
      password: 123
#打印neo4j生成的Cypher
logging:
  level:
    org:
      neo4j:
        ogm:
          drivers:
            bolt:
              request:
                BoltRequest: DEBUG
​

2、实体类(NodeEntity)

/**
*部门节点实体类
*/
@NodeEntity(label = "Dept")
@Data
@Builder
public class Dept {
​
    @Id
    @GeneratedValue
    private Long id;
​
    @Property(name = "deptName")
    private String deptName;
​
}
/**
*关系 实体类
*/
@RelationshipEntity(type = "relationShip")
@Data
@Builder
public class RelationShip {
​
    @Id
    @GeneratedValue
    private Long id;
​
    @StartNode
    private Dept parent;
​
    @EndNode
    private Dept child;
}   

@NodeEntity: 标明是一个节点实体@RelationshipEntity:标明是一个关系实体@Id:实体主键@Property:实体属性@GeneratedValue:实体属性值自增@StartNode:开始节点(可以理解为父节点)@EndNode:结束节点(可以理解为子节点)、

3、创建repositories类(类似于封装过的dao)

@Repository
public interface DeptRepository extends Neo4jRepository<Dept,Long> {
​
    @Query("MATCH (d:dept) WHERE d.deptName CONTAINS $title RETURN d")
    List<Dept> findByTitle(@Param("title") String title);
}

@Query:编写neo4j 的Cypher语句, 变量格式为$

源码解析:Neo4jRepository.class

@NoRepositoryBean
public interface Neo4jRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
    <S extends T> S save(S var1, int var2);
​
    <S extends T> Iterable<S> save(Iterable<S> var1, int var2);
​
    Optional<T> findById(ID var1, int var2);
​
    Iterable<T> findAll();
​
    Iterable<T> findAll(int var1);
​
    Iterable<T> findAll(Sort var1);
​
    Iterable<T> findAll(Sort var1, int var2);
​
    Iterable<T> findAllById(Iterable<ID> var1);
​
    Iterable<T> findAllById(Iterable<ID> var1, int var2);
​
    Iterable<T> findAllById(Iterable<ID> var1, Sort var2);
​
    Iterable<T> findAllById(Iterable<ID> var1, Sort var2, int var3);
​
    Page<T> findAll(Pageable var1);
​
    Page<T> findAll(Pageable var1, int var2);
}

Neo4jRepository已经经过多层封装,包含了实现了crud基本功能外,再集成了分页功能,之后提炼了常用查询的方法,提高了代码复用性。

4、创建Neo4jConfig配置

package io.fredia.femicro.graph.config;
​
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
​
@Configuration
@EnableNeo4jRepositories(basePackages = "com.example.demo.repository")
@EnableTransactionManagement // 激活隐式事务
public class Neo4jConfig {
}

注解解析:@Configuration: springboot声明配置类,一般为单例模式@EnableNeo4jRepositories: Neo4j扫描Repositories所在包,可以理解为mybatis扫描mapper包@EnableTransactionManagement: Neo4j完整的支持ACID,所以此处开启事务功能。

5、编写Service类

@Service
public class DeptService {
​
    @Autowired
    private DeptRepository deptRepository;
​
    public Iterable<Dept> saveAll(List<Dept> depts) {
        return deptRepository.saveAll(depts);
    }
​
    public void deleteById(Long id) {
        deptRepository.deleteById(id);
    }
​
    public void deleteAll() {
        deptRepository.deleteAll();
    }
​
    public List<Dept> findByTitle(String title) {
        return deptRepository.findByTitle(title);
    }
}

6、编写Controller类

@RestController
public class TestController {
​
    @Autowired
    private DeptService deptService;
​
    @Autowired
    private RelationShipService relationShipService;
​
    /**
     * CEO
     *    -设计部
     *        - 设计1组
     *        - 设计2组
     *    -技术部
     *        - 前端技术部
     *        - 后端技术部
     *        - 测试技术部
     */
    @GetMapping("/create")
    public void create(){
        Dept CEO = Dept.builder().deptName("CEO").build();
        Dept dept1 = Dept.builder().deptName("设计部").build();
        Dept dept11 = Dept.builder().deptName("设计1组").build();
        Dept dept12 = Dept.builder().deptName("设计2组").build();
​
        Dept dept2 = Dept.builder().deptName("技术部").build();
        Dept dept21 = Dept.builder().deptName("前端技术部").build();
        Dept dept22 = Dept.builder().deptName("后端技术部").build();
        Dept dept23 = Dept.builder().deptName("测试技术部").build();
        List<Dept> depts = new ArrayList<>(Arrays.asList(CEO,dept1,dept11,dept12,dept2,dept21,dept22,dept23));
        deptService.saveAll(depts);
​
        RelationShip relationShip1 = RelationShip.builder().parent(CEO).child(dept1).build();
        RelationShip relationShip2 = RelationShip.builder().parent(CEO).child(dept2).build();
        RelationShip relationShip3 = RelationShip.builder().parent(dept1).child(dept11).build();
        RelationShip relationShip4 = RelationShip.builder().parent(dept1).child(dept12).build();
        RelationShip relationShip5 = RelationShip.builder().parent(dept2).child(dept21).build();
        RelationShip relationShip6 = RelationShip.builder().parent(dept2).child(dept22).build();
        RelationShip relationShip7 = RelationShip.builder().parent(dept2).child(dept23).build();
        List<RelationShip> relationShips = new ArrayList<>(Arrays.asList(relationShip1,relationShip2,relationShip3,relationShip4,relationShip5
                ,relationShip6,relationShip7));
        relationShipService.saveAll(relationShips);
    }
​
    @GetMapping("getById")
    public RelationShip getById(Long id){
        Optional<RelationShip> byId = relationShipService.findById(id);
        return byId.orElse(null);
    }
​
    @GetMapping("deleteRelationShip")
    public void deleteRelationShip(Long id){
        relationShipService.deleteById(id);
    }
​
    @GetMapping("deleteDept")
    public void deleteDept(Long id){
        deptService.deleteById(id);
    }
​
    @GetMapping("deleteAll")
    public void deleteAll(){
        deptService.deleteAll();
        relationShipService.deleteAll();
    }
    @GetMapping("getByTitle")
    public List<Dept> getByTitle(@RequestParam("title") String title){
        return deptService.findByTitle(title);
    }
}

测试结果

启动项目 访问本地地址:实现新增功能

http://localhost:8088/create

登录本机的Neo4j :localhost:7474

查看Neo4j 数据库内容: springboot整合neo4j框架,neo4j,spring boot

访问本地地址:通过Cypher语句实现查询功能

http://localhost:8088/getByTitle?title=技术

控制台打印日志: springboot整合neo4j框架,neo4j,spring boot

查看Neo4j 数据库内容: springboot整合neo4j框架,neo4j,spring boot文章来源地址https://www.toymoban.com/news/detail-693532.html

到了这里,关于Spring Boot整合neo4j的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot整合Neo4J图数据库

    1.引入依赖 JDK11, neo4J4.4.23 2.解决springboot与neo4j兼容问题

    2024年02月09日
    浏览(43)
  • 【微服务】springboot整合neo4j使用详解

    在上一篇我们详细了解了neo4j的使用,从搭建到相关的语法操作,本篇紧接着之前的内容,来详细聊聊如何在springboot应用中集成和使用neo4j。 和很多其他的中间件类似,都提供了类似jpa的方式与springboot进行集成,比如大家熟悉的springdata-jpa,操作es的jpa,操作mongo的jpa等,而

    2024年02月08日
    浏览(44)
  • springboot整合neo4j-使用原生cypher

    该文的实现有更简单的方式,详见我的另一篇博客springboot整合neo4j–采用Neo4jClient和Neo4jTemplate方式 Neo4j 提供 JAVA API 以编程方式执行所有数据库操作。它支持三种类型的API: 1、Neo4j 原生的 Java API 原生 Java API 是一种低级别的纯 JAVA API,用于执行数据库操作。 2、Neo4j Cypher Jav

    2024年02月12日
    浏览(48)
  • springboot整合neo4j-使用原生cypher Java API

    该文的实现有更简单的方式,详见我的另一篇博客springboot整合neo4j–采用Neo4jClient和Neo4jTemplate方式 Neo4j 提供 JAVA API 以编程方式执行所有数据库操作。它支持三种类型的API: 1、Neo4j 原生的 Java API 原生 Java API 是一种低级别的纯 JAVA API,用于执行数据库操作。 2、Neo4j Cypher Jav

    2024年02月09日
    浏览(50)
  • 图数据库_Neo4j和SpringBoot整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010

    2023-09-10 10:37:48 补充 注意:下面是旧版本的语法,如果你发现@NodeEntity这样的注解没有的话可以这样: 这里就要用@Node 另外如果@StartNode和@EndNode都没有了,那么说明是用法变了. 关于最新的用法,在官网有明确的说明和案例,很有用: 下面给出官网的案例:

    2024年02月12日
    浏览(45)
  • 图数据库_Neo4j和SpringBoot Data整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010

    2023-09-10 10:37:48 补充 注意:下面是旧版本的语法,如果你发现@NodeEntity这样的注解没有的话可以这样: 这里就要用@Node 另外如果@StartNode和@EndNode都没有了,那么说明是用法变了. 关于最新的用法,在官网有明确的说明和案例,很有用: 下面给出官网的案例:

    2024年02月09日
    浏览(47)
  • SpringBoot 整合 Neo4j、MySQL 多数据源方案(Druid Mybatis DynamicDatasource)

    本文总结了Neo4j和Spring/SpringBoot、Alibaba Druid、Dynamic Datasource、Mybatis等整合方案,对相应配置做了详细说明。 添加Neo4j JDBC Driver依赖 添加application.yml配置 添加Neo4j JDBC Driver + Alibaba Druid依赖 添加application.yml配置 添加Neo4j JDBC Driver、Alibaba Druid、Dynamic DataSource依赖 添加application.y

    2023年04月08日
    浏览(50)
  • 图数据库Neo4j学习四——Spring Data NEO

    如下所示,这是我们的一个实际的节点,我们以该节点为例,创建一个UserNode 如果出现以下错误 解决方法 :找到你安装neo4j的路径下的conf文件夹,neo4j.conf,找到 将前面的注释#去掉,然后重启neo4j,在重启项目即可。 通过接口创建User节点,老王 ,然后再neo4j中查询,看能否

    2024年02月13日
    浏览(40)
  • 图数据库Neo4j学习四Spring Data NEO

    如下所示,这是我们的一个实际的节点,我们以该节点为例,创建一个UserNode 如果出现以下错误 解决方法 :找到你安装neo4j的路径下的conf文件夹,neo4j.conf,找到 将前面的注释#去掉,然后重启neo4j,在重启项目即可。 通过接口创建User节点,老王 ,然后再neo4j中查询,看能否

    2024年02月11日
    浏览(41)
  • 图数据库_Neo4j和SpringBoot整合使用_创建节点_删除节点_创建关系_使用CQL操作图谱---Neo4j图数据库工作笔记0009

    首先需要引入依赖   springboot提供了一个spring data neo4j来操作 neo4j   可以看到它的架构   这个是下载下来的jar包来看看 有很多cypher对吧   可以看到就是通过封装的驱动来操作graph database   然后开始弄一下 首先添加依赖

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包