Как построить параметризованный запрос шифрования в коде приложения Java?

#java #neo4j #cypher

#java #neo4j #cypher

Вопрос:

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

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

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

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

 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 и relationbetweennode1 иnode2, то в качестве параметров могут быть переданы по крайней мере следующие значения.

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

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

Есть какой-нибудь пример кода? Учебное пособие?

Ответ №1:

Вы можете передавать параметры вместе с запросом в 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);