您现在的位置是:首页 > Javascript
当前栏目
【干货】一文搞懂java+neo4j
2023-04-18 16:44:02 时间
一.neo4j安装
1.安装jdk,这个就不讲了,版本为1.8
2.安装neo4j
官网:https://neo4j.com/download-center/
区分为社区版和企业版(收费)区别如下:
注意:4.X版本需要对应java11以上,所以我们选择3.5
下载完毕后解压,进入conf目录,修改配置文件
"dbms.default_listen_address=0.0.0.0"取消注释
然后进入bin目录,运行./neo4j start
启动后访问http://<ip>:7474/browser/
二.neo4j的sql语法
举些简单例子:
查询老李的所有相关属性: MATCH (n)-[r*1..]->(m) where n.name='老李' return n,r,m
查询所有张三的同事关系: match (n)-[r:`同事`]-(m) where n.name='张三' return m,n,r;
查询老李的所有同事的相关属性: match(n)-[r:`同事`]-(q)-[b]-(m) where n.name='老李' return n,m,r,b,q
三.java实战neo4j
引入neo4j依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> <version>2.5.8</version> </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-ogm-http-driver</artifactId> <version>3.2.1</version> </dependency>
编写实体类
package com.zjlab.leqing.entity;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Node;
import org.springframework.data.neo4j.core.schema.Relationship;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/**
* @author bing.bai
* @create 2022/7/4
*/
@Node
@Data
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private String sex;
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 = "房产")
public Set<House> houses;
@Relationship(type = "车")
public Set<Car> cars;
@Relationship(type = "同事")
public Set<Person> associates;
public void haveHouse(House house) {
if (houses == null) {
houses = new HashSet<>();
}
houses.add(house);
}
public void haveCar(Car car) {
if (cars == null) {
cars = new HashSet<>();
}
cars.add(car);
}
public void workWith(Person person) {
if (associates == null) {
associates = new HashSet<>();
}
associates.add(person);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(id, person.id) && Objects.equals(name, person.name) && Objects.equals(sex, person.sex) && Objects.equals(houses, person.houses) && Objects.equals(cars, person.cars) && Objects.equals(associates, person.associates);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
编写mapper:
package com.zjlab.leqing.mapper;
import com.zjlab.leqing.entity.Person;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import java.util.List;
/**
* @author bing.bai
* @create 2022/7/4
*/
public interface PersonRepository extends Neo4jRepository<Person, Long> {
List<Person> findByNameIsLike(String name);
@Query("match (n:House)<-[r:`房产`]-(m:Person) where n.address contains {address} return m,n,r;")
Person findByHouseAddress(String address);
@Query("MATCH (n)-[r*1..]->(m) where n.name contains {name} return n,r,m")
List<Person> findAllByName(String name);
}
启动类增加注解:
编写controller:
最终结果:
相关文章
- 前端面试 【JavaScript】— typeof 是否能正确判断类型?
- 前端面试 【JavaScript】— instanceof 能否判断基本数据类型?
- 前端面试 【JavaScript】— 能不能手动实现一下 instanceof 的功能?
- 前端面试 【JavaScript】— Object.is和=== 有什么区别?
- 前端面试 【JavaScript】— JS中类型转换有哪几种?
- 前端面试 【JavaScript】— == 和 ===有什么区别?
- 前端面试 【JavaScript】— 对象转原始类型是根据什么流程运行的?
- JavaScript 的 parseInt() 函数
- javascript实现两个数字进行组合
- JS监听键盘按键
- 大前端开发中的路由管理之五:Flutter篇
- Javascript的DOM操作
- 在Vue项目中使用WebSocket技术
- 新手向:前端程序员必学基本技能——调试JS代码
- React 毁了 Web 开发!
- 「JS 逆向百例」cnki 学术翻译 AES 加密分析
- 商标注册域名后缀用什么?商标和域名有哪些区别?
- 网站建设流程是怎样的?需要看重哪些细节?
- 网站域名商标注册流程是什么?网站域名商标有什么用?
- 如何建设一个实用性强的网站 网站上线后如何运营