如何在Java应用程序代码中构建参数化密码查询? [英] How to build Parameterized Cypher Query in Java Application Code?

查看:97
本文介绍了如何在Java应用程序代码中构建参数化密码查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

The idea behind parametrized queries is to re-use (cache) execution plans.

如果节点标签或关系类型不变,则执行计划将完全相同,因此可以受益于执行计划缓存.

If a node label or a relationship type do not vary, the execution plan would be the same at all, thus benefits can be achieved of execution plan caching.

当前,我是使用Java String Building构建的完整Cypher Query.而不是使用字符串构建来创建整个Cypher查询,我希望将属性的值作为参数值以及属性名称作为参数传递与否.我需要示例代码,同样的指导.

Currently, I'm my complete Cypher Query is built using Java String Building. Instead of creating the entire Cypher Query using String building I want to pass the values of the Properties as Parameter Values along with Property Names as Parameters or not. I need sample code, guidance for the same.

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中生成任何查询计划.

I understand that my above code is not using Parameterized Cypher Query; so it will not generate any Query Plan in neo4j.

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

In order to use and benefit from the Query Plan, I need to use the Parametrized Query.

如果不是将Node1,Node2和RelationBetweenNode1和Node2作为参数,则至少可以将以下值作为参数传递.

If not Node1, Node2, and relationBetweenNode1andNode2 as Parameters then at least following values can be passed as parameters.

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

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

有任何示例代码吗?教程?

推荐答案

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

You can pass parameters along with query in session.run() method.

例如.

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语句:

Finally run statement:

session.run(t, parameters);

这篇关于如何在Java应用程序代码中构建参数化密码查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆