图数据库Neo4j

图数据库本身属于NoSql数据库中的一种,是基于数学中图论实现的一种数据库。不同于传统的关系型数据库将数据存在库表字段中,图数据库将数据和数据之间的关系存在节点和边中,在图数据库中这被称作“节点”和“关系”。没有了库表字段的概念,相当于是把数据存在了一张大宽表中。关系型数据库的一些特性如CRUD、处理事务的能力在图数据库中也都支持

  1. 关联的SpringBoot版本为
    org.springframework.boot    spring-boot-starter-parent    2.1.9.RELEASE    

2.对于图数据库,首先引入相关的依赖包

    org.springframework.boot    spring-boot-starter-data-neo4j    org.neo4j    neo4j-ogm-http-driver

3.创建相关的实体类

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.neo4j.ogm.annotation.GeneratedValue;import org.neo4j.ogm.annotation.Id;import org.neo4j.ogm.annotation.NodeEntity;import org.neo4j.ogm.annotation.Property;import java.io.Serializable;@Data@NoArgsConstructor@AllArgsConstructor@NodeEntity("Movie")public class Movie implements Serializable {    @Id    @GeneratedValue    private Long id;//类型必须要与持久层一致    @Property    private String title;    @Property    private String released;    public Movie(String title, String released) {        this.title = title;        this.released = released;    }}
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.neo4j.ogm.annotation.*;import java.io.Serializable;import java.util.HashSet;import java.util.Set;@Data@NoArgsConstructor@AllArgsConstructor@NodeEntity("Person")public class Person implements Serializable {    @Id    @GeneratedValue    private Long id;    @Property    private String name;    @Property    private String born;    public Person(String name, String born) {        this.name = name;        this.born = born;    }    @Relationship(type = "父类", direction = Relationship.OUTGOING)    public Set actors;    public void addactor(Movie movie) {        if (actors == null) {            actors = new HashSet<>();        }        actors.add(movie);    }    @Relationship(type = "子类", direction = Relationship.OUTGOING)    public Set directors;    public void adddirector(Movie movie) {        if (directors == null) {            directors = new HashSet<>();        }        directors.add(movie);    }}

4.为了保证当前SpringBoot允许进行多个数据库的连接,如果不进行配置数据的事物配置,会报错说找不到相关的事物的错误

import org.mybatis.spring.annotation.MapperScan;import org.neo4j.ogm.session.SessionFactory;import org.springframework.boot.autoconfigure.domain.EntityScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;@Configuration@EnableTransactionManagement@EnableNeo4jRepositories(basePackages = {"com.xxx.xxx.config.Repository"})@EntityScan(basePackages = {"com.xxx.xxx.xxx.xxx"})public class Neo4jConfig {//这个配置是必须的    @Bean("transactionManager")    @Primary    public DataSourceTransactionManager transactionManager(DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }    @Bean("neo4jTransactionManager")    public Neo4jTransactionManager neo4jTransactionManager(SessionFactory sessionFactory) {        return new Neo4jTransactionManager(sessionFactory);    }}

5.配置相关的持久层信息,自定义的方法必须规范,而且传入的参数必须与实体类一模一样,否则同样会报错

import com.south.wires.entity.nj.Movie;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;@Repositorypublic interface MovieRepository extends CrudRepository {    //传入的参数必须是实体中一模一样的名字    Movie findByTitle(String title);}
import com.south.wires.entity.nj.Person;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;@Repositorypublic interface PersonRepository extends CrudRepository {    Person findByName(String name);}
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章