<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>

          springboot集成neo4j

          共 6865字,需瀏覽 14分鐘

           ·

          2021-01-30 10:45

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質文章,第一時間送達

          76套java從入門到精通實戰(zhàn)課程分享

          1.NEO4J簡介

          NEO4J,NoSql家族中的一員,最早發(fā)行的圖形數(shù)據(jù)庫,目前依然是主流圖形數(shù)據(jù)庫。優(yōu)點是:圖論的數(shù)據(jù)庫實現(xiàn),對各種圖算法做了簡易封裝,使開發(fā)者不再關注于算法的具體實現(xiàn),可以集中精力于業(yè)務的實現(xiàn)。采用java編寫,社區(qū)版開源,企業(yè)版閉源。

          2.傳統(tǒng)關系型數(shù)據(jù)庫與圖形數(shù)據(jù)庫的糾葛

          上世紀軟硬件的限制使oracle\mysql等一大批數(shù)據(jù)庫應運而生,建立在集合論基礎上實現(xiàn)的數(shù)據(jù)庫,通過外鍵理論在實際上勉強完成了簡單的關系。而最早的NEO4J等圖形數(shù)據(jù)庫還在開發(fā)者的肚子里,關系型數(shù)據(jù)庫之名就這樣被搶走了。

          3.怎么把neo4j怎么集成到我們的程序中?

          場景:A同學被老大安排開發(fā)一個關于社交關系的需求,根據(jù)A同學多年的開發(fā)經驗,mysql是肯定做不了的(因為關系型數(shù)據(jù)庫的數(shù)學基礎是集合論,依靠外鍵來實現(xiàn)簡單的關系,對于深層關系的查詢遞歸將會慢到一個讓人無法接受的程度)。百度一下,NEO4J——以圖論為基礎的數(shù)據(jù)庫,就它了。開始百度怎么往項目中集成NEO4J,A同學發(fā)現(xiàn)一個看上去不錯的demo,這么多人轉發(fā)and不要臉的抄襲,應該不錯,上去鼓搗一陣,最后發(fā)現(xiàn):咦?怎么報錯了,一模一樣的啊;臥槽,這錘子不發(fā)maven依賴,版本用的不對啊......幾小時就這么浪費了,還打擊了自己的信心。

          引入的方法有很多種,但是spring提供的辦法絕對是最簡單方便的。怎么看?當然是看官網提供的15min的案例,地址:https://spring.io/guides/gs/accessing-data-neo4j/。怎么找,看下面的截圖。

          4.集成步驟截圖:

          前置條件

          1.電腦已正確安裝maven、jdk、Eclipse|IDEA

          (1)下載neo4j的window解壓包。地址:https://neo4j.com/,下載下來的解壓包如下:

          (2)配置NEO4J_HOME的環(huán)境變量。

          (3)安裝neo4J的服務

          cmd命令:

          1.neo4j install-service

          2.neo4j start

          假如neo4j服務安裝失敗,也可以用以下命令啟動:

          neo4j.bat console

          查看http://localhost:7474/browser/,賬號和密碼都是:neo4j,然后修改密碼,進入如下頁面:

          (4)springboot集成neo4j,對比官網demo,下面就放我自己的代碼上來:

          1.pom.xml

          "1.0"?encoding="UTF-8"?>
          "http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          ?????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?https://maven.apache.org/xsd/maven-4.0.0.xsd">
          ????4.0.0
          ????
          ????????org.springframework.boot
          ????????spring-boot-starter-parent
          ????????2.3.2.RELEASE
          ?????????
          ????

          ????com.example
          ????neo4j
          ????0.0.1-SNAPSHOT
          ????neo4j
          ????Demo?project?for?Spring?neo4j
          ?
          ????
          ????????1.8
          ????

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

          ?
          ????????
          ????????????org.springframework.boot
          ????????????spring-boot-starter-test
          ????????????test
          ????????????
          ????????????????
          ????????????????????org.junit.vintage
          ????????????????????junit-vintage-engine
          ????????????????

          ????????????

          ????????

          ????

          ?
          ????
          ????????
          ????????????
          ????????????????org.springframework.boot
          ????????????????spring-boot-maven-plugin
          ????????????

          ????????

          ????

          ?


          2.application.properties

          spring.data.neo4j.uri=bolt://localhost:7687
          spring.data.neo4j.username=neo4j
          spring.data.neo4j.password=neo4j

          3.Person實體類

          package?com.example.neo4j.entity;
          ?
          import?java.util.Collections;
          import?java.util.HashSet;
          import?java.util.Optional;
          import?java.util.Set;
          import?java.util.stream.Collectors;
          ?
          import?org.neo4j.ogm.annotation.GeneratedValue;
          import?org.neo4j.ogm.annotation.Id;
          import?org.neo4j.ogm.annotation.NodeEntity;
          import?org.neo4j.ogm.annotation.Relationship;
          ?
          @NodeEntity
          public?class?Person?{
          ?
          ????@Id?@GeneratedValue?private?Long?id;
          ?
          ????private?String?name;
          ?
          ????private?Person()?{
          ????????//?Empty?constructor?required?as?of?Neo4j?API?2.0.5
          ????};
          ?
          ????public?Person(String?name)?{
          ????????this.name?=?name;
          ????}
          ?
          ????/**
          ?????*?Neo4j?doesn't?REALLY?have?bi-directional?relationships.?It?just?means?when?querying
          ?????*?to?ignore?the?direction?of?the?relationship.
          ?????*?https://dzone.com/articles/modelling-data-neo4j
          ?????*/
          ????@Relationship(type?=?"TEAMMATE",?direction?=?Relationship.UNDIRECTED)
          ????public?Set?teammates;
          ?
          ????public?void?worksWith(Person?person)?{
          ????????if?(teammates?==?null)?{
          ????????????teammates?=?new?HashSet<>();
          ????????}
          ????????teammates.add(person);
          ????}
          ?
          ????public?String?toString()?{
          ?
          ????????return?this.name?+?"'
          s?teammates?=>?"
          ????????????????+?Optional.ofNullable(this.teammates).orElse(
          ????????????????Collections.emptySet()).stream()
          ????????????????.map(Person::getName)
          ????????????????.collect(Collectors.toList());
          ????}
          ?
          ????public?String?getName()?{
          ????????return?name;
          ????}
          ?
          ????public?void?setName(String?name)?{
          ????????this.name?=?name;
          ????}
          }

          4.dao層調用neo4j,jpa的方式:

          package?com.example.neo4j.repository;
          ?
          import?java.util.List;
          ?
          import?com.example.neo4j.entity.Person;
          import?org.springframework.data.domain.Page;
          import?org.springframework.data.domain.Pageable;
          import?org.springframework.data.neo4j.annotation.Query;
          import?org.springframework.data.neo4j.repository.Neo4jRepository;
          ?
          public?interface?PersonRepository?extends?Neo4jRepository?{
          ?
          ????Person?findByName(String?name);
          ?
          ????List?findByTeammatesName(String?name);
          ?
          ????@Query(value?=?"match?(Greg:Person)?return?Greg",
          ????????????countQuery=?"match?(Greg:Person)?return?count(Greg)")
          ????Page?getActorsThatActInAmoviesFromTitle(?Pageable?pageable?);
          ?
          ????@Query(value?="",countQuery?=?"")
          ????List?getAllById();
          }

          5.springboot啟動類

          package?com.example.neo4j;
          ?
          import?com.example.neo4j.entity.Person;
          import?com.example.neo4j.repository.PersonRepository;
          import?org.slf4j.Logger;
          import?org.slf4j.LoggerFactory;
          import?org.springframework.boot.CommandLineRunner;
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.context.annotation.Bean;
          import?org.springframework.data.domain.Page;
          import?org.springframework.data.domain.PageRequest;
          import?org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
          ?
          import?java.util.Arrays;
          import?java.util.List;
          ?
          ?
          @SpringBootApplication
          @EnableNeo4jRepositories
          public?class?Neo4jApplication?{
          ?
          ????private?final?static?Logger?log?=?LoggerFactory.getLogger(Neo4jApplication.class);
          ?
          ?
          ????public?static?void?main(String[]?args)?{
          ????????SpringApplication.run(Neo4jApplication.class,?args);
          ????????System.exit(0);
          ????}
          ?
          ????@Bean
          ????CommandLineRunner?demo(PersonRepository?personRepository)?{
          ????????return?args?->?{
          ?
          ????????????personRepository.deleteAll();
          ?
          ????????????Person?greg?=?new?Person("Greg");
          ????????????Person?roy?=?new?Person("Roy");
          ????????????Person?craig?=?new?Person("Craig");
          ?
          ????????????List?team?=?Arrays.asList(greg,?roy,?craig);
          ?
          ????????????log.info("Before?linking?up?with?Neo4j...");
          ?
          ????????????team.stream().forEach(person?->?log.info("\t"?+?person.toString()));
          ?
          ????????????personRepository.save(greg);
          ????????????personRepository.save(roy);
          ????????????personRepository.save(craig);
          ?
          ????????????greg?=?personRepository.findByName(greg.getName());
          ????????????greg.worksWith(roy);
          ????????????greg.worksWith(craig);
          ????????????personRepository.save(greg);
          ?
          ????????????roy?=?personRepository.findByName(roy.getName());
          ????????????roy.worksWith(craig);
          ????????????//?We?already?know?that?roy?works?with?greg
          ????????????personRepository.save(roy);
          ?
          ????????????//?We?already?know?craig?works?with?roy?and?greg
          ?
          ????????????log.info("Lookup?each?person?by?name...");
          ????????????team.stream().forEach(person?->?log.info(
          ????????????????????"\t"?+?personRepository.findByName(person.getName()).toString()));
          ?
          ????????????List?teammates?=?personRepository.findByTeammatesName(greg.getName());
          ????????????log.info("The?following?have?Greg?as?a?teammate...");
          ????????????teammates.stream().forEach(person?->?log.info("\t"?+?person.getName()));
          ????????????Page?grag=personRepository.getActorsThatActInAmoviesFromTitle(PageRequest.of(0,5));
          ????????????log.info("\t"?+?grag);
          ????????};
          ????}
          ?
          }

          6.啟動截圖

          7.在neo4j控制臺查詢結果:

          ?


          版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。

          本文鏈接:

          https://blog.csdn.net/a__da/article/details/112484242






          粉絲福利:Java從入門到入土學習路線圖

          ??????

          ??長按上方微信二維碼?2 秒


          感謝點贊支持下哈?

          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  天堂成人在线 | 九色自拍论坛 | 一级A色情 | 乱伦月 大像传媒 | 97一区二区 |