文章目录
- 数据库-Neo4j
-
- 起步安装
-
- CQL命令
-
- 1.节点操作
-
-
- 2.关系操作
-
- 3.标签操作
- 4.属性操作
- 5.排序、联合查询、局部查询、筛选查询
- CQL函数
- 索引 index
- 约束 constraint
- 与Spring结合
-
- 1.Spring整合
- 2.SpringBoot整合
数据库汇总: https://blog.csdn.net/qq_52681418/article/details/113881001
数据库-Neo4j
Neo4J是一个图形数据库,官网:http://www.neo4j.org
图形是一组节点和连接这些节点的关系。 节点和关系包含表示数据的属性。 属性是用于表示数据的键值对。
假设abcd分别代表一个人,A的视角,他们的关系如下:
B的视角,他们的关系如下:
这些应用程序包含大量的结构化,半结构化和非结构化的连接数据。 在 RDBMS 数据库中表示这种非结构化连接数据并不容易。
下图展示了2个节点及他们的关系:
起步安装
下载最新的Neo4j Server安装文件: https://neo4j.com/download-center/#community
注意:neo4j需要jdk环境,neo4j3.5以内可以使用jdk1.8,neo4.0以上用jdk11
下载完后解压,通过cmd进入解压后的bin目录,执行如下命令启动:neo4j.bat console
浏览器访问地址:http://localhost:7474/ 即可进入管理面板。
默认用户名、密码为neo4j,第一次登录会让你修改密码,当然在实际使用中也确实不应该使用默认密码。更多详细内容:https://www.w3cschool.cn/neo4j/neo4j_exe_environment_setup.html
CQL命令
neo4j通过CQL命令来操作节点,CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
一个节点可以理解为一条记录,也可理解为一个对象:
标签:每个节点都设置有一个或多个标签,通过标签查询拥有该标签的节点。
关系:节点与节点之间的关系,比如节点A和节点B是兄弟关系。
属性:每个节点、关系都有自身的属性,就和关系型数据库中每条记录都有字段一样。
标签标记一组节点,属性描述节点,关系关联多个节点。
# 节点格式: 属性为json格式 (别名:标签{ 属性}) # 关系格式 -[别名:标签{ 属性}]->
1.节点操作
节点的格式为:
# 格式:别名的作用是为节点取个临时名字,可以忽略不写 (别名:标签名1:标签名2...{属性值:属性名...})# 有时会出现的情况: () # 所有节点 (:标签名) # 所有带此标签的节点 (:标签名{属性名:属性值}) # 更具体的节点# 上面3种情况均未考虑使用别名的情况,那么什么是别名呢,别名类似于临时变量,临时代表当前节点: # 举例:两种结果都是一样的 match (p1) return p1 # 使用临时别名p1 match p2=() return p2 # 使用临时变量p2
1.创建节点: create
创建节点时需要为节点设置标签 ( 标签可以有多个 ),通过标签可以找到有这个标签的所有节点。
# 创一个节点 create 节点 # 同时创建多个节点 create 节点1,节点2# 节点不存在时才创建节点,create可以重复创建 merge 节点
每次添加节点、关系时,内部会自动添加一个自增的id属性,值最大为35亿。
2.查询节点: match
下面的别名可以理解为存储结果的对象,可以像mysql表别名一样使用,并且使用return可以返回操作的结果
在查询时,节点内容越详细,查询的结果范围越精确。
# 查询全部节点 match (p) return p# 查询标签tag下所有节点 match (p:tag) return p# 以属性作为条件查询节点: match (p:tag{属性名:属性值}) return p # 节点内指定属性 match (p:tag) where p.属性名=属性值 return p # where条件: (AND、OR、NOT、XOR、>、<、=、<>、>=、<=)
3.修改节点: set
修改节点需要找到需要修改的节点,因此往往与查询组合
# 修改节点:修改多个值或者多个条件均用,号隔开 match (p:标签) where p.id=1 set p.属性名=新值
4.删除节点: delete
如果要删除的节点和其他节点存在关系,删除时需要删除关系
# 按条件删除节点 match (p:标签) where p.id=1 delete p# 删除某个标签下的全部节点 match (p:标签) delete p
2.关系操作
添加关系: →、←、
关系也有临时别名、标签及属性。
# 创建节点时添加关系:r为关系别名 create (p1:`程序员`{name:"刘一"})-[r:哥哥]->(p2:`程序员`{name:"陈二"}) return p1,r,p2# 为已有节点添加关系:这里*可以取代所有别名 match (p1:`程序员`{name:"王五"}) match(p2:`程序员`{name:"张三"}) create (p1)<-[r:朋友]-(p2) return *
查询关系:
# 查询所有存在关系的节点 match p=()-[]->() return p# 查询拥有指定关系的节点 match p=()-[r:`哥哥`]->() return p# 查询一个节点的所有关系 match p=(:`程序员`{name:"张三"})<-[]->() return p# 查询2个节点之间的关系 match p=(:`程序员`{name:"张三"})<-[]->(:`程序员`{name:"王五"}) return p
修改关系: 暂无。
删除关系:
# 删除关系 match (p1:`程序员`{name:"张三"})-[r:`朋友`]->(p2) delete r # 删除关系与节点 match (p1:`程序员`{name:"张三"})-[r:`朋友`]->(p2) delete r,p2
3.标签操作
无论是节点还是关系都可以设置标签,标签在创建节点、关系时可直接指定
# 移除全部标签 match (p:tag) remove p return p # 移除指定标签 match (p:tag) remove p:标签 return p
4.属性操作
无论是节点还是关系都可以设置属性,属性在创建节点、关系时可直接声明
# 查看属性:不存在的属性值为null match (p:`程序员`) return p.name,p.age,p.height,p.year # 删除属性 match (p:`程序员`{name:"张三"}) remove p.age return p # 添加、修改属性 match (p:`程序员`{name:"张三"}) set p.age=50 return p
5.排序、联合查询、局部查询、筛选查询
#排序:order by [desc] (默认为升序,添加desc为降序) match (p:`程序员`) return p order by p.age desc# 联合查询 (match...) union (match...) # 会去重 (match...) union all (match...) # 不去重# 局部查询:在return末尾使用limit即可 match (p) return p limit n # 查询前n条 match (p) return p skip n # 查询后n条# 筛选查询(查看id为1,20,7的记录) match (p) where p.id in [1,20,7] return p
CQL函数
1.字符串函数 :
函数 用途 UPPER 到大写 LOWER 到小写 SUBSTRING 取子字符串 REPLACE 替换子字符串 2.聚合函数:
函数 用途 COUNT 获取查询行数 MAX 获取查询结果最大值 MIN 获取查询结果最小值 SUM 查询结果求和 AVG 查询结果求平均值 3.关系函数 :
函数 用途 STARTNODE 获取关系起始节点 ENDNODE 获取关系结束节点 ID 获取关系ID TYPE 获取字符串表示的关系类型
索引 index
使用索引可以加快查询速度、提升查询性能。
# 为一个节点、关系的属性添加索引 create index on :标签名 (属性名) # 为一个节点、关系的属性删除索引 drop index on :标签名 (属性名)
约束 constraint
创建节点时,会重复添加,可以通过添加约束来避免。
# 创建唯一约束:unique (如果属性已有重复,则无法添加此约束) create constraint on 节点 assert <属性名> is unique # 删除唯一越束:drop...unique drop constraint on 节点 assert <属性名> is unique
与Spring结合
1.Spring整合
1.pom.xml依赖
<!--Spring DATA Neo4j模块Jar-->
<dependency><groupId> org.springframework.data </groupId><artifactId> spring-data-neo4j </artifactId><version> 3.1.2.RELEASE </version>
</dependency>
<!--Neo4j Jar-->
<dependency><groupId> org.neo4j </groupId><artifactId> neo4j-kernel </artifactId><version> 2.1.3 </version>
</dependency>
<!--Java事务API jar-->
<dependency><groupId> javax.transaction </groupId><artifactId> jta </artifactId><version> 1.1 </version>
</dependency>
<!--Java验证API jar-->
<dependency><groupId> javax.validation </groupId><artifactId> validation-api </artifactId><version> 1.0.0.GA </version>
</dependency>
Spring Framework 相关注释:
注释 | 用法 |
---|---|
@GraphEntity | 定义域类?Neo4j Entity |
@GraphID | 定义节点或关系?id? |
@GraphProperty | 定义节点或关系属性 |
实现 Spring DATA Neo4j 应用程序的简要步骤 -
-
开发图表实体或域或 ?POJO? 类
-
开发 ?DAO? 或存储库
-
开发服务层(如果需要)
-
?Spring DATA Neo4j XML? 配置
2.实体类
@NodeEntity//get、set方法默认创建
public class User{
@GraphId Long id; private String name;private String address;private String sex;private String dob;/**默认已创建public boolean equals(Object other) {if (this == other)return true;if (id == null) return false;if (! (other instanceof User)) return false;return id.equals(((User) other).id);}public int hashCode() {return id == null ? System.identityHashCode(this) : id.hashCode();}**/
}
3.DAO层接口
public interface UserRepository extends GraphRepository<User>{
}
4.Service接口
public interface UserService{
User create(User user);void delete(User user); User findById(long id); Result<User> findAll();
}
5.Service接口实现类
@Service
public class UserServiceImpl implements UserService {
@Autowiredprivate UserRepository userRepository; public User create(User user) {
return userRepository.save(user);}public void delete(User user) {
userRepository.delete(user);}public User findById(long id) {
return userRepository.findOne(id);}public Result<User> findAll() {
return userRepository.findAll();}
}
6.XML配置
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/neo4jhttp://www.springframework.org/schema/data/neo4j/spring-neo4j.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><context:component-scan base-package="service包路径" /><neo4j:config storeDirectory="C:TPNeo4jDB" base-package="domain包路径"/><neo4j:repositories base-package="dao包路径"/><tx:annotation-driven /></beans>