SpringBoot использует Neo4j

Spring Boot

1. Введение в Neo4j

Neo4j — это высокопроизводительная графовая база данных NOSQL, которая хранит структурированные данные по сети, а не в таблицах. Это встроенный дисковый механизм сохраняемости Java с полностью транзакционными функциями, но он хранит структурированные данные в сети (называемые графом с математической точки зрения), а не в таблицах. Neo4j также можно рассматривать как высокопроизводительный графический движок со всеми функциями полноценной базы данных. Программисты работают с объектно-ориентированной гибкой сетевой структурой, а не с жесткими статическими таблицами, но они могут пользоваться всеми преимуществами полностью транзакционной базы данных корпоративного класса.

Официальный сайт Neo4j:www.neo4j.org

2. Установите Neo4j

Существует множество онлайн-руководств по установке. Эта статья устанавливается на компьютер Mac с помощью docker + Kitematic. Шаги примерно следующие:

1. Запустите докер
2. Найдите образ Neo4j в Kitematic и установите его, вот Amway, очень удобно устанавливать некоторые образы, как показано ниже:

wechatimg13.png

3. После завершения установки посетите соответствующий веб-адрес следующим образом:

wechatimg13.png

3. Интеграция с SpringBoot

Далее мы расскажем, как обращаться с Neo4j в SpringBoot.

3.1 Добавьте зависимости Neo4j

Создайте проект и введите зависимости в файл pom следующим образом:

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

3.2 Файл конфигурации

Настройте конфигурацию, связанную с Neo4j, в файле конфигурации следующим образом:

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

3.3 Создайте соответствующий объект

Взяв в качестве примера отдел, нам нужно создать диаграмму следующим образом:

     * CEO
     *    -设计部
     *        - 设计1组
     *        - 设计2组
     *    -技术部
     *        - 前端技术部
     *        - 后端技术部
     *        - 测试技术部

Итак, вот простое создание сущности отдела и сущности отношения.

Среди них ведомственные образования следующие:

@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.4 repository

Из-за использования spring-data для работы neo4j логика реализации схожа, а интерфейс создан для наследования Neo4jRepository.

DeptRepository выглядит следующим образом:

import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface DeptRepository extends Neo4jRepository<Dept,Long> {

}

RelationShipRepository выглядит следующим образом:

import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RelationShipRepository extends Neo4jRepository<RelationShip, Long> {

}

3.5 Основное использование

Здесь создаются некоторые базовые методы. Использование аналогично spring-data-jpa. Поскольку необходимо построить граф, как описано в 3.1 этой статьи, создается метод создания для инициализации данных. Полный код выглядит следующим образом:

@RestController
public class TestController {

    @Resource
    private DeptRepository deptRepository;
    @Resource
    private RelationShipRepository relationShipRepository;

    /**
     * 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));
        deptRepository.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));
        relationShipRepository.saveAll(relationShips);
    }

    @GetMapping("get")
    public RelationShip get(Long id){
        Optional<RelationShip> byId = relationShipRepository.findById(id);
        return byId.orElse(null);
    }

    @GetMapping("deleteRelationShip")
    public void deleteRelationShip(Long id){
        relationShipRepository.deleteById(id);
    }

    @GetMapping("deleteDept")
    public void deleteDept(Long id){
        deptRepository.deleteById(id);
    }

    @GetMapping("deleteAll")
    public void deleteAll(){
        deptRepository.deleteAll();
        relationShipRepository.deleteAll();
    }
}

Выполните метод create для инициализации данных, и результат показан на следующем рисунке:

wechatimg13.png

Остальные методы тестирования здесь не приводятся и могут быть проверены самостоятельно.

4.Основные команды Neo4j

4.1 Введение в рабочие команды

Далее мы представим основные рабочие команды Neo4j.

  • Команда CREATE: Команда создания узла
  • Команда MATCH: команда запроса
  • Команда возврата: вернуться в команду данных
  • Команды DELETE: команда Delete может использоваться для удаления узлов и связанной с ними информации об узлах.
  • Команда REMOVE: может использоваться для удаления тегов и атрибутов.

4.2 Простые упражнения

Команды создания могут использоваться для создания узлов и узлов отношений.Например, мы хотим создать отдел, отдел секретаря, как показано ниже, выполните следующие команды:

CREATE (d:dept {deptName:"秘书部"})

После операции это выглядит следующим образом:

wechatimg13.png

В настоящее время видно, что отдел секретаря не имеет ничего общего с другими узлами, затем создайте связь между отделом секретаря и генеральным директором и выполните следующие команды:

MATCH (n:dept {deptName:"CEO"}),(m:dept {deptName:"秘书部"}) CREATE (n)-[r:relationShip]->(m) return r;

Просмотр результатов, как показано на рисунке:

wechatimg13.png

Видно, что отдел секретаря был связан с узлом генерального директора.

Как видно из вышеизложенного, общая структура оператора CQL выглядит следующим образом:

  • MATCH RETURN: возвращается результат попадания запроса;
  • MATCH CREATE RETURN: после создания запроса связь возвращается;
  • MATCH DELETE: запрос на удаление;

...

5. Исходный код

Адрес источника:git ee.com/Большой Брат Ян/Да…

6. Ссылка

Справочный адрес:

Encyclopedia.Baidu.com/item/neo4/…
www.neo4j.org