Skip to content

编程语言集成

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.close

2. .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 的应用系统的重要环节。