neo4j图数据库入门(一)

一、neo4j数据库组织方式

neo4j是典型的图数据库,采用项目-图-节点以及关系的方式管理图数据;即:可 根据应用将对图的应用划分为多个项目,一个项目可以包含多张图,一张图可以包含多个节点,每个节点具有多个属性,节点间通过关系联系,每种关系均支持多属性设置,节点间关系具有方向,两个节点间可以具有多种关系;

二、编程访问neo4j的方式的

neo4j提供了多类型数据库访问接口,包含了:.net、java、java script 等多种编程语言的访问驱动,可参见网址:https://neo4j.com/developer/java/#_the_example_project 下载相应的开发语言驱动;熟悉spring 框架的开发可采用:

Spring Data Neo4j 框架;也提供了java api 驱动;spring data  Neo4j 不适合节点庞杂的图形应用场合,过大的节点规模将导致低下的数据访问效率,大节点规模图形最好采用java 原生API进行数据的操作和查询;

三、spring boot与neo4j的整合

1)pom.xml配置

spring提供了Spring Data Neo4j以实现对neo4j库的 查询和更新;pom.xml的配置如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-neo4j</artifactId>
   <version>5.0.6.RELEASE </version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.2.9</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-embedded-driver</artifactId>
<version>${neo4j-ogm.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-bolt-driver</artifactId>
<version>${neo4j-ogm.version}</version>
</dependency>
其中neo4j-ogm.version的版本为:3.1.0在pom.xml文件的属性中定义

2)代码结构

代码解构如图示意:


其中:Controller采用restful技术实习的控制器;service表示业务层,repositories表示持久层,domain表示数据模型;config主要实现对neo4j-ogm会话驱动的连接参数注入,因为不注入该连接参数,无法实现与neo4j的正常连接。

3)、代码示意:
a)主程序入口 单元代码:

@SpringBootApplication
@ComponentScan(basePackages = {"movies.spring.data.neo4j.controller", "movies.spring.data.neo4j.config","movies.spring.data.neo4j.services","movies.spring.data.neo4j.repositories"})
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
注意:需要将系统自动创建的各类bean的命名空间通过CompoentScan导入,因为是java的入门生,在最初尝试的时候就因为没有间配置类的命名空间导入,导致一直失败;
b)控制器代码,与一般的业务系统的控制器代码类似;此处省略

c)配置文件代码:

@Configuration
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableNeo4jRepositories(basePackages = "movies.spring.data.neo4j.repositories")
public class Neo4jConfig {

    @Value("${spring.data.neo4j.uri}")
    private String databaseUrl;

    @Value("${spring.data.neo4j.username}")
    private String userName;

    @Value("${spring.data.neo4j.password}")
    private String password;

    @Bean
    public SessionFactory getSessionFactory() {

        org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
                .uri(databaseUrl)
                .credentials(userName, password)
                .build();
        return new SessionFactory(configuration,"movies.spring.data.neo4j.domain");
    }
}

注意:关于neo4j的正确连接配置为:

spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123456

数据库连接 uri为:bolt://localhost  ,采用http://localhost:7474不能正常连接数据库;同时因为默认采用ogm.properties中的配置也不能正常连接数据库,所以读取application.properties中的配置后注入到SessionFactory中

d)持久层代码

@Repository
public interface MovieRepository extends Neo4jRepository<Movie, Long> {

    Movie findByTitle(@Param("title") String title);

    Collection<Movie> findByTitleLike(@Param("title") String title);

    @Query("MATCH (m:Movie)<-[r:ACTED_IN]-(a:Person) RETURN m,r,a LIMIT {limit}")
    Collection<Movie> graph(@Param("limit") int limit);
}

猜你喜欢

转载自blog.csdn.net/u012846041/article/details/79853147