精华 Neo4j使用 java api 嵌入式开发模式 创建用户自定义函数
发布于 6 年前 作者 pangguoming 3877 次浏览 来自 分享

用户自定义函数可以用于在cypher语句中调用

第一步:创建Java Maven项目

pom.xml 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.pangguoming.neo4j</groupId>
  <artifactId>Neo4j-procedure-example</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- 指明打包为jar文件 -->
  <packaging>jar</packaging>
  <name>Neo4j Procedure Template</name>
  <description>pangguoming created</description>
  
   <dependencies>
 <!-- neo4j的依赖包-->
  <dependency>
   <groupId>org.neo4j</groupId>
   <artifactId>neo4j</artifactId>
   <version>3.4.0</version>
   <scope>provided</scope> <!-- 注意! :必须 指明不需要把此依赖中的jar打包进去 -->
  </dependency>  
 </dependencies>
  
 <!--  指明将本项目打包,并配置打包 -->
<build>
<plugins>
  <plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
  <!-- Neo4j 过程需要  Java 8 -->
  <source>1.8</source>
  <target>1.8</target>
</configuration>
  </plugin>
  <plugin>
<!-- 生成jar文件-->
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
  <execution>
<phase>package</phase>
<goals>
  <goal>shade</goal>
</goals>
  </execution>
</executions>
  </plugin>
</plugins>
  </build>
</project>

第二步: 创建Java类

使用org.neo4j.procedure.UserFunction对我们要创建的用户自定义函数的java方法进行注释

package com.pangguoming.neo4j;

import java.util.List;

import org.neo4j.procedure.Description;
import org.neo4j.procedure.Name;
import org.neo4j.procedure.UserFunction;

/**
 * 将字符串数组 用 指定的字符串联起来,形成一个字符串
 * 用法1
 * RETURN com.pangguoming.neo4j.join(['A','quick','brown','fox'],'-') as sentence
 * 
 * 用法2
 * match (n:Person)
 *with collect(n.name) as namearry
 *return com.pangguoming.neo4j.join(namearry,'-') as sentence
 */
public class Join
{
@UserFunction
@Description("com.pangguoming.neo4j.join(['s1','s2',...], delimiter) - 庞国明创建 普通用户自定义函数.")
public String join(
@Name("strings") List<String> strings,
@Name(value = "delimiter", defaultValue = ",") String delimiter) {
if (strings == null || delimiter == null) {
return null;
}
return String.join(delimiter, strings);
}
}

第三步,将java项目 使用Maven命令打包成jar文件

使用Maven命令: mvn clean package 在java项目的target文件夹下将生成jar文件,将此jar文件复制进Neo4j安装目录的plugin文件夹内,重启数据库

第四步,OK我们应该可以使用cypher调用此函数了

使用cypher命令 CALL dbms.functions() 查看到我们创建的 用户自定义函数:com.pangguoming.neo4j.join()

image.png

在cypher中的用法如下

用法1

  RETURN com.pangguoming.neo4j.join(['A','quick','brown','fox'],'-') as sentence

用法2

  match (n:Person)
 with collect(n.name) as namearry
 return com.pangguoming.neo4j.join(namearry,'-') as sentence
3 回复

这么太费劲了吧 测试和 开发不能同步

@saber0419 这其实就是做 插件开发,可以通过日志查看错误的

回到顶部