当前位置:   article > 正文

Neo4j+Mysql+java实现基本功能(一)_neo4j java

neo4j java

Neo4j+Mysql+java实现基本功能(一) -- 连接neo4j

写在前面

这篇文章主要为基础配置,后续代码及功能查看后续文章。
默认neo4j已完成安装,且运行成功了,如果需要可以查看他人博客:点击查看安装教程
注意它里面 有其它java的JDK没有其它JDK的区别
基础配置及环境信息:
1、meysql:5.7
2、neo4j:4.4.5社区版
3、idea + springBoot + myBatis
4、java:JDK1.8 + JDK11
5、windows10

框架搭建

此时默认已配置并写好了MySql。后续仅为连接neo4j

  1. 给出一个文件包 ,保存所有需要用到的neo4j代码;
    在这里插入图片描述 1.1、说明:所有neo4j代码都在neo4j文件夹下
    config:自测时所需配置文件
    controller:Controller
    entry:实体对象
    repository:sql层,类似与dao
    service:接口层

  2. 导包(此处仅neo4j包),以maven导入neo4j4.4.5为例:
    仅用maven导包时间会比较长,可以先编写后续代码
    注意:导入完成后spring-boot-starter-data-neo4j包的driver可能会报错,这是驱动不匹配的原因,后续第二个包就是引用对应的驱动,引入成功后不用管前一个包的报错信息

 		<!-- neo4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.neo4j.driver</groupId>
            <artifactId>neo4j-java-driver</artifactId>
            <version>4.4.5</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 配置Swagger:
    此处使用同一个目录层级,或swagger自动扫描到了就不用配置,我这是无法扫描到多包下的Controller,所以重写了匹配方式,SwaggerConfig.java 完整代码如下:
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfig {

	// 定义分隔符,配置Swagger多包
	private static final String splitor = ";";

	/**
	 * 是否开启swagger,生产环境一般关闭
	 */
	@Value("${swagger.enabled}")
	private boolean enabled;

	@Bean
	public Docket CreatRestApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				// 详细定制
				.apiInfo(apiInfo())
				.select()
				// 指定当前包路径,这里就添加了两个包,注意方法变成了basePackage,中间加上成员变量splitor
				.apis(basePackage("com.xxxxxx.web"+splitor+"com.xxxxxx.neo4j.controller"))
				// 扫描所有 .apis(RequestHandlerSelectors.any())
				.paths(PathSelectors.any())
				.build();
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("项目API接口").description("接口列表")
				.version("1.0").build();

	}

	/**
	 * 重写basePackage方法,使能够实现多包访问,复制贴上去
	 * @param basePackage 多包字符串,用 ";"分隔
	 * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
	 */
	public static Predicate<RequestHandler> basePackage(final String basePackage) {
		//获取下面两个包中所有类(扫描)
		return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
	}

	/**
	 * 新增处理,分割包,并合并扫描
	 * @param basePackage
	 * @return
	 */
	private static Function<Class<?>, Boolean> handlerPackage(final String basePackage)     {
		//循环判断,是否是包含包路径
		return input -> {
			// 循环判断匹配
			for (String strPackage : basePackage.split(splitor)) {
				if (input.getPackage().getName().startsWith(strPackage)) {
					return true;
				}
			}
			return false;
		};
	}

	private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
		return Optional.fromNullable(input.getClass().getEnclosingClass());
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

实现自测代码

  1. Neo4jConfig.java:放置到neo4j.config目录下
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Driver;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.Session;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Neo4jConfig {

    @Bean
    public Driver neo4jDriver() {
        return GraphDatabase.driver("neo4j://localhost:7687", AuthTokens.basic("neo4j","123456"));
    }

    @Bean
    public Session neo4jSession() {
        return neo4jDriver().session();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

GraphDatabase.driver:配置驱动
neo4j://localhost:7687:进入neo4j后可以看到:
在这里插入图片描述

AuthTokens.basic(“neo4j”,“123456”):账号、密码

  1. 测试接口
    ExampleNeo4jService.java:放到neo4j.service下
import org.springframework.stereotype.Service;

@Service
public interface ExampleNeo4jService {

    void executeNeo4jQuery() ;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
ExampleNeo4jServiceImpl.java: 放到neo4j.service.impl下
  • 1

import com.xxxxxx.neo4j.service.ExampleNeo4jService;
import org.neo4j.driver.*;
import org.neo4j.driver.types.Node;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class ExampleNeo4jServiceImpl implements ExampleNeo4jService {

    private static final Logger logger = LoggerFactory.getLogger(ExampleNeo4jServiceImpl.class);

    @Autowired
    private Session neo4jSession;

    public void executeNeo4jQuery() {
        String query = "MATCH (n:separation) RETURN n LIMIT 25";
        neo4jSession.readTransaction(tx -> {
            Result result = tx.run(query);
            while (result.hasNext()) {
                Record record = result.next();
                Node node = record.get("n").asNode();
                logger.info("Node name: {}", node.get("separation_name").asString());
            }
            return null;
        });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
说明(neo4j标签里面要有数据):
MATCH (n:separation):查询separation标签下的数据,命名为 ‘n’,类似与sql的 select * form separation as n , 注意大小写
RETURN n LIMIT 25:返回已查询到的n,限制25个
record.get(“n”).asNode();获取返回的n
只要有数据就说明连接成功

测试方式

直接触发就好,不论是junit 还是 Controller 都行,下面我用的是junit
test.java:放在 xxx.src.test.java.impl.test.java

import com.xxxxxx.DrawingApplication;
import com.xxxxxx.neo4j.service.ExampleNeo4jService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = XXXApplication.class)
public class test {

    @Resource
    private ExampleNeo4jService exampleNeo4jService;

    @Test
    public void testAddStation2() {
        exampleNeo4jService.executeNeo4jQuery();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

其它连接

  1. 安装配置neo4j:点击跳转

  2. neo4j 实体对象增删查询: 还没写

  3. neo4j 实体及实体关系和对应关系对象查询: 还没写
    3.1.实体对象关系查询改写:还没研究出来

  4. sql及neo4j联动: 还没写

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/790312
推荐阅读
相关标签
  

闽ICP备14008679号