Appearance
编程语言集成
Neo4j 与 Java 集成
1. 使用 Neo4j Java Driver
依赖配置
xml
<!-- Maven 依赖 -->
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>5.14.0</version>
</dependency>基本用法
java
import org.neo4j.driver.*;
public class Neo4jJavaExample {
public static void main(String[] args) {
// 连接到 Neo4j
try (Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "password"))) {
// 创建会话
try (Session session = driver.session()) {
// 执行查询
Result result = session.run("MATCH (p:Person) RETURN p.name AS name");
// 处理结果
while (result.hasNext()) {
Record record = result.next();
System.out.println(record.get("name").asString());
}
}
}
}
}事务处理
java
try (Session session = driver.session()) {
// 开始事务
Transaction tx = session.beginTransaction();
try {
// 执行操作
tx.run("CREATE (p:Person {name: $name, age: $age})",
Values.parameters("name", "John", "age", 30));
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
throw e;
} finally {
tx.close();
}
}Neo4j 与 Python 集成
1. 使用 Neo4j Python Driver
依赖安装
bash
pip install neo4j基本用法
python
from neo4j import GraphDatabase
# 连接到 Neo4j
driver = GraphDatabase.driver("bolt://localhost:7687", auth=('neo4j', 'password'))
# 执行查询
def get_persons():
with driver.session() as session:
result = session.run("MATCH (p:Person) RETURN p.name AS name")
return [record["name"] for record in result]
# 调用函数
print(get_persons())
# 关闭连接
driver.close()事务处理
python
def create_person(name, age):
with driver.session() as session:
session.execute_write(
lambda tx: tx.run(
"CREATE (p:Person {name: $name, age: $age})",
name=name, age=age
)
)
# 调用函数
create_person("John", 30)Neo4j 与 JavaScript 集成
1. 使用 Neo4j JavaScript Driver
依赖安装
bash
npm install neo4j-driver基本用法
javascript
const neo4j = require('neo4j-driver');
// 连接到 Neo4j
const driver = neo4j.driver('bolt://localhost:7687',
neo4j.auth.basic('neo4j', 'password'));
// 执行查询
async function getPersons() {
const session = driver.session();
try {
const result = await session.run(
'MATCH (p:Person) RETURN p.name AS name'
);
return result.records.map(record => record.get('name'));
} finally {
await session.close();
}
}
// 调用函数
getPersons().then(names => console.log(names));
// 关闭连接
driver.close();事务处理
javascript
async function createPerson(name, age) {
const session = driver.session();
try {
await session.executeWrite(async tx => {
await tx.run(
'CREATE (p:Person {name: $name, age: $age})',
{ name, age }
);
});
} finally {
await session.close();
}
}
// 调用函数
createPerson('John', 30);Neo4j 与其他语言集成
1. Ruby
ruby
# 安装依赖
gem install neo4j-driver
# 基本用法
require 'neo4j-driver'
driver = Neo4j::Driver.new('bolt://localhost:7687',
Neo4j::AuthTokens.basic('neo4j', 'password'))
session = driver.session
result = session.run('MATCH (p:Person) RETURN p.name AS name')
result.each do |record|
puts record['name']
endsession.close
driver.close2. .NET
csharp
// 安装依赖
// Install-Package Neo4j.Driver
// 基本用法
using Neo4j.Driver;
class Program {
static void Main() {
using var driver = GraphDatabase.Driver(
"bolt://localhost:7687",
AuthTokens.Basic("neo4j", "password")
);
using var session = driver.Session();
var result = session.Run("MATCH (p:Person) RETURN p.name AS name");
foreach (var record in result) {
Console.WriteLine(record["name"].As<string>());
}
}
}3. PHP
php
// 安装依赖
// composer require neo4j/neo4j-php-client
// 基本用法
use Neo4j\Client\ClientBuilder;
$client = ClientBuilder::create()
->withDriver('bolt', 'bolt://neo4j:password@localhost:7687')
->build();
$result = $client->run('MATCH (p:Person) RETURN p.name AS name');
foreach ($result as $record) {
echo $record->get('name') . "\n";
}最佳实践
1. 连接管理
- 使用连接池
- 适当关闭连接
- 处理连接异常
2. 查询优化
- 使用参数化查询
- 避免使用字符串拼接
- 优化查询语句
3. 错误处理
- 捕获并处理异常
- 实现重试机制
- 记录错误日志
4. 性能考虑
- 使用批量操作
- 合理使用索引
- 监控查询性能
示例:完整的 Java 应用
java
import org.neo4j.driver.*;
import java.util.ArrayList;
import java.util.List;
public class Neo4jPersonService {
private final Driver driver;
public Neo4jPersonService(String uri, String username, String password) {
this.driver = GraphDatabase.driver(uri, AuthTokens.basic(username, password));
}
public void createPerson(String name, int age) {
try (Session session = driver.session()) {
session.executeWrite(tx -> {
tx.run(
"CREATE (p:Person {name: $name, age: $age})",
Values.parameters("name", name, "age", age)
);
return null;
});
}
}
public List<String> getPersons() {
try (Session session = driver.session()) {
return session.executeRead(tx -> {
Result result = tx.run("MATCH (p:Person) RETURN p.name AS name");
List<String> names = new ArrayList<>();
while (result.hasNext()) {
names.add(result.next().get("name").asString());
}
return names;
});
}
}
public void close() {
driver.close();
}
public static void main(String[] args) {
Neo4jPersonService service = new Neo4jPersonService(
"bolt://localhost:7687", "neo4j", "password"
);
// 创建人员
service.createPerson("John", 30);
service.createPerson("Alice", 28);
// 获取人员列表
List<String> persons = service.getPersons();
System.out.println("Persons: " + persons);
// 关闭连接
service.close();
}
}小结
Neo4j 提供了多种编程语言的驱动,使得开发者可以在不同的技术栈中使用 Neo4j。通过本文的介绍,您应该掌握了如何在 Java、Python、JavaScript 等语言中集成 Neo4j。在实际应用中,需要根据具体的技术栈和需求,选择合适的驱动和集成方式。
在接下来的章节中,我们将介绍应用架构设计,这是构建基于 Neo4j 的应用系统的重要环节。