如何使用spring-boot-starter-data-neo4j执行LOAD CSV命令?
解决方案:Spring Data Neo4j 执行 LOAD CSV 及原生 Cypher 语句
1. 通过 Spring Data Neo4j 执行 LOAD CSV(原生 Cypher)
完全可以通过 Spring Data Neo4j 执行包含 LOAD CSV 的原生 Cypher 语句,以下是两种常用实现方式:
方式一:在 Repository 中使用 @Query 注解
直接在你的 Neo4jRepository 接口上添加带原生 Cypher 语句的 @Query 注解,示例代码如下:
import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.repository.query.Query; public interface EntityRepository extends Neo4jRepository<YourEntity, Long> { @Query(""" LOAD CSV WITH HEADERS FROM 'file:///your-data.csv' AS row CREATE (e:Entity {id: row.id, name: row.name}) """) void importDataFromCsv(); }
使用时只需注入该 Repository,调用 importDataFromCsv() 方法即可。注意:CSV 文件需放在 Neo4j 配置的导入目录下(默认是 neo4j/import),也可使用绝对路径或远程 URL。
方式二:通过 Neo4jTemplate 执行动态语句
如果需要灵活构造 Cypher 语句,可注入 Neo4jTemplate 来执行原生查询:
import org.springframework.data.neo4j.core.Neo4jTemplate; import org.springframework.stereotype.Service; @Service public class CsvImportService { private final Neo4jTemplate neo4jTemplate; public CsvImportService(Neo4jTemplate neo4jTemplate) { this.neo4jTemplate = neo4jTemplate; } public void runCsvImport() { String cypher = """ LOAD CSV WITH HEADERS FROM 'file:///your-data.csv' AS row MERGE (e:Entity {id: row.id}) SET e.name = row.name """; neo4jTemplate.query(cypher).run(); } }
2. 直接用 Java 原生驱动提交 LOAD CSV
若不想依赖 Spring Data,可直接使用 Neo4j Java 驱动执行语句:
Spring Boot 项目中若已引入 spring-boot-starter-data-neo4j,则驱动已包含,无需额外引入;否则需添加依赖:
<dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j-java-driver</artifactId> </dependency>
执行代码示例:
import org.neo4j.driver.AuthTokens; import org.neo4j.driver.Driver; import org.neo4j.driver.GraphDatabase; import org.neo4j.driver.Session; public class DirectCsvImporter { public static void main(String[] args) { String uri = "bolt://localhost:7687"; String user = "neo4j"; String password = "your-password"; try (Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password)); Session session = driver.session()) { String cypher = """ LOAD CSV WITH HEADERS FROM 'file:///your-data.csv' AS row CREATE (e:Entity {id: row.id, name: row.name}) """; session.run(cypher); System.out.println("CSV 导入完成"); } } }
注意事项
- 确保 Neo4j 配置允许本地文件导入:修改
neo4j.conf中的dbms.security.allow_csv_import_from_file_urls=true(生产环境默认可能禁用,按需开启)。 - 导入大文件时建议添加
USING PERIODIC COMMIT避免内存溢出,示例:
USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM 'file:///large-data.csv' AS row CREATE (e:Entity {id: row.id, name: row.name})
内容的提问来源于stack exchange,提问作者Hunter
相关产品推荐
相关产品推荐

