Java String to Neo4J Create Graph 语句
Java String to Neo4J Create Graph statements
我必须根据查询结果创建图表。根据检索到的列作为字符串(代表SQL句子的列)获得结果后,我需要生成相应的图形创建句子如下:
检索到的列:
_fn1(filed1, filed2, filed3, '', filed4, filed5) AS new_alias_field
为在 Neo4j 上创建图形而生成的句子:
CREATE (new_alias_field:fields_from {column:'new_alias_field'})
CREATE (filed1:fields_to{column:'filed1'})
CREATE (filed2:fields_to{column:'filed2'})
CREATE (filed3:fields_to{column:'filed3'})
CREATE (filed4:fields_to{column:'filed4'})
CREATE (filed5:fields_to{column:'filed5'})
CREATE (fn1:function {name:'_fn1'})
CREATE
(filed1)-[:used_by {roles:['param']}]->(fn1),
(filed2)-[:used_by {roles:['param']}]->(fn1),
(filed3)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1)
CREATE
(fn1)-[:as ]->(new_alias_field)
完成此任务的最佳方法是创建解析器?或者我应该使用 JSqlParser 之类的东西,因为原始字符串有一些 SQL 语句?
我应该创建自己的解析器吗?还有其他可用的工具吗?
我正在尝试使用 JSqlParser,获取对象然后进行转换。仍在进行中。
尝试 Neo4J 中的代码,在 运行 创建脚本之后,您可以使用 :
查询节点
Match(new_alias_field{column:'new_alias_field'}) return new_alias_field
你必须得到:
JSqlParser 是一个很棒的解析器,它使用访问者模式。我曾经使用下一个表达式
来解析这个语句
select <<statement>> from dual
我发现的唯一限制是:尚不支持 MSQL 中使用的 IF 语句。
一旦我解析了这个语句,我就使用了 Spring 注释
@NodeEnityty
要创建所有实体并进行插入,例如 FieldsFrom 节点将如下所示:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@NodeEntity
public class FieldsFrom {
@Id
@GeneratedValue
private Long id;
private String name;
@Relationship(type= "USED_BY", direction = Relationship.INCOMING)
private Set<FieldsTo> fieldsTo;
}
经过所有处理,以及我使用的所有插入https://github.com/neo4j-contrib/neovis.js
我必须根据查询结果创建图表。根据检索到的列作为字符串(代表SQL句子的列)获得结果后,我需要生成相应的图形创建句子如下:
检索到的列:
_fn1(filed1, filed2, filed3, '', filed4, filed5) AS new_alias_field
为在 Neo4j 上创建图形而生成的句子:
CREATE (new_alias_field:fields_from {column:'new_alias_field'})
CREATE (filed1:fields_to{column:'filed1'})
CREATE (filed2:fields_to{column:'filed2'})
CREATE (filed3:fields_to{column:'filed3'})
CREATE (filed4:fields_to{column:'filed4'})
CREATE (filed5:fields_to{column:'filed5'})
CREATE (fn1:function {name:'_fn1'})
CREATE
(filed1)-[:used_by {roles:['param']}]->(fn1),
(filed2)-[:used_by {roles:['param']}]->(fn1),
(filed3)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1)
CREATE
(fn1)-[:as ]->(new_alias_field)
完成此任务的最佳方法是创建解析器?或者我应该使用 JSqlParser 之类的东西,因为原始字符串有一些 SQL 语句? 我应该创建自己的解析器吗?还有其他可用的工具吗?
我正在尝试使用 JSqlParser,获取对象然后进行转换。仍在进行中。
尝试 Neo4J 中的代码,在 运行 创建脚本之后,您可以使用 :
查询节点Match(new_alias_field{column:'new_alias_field'}) return new_alias_field
你必须得到:
JSqlParser 是一个很棒的解析器,它使用访问者模式。我曾经使用下一个表达式
来解析这个语句select <<statement>> from dual
我发现的唯一限制是:尚不支持 MSQL 中使用的 IF 语句。
一旦我解析了这个语句,我就使用了 Spring 注释
@NodeEnityty
要创建所有实体并进行插入,例如 FieldsFrom 节点将如下所示:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@NodeEntity
public class FieldsFrom {
@Id
@GeneratedValue
private Long id;
private String name;
@Relationship(type= "USED_BY", direction = Relationship.INCOMING)
private Set<FieldsTo> fieldsTo;
}
经过所有处理,以及我使用的所有插入https://github.com/neo4j-contrib/neovis.js