1. Введение в Neo4j
Neo4j — это высокопроизводительная графовая база данных NOSQL, которая хранит структурированные данные по сети, а не в таблицах. Это встроенный дисковый механизм сохраняемости Java с полностью транзакционными функциями, но он хранит структурированные данные в сети (называемые графом с математической точки зрения), а не в таблицах. Neo4j также можно рассматривать как высокопроизводительный графический движок со всеми функциями полноценной базы данных. Программисты работают с объектно-ориентированной гибкой сетевой структурой, а не с жесткими статическими таблицами, но они могут пользоваться всеми преимуществами полностью транзакционной базы данных корпоративного класса.
Официальный сайт Neo4j:www.neo4j.org
2. Установите Neo4j
Существует множество онлайн-руководств по установке. Эта статья устанавливается на компьютер Mac с помощью docker + Kitematic. Шаги примерно следующие:
1. Запустите докер
2. Найдите образ Neo4j в Kitematic и установите его, вот Amway, очень удобно устанавливать некоторые образы, как показано ниже:
3. После завершения установки посетите соответствующий веб-адрес следующим образом:
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 для инициализации данных, и результат показан на следующем рисунке:
Остальные методы тестирования здесь не приводятся и могут быть проверены самостоятельно.
4.Основные команды Neo4j
4.1 Введение в рабочие команды
Далее мы представим основные рабочие команды Neo4j.
- Команда CREATE: Команда создания узла
- Команда MATCH: команда запроса
- Команда возврата: вернуться в команду данных
- Команды DELETE: команда Delete может использоваться для удаления узлов и связанной с ними информации об узлах.
- Команда REMOVE: может использоваться для удаления тегов и атрибутов.
4.2 Простые упражнения
Команды создания могут использоваться для создания узлов и узлов отношений.Например, мы хотим создать отдел, отдел секретаря, как показано ниже, выполните следующие команды:
CREATE (d:dept {deptName:"秘书部"})
После операции это выглядит следующим образом:
В настоящее время видно, что отдел секретаря не имеет ничего общего с другими узлами, затем создайте связь между отделом секретаря и генеральным директором и выполните следующие команды:
MATCH (n:dept {deptName:"CEO"}),(m:dept {deptName:"秘书部"}) CREATE (n)-[r:relationShip]->(m) return r;
Просмотр результатов, как показано на рисунке:
Видно, что отдел секретаря был связан с узлом генерального директора.
Как видно из вышеизложенного, общая структура оператора CQL выглядит следующим образом:
- MATCH RETURN: возвращается результат попадания запроса;
- MATCH CREATE RETURN: после создания запроса связь возвращается;
- MATCH DELETE: запрос на удаление;
...
5. Исходный код
Адрес источника:git ee.com/Большой Брат Ян/Да…
6. Ссылка
Справочный адрес: