Neo4j基础操作
最后更新:2025-07-24 11:08:52
|
状态:未完成
//以下说到的标签相当于关系型数据库中的表
//原生CQL创建节点
service.execute("create (d:Dept{name:'财务部', leader:'张三'})");
//创建多标签(表)节点
service.execute("CREATE (e:User:Employee{NAME:'张三',AGE:20})");
//创建多节点
service.execute("CREATE (e:User{NAME:'张三',AGE:20})");
//根据DataRow创建节点
DataRow r = new Neo4jDataRow();
r.put("NAME","ZH");
r.put("AGE", 20);
long qty = service.insert("User", r);
log.warn(LogUtil.format("[DataRow单行插入][影响行数:{}][生成主键:{}]", 36), qty, r.getId());
Assertions.assertEquals(qty, 1);
Assertions.assertNotNull(r.getId());
//创建多标签(表)节点,用:将多个标签分隔
service.insert("User:Employee", r);
log.warn(LogUtil.format("[DataRow多标签单行插入][影响行数:{}][生成主键:{}]", 36), qty, r.getId());
Assertions.assertEquals(qty, 1);
Assertions.assertNotNull(r.getId());
//根据entity创建节点
User u = new User("u1", 10);
service.insert(u);
log.warn(LogUtil.format("[Entity单行插入][影响行数:{}][生成主键:{}]", 36), qty, u.getId());
Assertions.assertEquals(qty, 1);
Assertions.assertNotNull(u.getId());
//临时指定标签(表)
service.insert("set_user",u);
log.warn(LogUtil.format("[Entity单行插入][临时指定目标表][影响行数:{}][生成主键:{}]", 36), qty, u.getId());
Assertions.assertEquals(qty, 1);
Assertions.assertNotNull(u.getId());
//指定多标签(表)
service.insert("User:Employee", u);
log.warn(LogUtil.format("[Entity多标签单行插入][影响行数:{}][生成主键:{}]", 36), qty, u.getId());
Assertions.assertEquals(qty, 1);
Assertions.assertNotNull(u.getId());
//根据DataSet创建节点
DataSet set = new DataSet();
for(int i=1; i<=10; i++){
DataRow row = new Neo4jDataRow();
row.put("NAME", "user"+i);
row.put("AGE", i*5);
set.add(row);
}
qty = service.insert("Batch", set);
log.warn(LogUtil.format("[DataSet批量插入][影响行数:{}][生成主键:{}]", 36), qty, set.getStrings("ID"));
Assertions.assertEquals(qty, set.size());
Assertions.assertEquals(set.getStrings("ID").size(), set.size());
List<User> users = new ArrayList<>();
for(int i=1; i<=10; i++){
users.add(new User("euser"+i, i*3));
}
qty = service.insert(users);
log.warn(LogUtil.format("[List<Entity>批量插入][影响行数:{}]", 36), qty);
Assertions.assertEquals(qty, users.size());
qty = service.insert("Batch", (Object) users);
log.warn(LogUtil.format("[List<Entity>批量插入临时指定表][影响行数:{}][users:{}]", 36), qty, BeanUtil.object2json(users));
Assertions.assertEquals(qty, users.size());
//合计
long total = service.count("Dept","leader:张三");
log.warn(LogUtil.format("[合计数量][total:{}]", 36), total);
total = service.count("");
log.warn(LogUtil.format("[整库合计数量][total:{}]", 36), total);
//节点是否存在
boolean exists = service.exists("Dept","leader:张三");
log.warn(LogUtil.format("[检测节点][exists:{}]", 36), exists);
//查询
set = service.querys("match (s:Dept) return s.name, s.qty limit 3 ");
log.warn(LogUtil.format("[原生CQL查询][result:{}]", 36), set.toJSON());
//按条件查询,查询结果不含前缀
set = service.querys("Dept","leader:张三","id:>0");
log.warn(LogUtil.format("[按条件查询][result:{}]", 36), set.toJSON());
//模糊查询
set = service.querys("Dept", "name:%财务%");
log.warn(LogUtil.format("[模糊查询][result:{}]", 36), set.toJSON());
set = service.querys("Dept", "name:%财务");
log.warn(LogUtil.format("[模糊查询][result:{}]", 36), set.toJSON());
set = service.querys("Dept", "name:财务%");
log.warn(LogUtil.format("[模糊查询][result:{}]", 36), set.toJSON());
//按条件分页查询
PageNavi navi = new DefaultPageNavi(3, 10);
set = service.querys("Dept", navi, "leader:张三");
log.warn(LogUtil.format("[按条件分页查询][result:{}]", 36), set.toJSON());
//指定截取
set = service.querys("Dept", 0, 9, "leader:张三");
log.warn(LogUtil.format("[指定截取][result:{}]", 36), set.toJSON());
set = service.querys("match (s:Dept) return s.name limit 3 ");
log.warn(LogUtil.format("[原生CQL][result:{}]", 36), set.toJSON());
set = service.querys("match (s:Dept) return s, s.name as name limit 10 ");
log.warn(LogUtil.format("[原生CQL][result:{}]", 36), set.toJSON());
set = service.querys("MATCH (e:Person)-[k:KNOWS]-(f) where e.name='Johan' RETURN e,k, f");
//返回{e={},k={},f={}}
log.warn(LogUtil.format("[原生CQL][result:{}]", 36), set.toJSON());
//按条件删除
service.delete("Dept", "name","财务部");
set = service.querys("Batch", 0, 9);
//根据ID删除
service.delete("Batch", set);