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