Как построить Параметризованный Cypher Query в коде приложения Java? - PullRequest
0 голосов
/ 07 апреля 2019

Идея, лежащая в основе параметризованных запросов, заключается в повторном использовании (кэшировании) планов выполнения.

Если метка узла или тип отношения не изменяются, план выполнения будет в целом одинаковым, поэтому можно будет получить выгоды от кэширования плана выполнения.

В настоящее время я выполняю полный Cypher Query с использованием Java String Building. Вместо того, чтобы создавать весь Cypher Query с использованием построения String, я хочу передать значения свойств в качестве значений параметров вместе с именами свойств в качестве параметров или нет. Мне нужен пример кода, руководство для того же.

Мой текущий код

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();

    }

}

Я понимаю, что мой код не использует Parameterized Cypher Query; поэтому он не будет генерировать план запроса в neo4j.

Чтобы использовать план запросов и использовать его, мне нужно использовать параметризованный запрос.

Если в качестве параметров не указан Node1, Node2, а ratioBetweenNode1andNode2, то как минимум следующие значения могут быть переданы в качестве параметров.

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

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

Любой пример кода? Учебное пособие

1 Ответ

1 голос
/ 07 апреля 2019

Вы можете передавать параметры вместе с запросом в методе session.run().

Пример.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...