有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

neo4j如何在Java应用程序代码中构建参数化密码查询?

参数化查询背后的思想是重用(缓存)执行计划

如果节点标签或关系类型不变,则执行计划将完全相同,因此可以实现执行计划缓存的好处

目前,我确信我的完整密码查询是使用Java字符串构建的。我不想使用字符串构建创建整个Cypher查询,而是希望将属性值作为参数值传递,同时将属性名称作为参数传递。我需要样本代码,同样的指导

我当前的代码

import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;

public class ForStackoverflowQuestion {

    public static void main(String[] args) {


Driver driver = GraphDatabase.driver(
  "bolt://localhost:7687", AuthTokens.basic("neo4j", "12345"));


Session session = driver.session();


String Node1 = "Software_Engineer";
String Node2 = "Programming_Language";
String relationBetweenNode1andNode2 = "LEARNS";


String PersonNameAttribute = "name";
String PersonNameValue = "Jaykant";

String ProgrammingLanguageAttribute = "version";
String ProgrammingLanguageValue = "Neo4j";



String t = "MERGE(n1:"+Node1+"{"+PersonNameAttribute+":\""+PersonNameValue+"\"})"+"-[:"+relationBetweenNode1andNode2+"]->(n2:" + Node2 +" {"+ProgrammingLanguageAttribute+":'"+ProgrammingLanguageValue+"'})";

System.out.println(t);

session.run(t);

session.close();

driver.close();

    }

}

我知道我上面的代码没有使用参数化的密码查询;因此,它不会在neo4j中生成任何查询计划

为了使用查询计划并从中受益,我需要使用参数化查询

如果Node1、Node2和Node1与Node2之间的关系不是参数,则至少可以将以下值作为参数传递

 PersonNameAttribute = "name";
 PersonNameValue = "Jaykant";

 ProgrammingLanguageAttribute = "version";
 ProgrammingLanguageValue = "Neo4j";

有样本代码吗?教程


共 (1) 个答案

  1. # 1 楼答案

    您可以在session.run()方法中随查询一起传递参数

    Ex.

    session.run(query, parameters)
    

    参数应该是一个映射

    HashMap<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("PersonNameValue", "Jaykant");
    parameters.put("ProgrammingLanguageValue", "Neo4j");
    

    查询可以修改为:

    String t = "MERGE (n1:"+Node1+"{"+PersonNameAttribute+":{PersonNameValue}})"+"-[:"+relationBetweenNode1andNode2+"]->(n2:" + Node2 +" {"+ProgrammingLanguageAttribute+": {ProgrammingLanguageValue}})";
    

    最后run语句:

    session.run(t, parameters);