Neo4j:java客戶端操作
阿新 • • 發佈:2022-05-22
Neo4j資料庫訪問
Neo4j訪問的兩種方式
- 嵌入式資料庫
- 伺服器模式(通過REST的訪問)
它是由應用程式的性質(neo4j是獨立伺服器 還是和程式在一起),效能,監控和資料安全性來決定架構選擇。
An embedded database(嵌入式資料庫)
嵌入式Neo4j資料庫是效能的最佳選擇。 通過指定資料儲存的路徑以程式設計方式訪問嵌入式資料庫。
我們選擇嵌入式資料庫出於以下原因:
- 使用Java作為我們專案的程式語言時
- 應用程式是獨立的
- 程式追求很高的效能
Neo4j Server(伺服器模式)
Neo4j Server是相互操作性,安全性和監控的最佳選擇。 實際上,REST介面允許所有現代平臺和程式設計 語言與它進行互操作。 此外,作為獨立應用程式,它比嵌入式配置更安全(客戶端中的潛在故障不會影響伺服器),並且更易於監控。 如果我們選擇使用這種模式,我們的應用程式將充當Neo4j伺服器的客戶端。要連線到Neo4j伺服器,可以使用任何程式語言的REST 訪問資料庫。
Java客戶端操作Neo4j
嵌入式模式
引入依賴:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.5.5</version>
</dependency>
新增資料:
public class EmbeddedNeo4jAdd { private static final File databaseDirectory = new File( "target/graph.db" ); public static void main(String[] args) { GraphDatabaseService databaseService = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory); Transaction tx = databaseService.beginTx(); Node node = databaseService.createNode(); node.setProperty("name", "tom"); node.setProperty("age", 20); node.addLabel(Label.label("Person")); //定義cql String cql = "create(p:Person {name:'jerry',age:10}) return p"; databaseService.execute(cql); tx.success(); tx.close(); databaseService.shutdown(); } }
查詢資料:
public class EmbeddedNeo4jQueryAll { private static final File databaseDirectory = new File( "target/graph.db" ); public static void main(String[] args) { GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory); Transaction tx = graphDb.beginTx(); String cql = "MATCH (a:Person) where a.name = $name return a"; Map<String, Object> paramerters = new HashMap<String, Object>(); paramerters.put("name", "tom"); Result result = graphDb.execute(cql, paramerters); while (result.hasNext()) { Map<String, Object> row = result.next(); for (String key : result.columns()) { Node nd = (Node) row.get(key); System.out.printf("%s = %s:%s%n", key, nd.getProperty("name"), nd.getProperty("age")); } } tx.success(); tx.close(); graphDb.shutdown(); } }
伺服器模式
引入驅動包:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-bolt-driver</artifactId>
<version>3.2.10</version>
</dependency>
示例程式碼:
public class Neo4jServerMain {
public static void main(String[] args) {
Driver driver = GraphDatabase.driver( "bolt://192.168.40.128:7687",
AuthTokens.basic( "neo4j", "xxxxx" ) );
Session session = driver.session();
String cql = "MATCH (a:Person) RETURN a ";
Result result = session.run(cql);
while ( result.hasNext() ) {
Record record = result.next();
Value value = record.get("a");
System.out.println( value.get( "name" ).asString() + " " + value.get( "age" ) );
}
session.close();
driver.close();
}
}
public class Neo4jServerMain2 {
public static void main(String[] args) {
Driver driver = GraphDatabase.driver( "bolt://192.168.40.128:7687",
AuthTokens.basic( "neo4j", "QWE340721" ) );
Session session = driver.session();
String cql = "MATCH p=shortestPath((person:Person {name:$startName})- [*]-(person2:Person {name:$endName} )) RETURN p";
Result result = session.run( cql,parameters("startName","王啟年","endName","九品射手燕小乙") );
while ( result.hasNext() )
{
Record record = result.next();
System.out.println(record);
}
session.close();
driver.close();
}
}