【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
码云地址:https://gitee.com/mdxl/blog.git
提前安装好neo4j,使用Springboot2.1.5版本
1、依赖添加
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency>
2、配置文件
server.port=8084 #neo4j spring.data.neo4j.uri=bolt://localhost:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=76521
3、配置类
import org.neo4j.driver.v1.AuthTokens; import org.neo4j.driver.v1.Driver; import org.neo4j.driver.v1.GraphDatabase; import org.neo4j.driver.v1.Session; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; @Configuration @EnableNeo4jRepositories(basePackages = "com.springboot.neo4j.repository") public class Neo4jConfig { @Value("${spring.data.neo4j.uri}") private String url; @Value("${spring.data.neo4j.username}") private String username; @Value("${spring.data.neo4j.password}") private String password; @Bean(name = "session") public Session neo4jSession() { Driver driver = GraphDatabase.driver(url, AuthTokens.basic(username, password)); return driver.session(); } }
4、实体类
弄一个人物关系图谱,需要的实体类三个
@Getter @NodeEntity("ParentNode") @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) @ToString public class ParentNode { private @Id @GeneratedValue Long id; private @Property(name = "name") String name; private @Relationship(type = "RelationEdge") Set<RelationNode> sets = new HashSet<>(); public ParentNode(String name){ this.name = name; } public void addRelation(SonNode sonNode, String name){ RelationNode relationNode = new RelationNode(this,name,sonNode); sets.add(relationNode); sonNode.getSets().add(relationNode); } }
@RelationshipEntity(type = "RelationEdge") @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) @Getter public class RelationNode { private @Id @GeneratedValue Long id; private @StartNode ParentNode parentNode; // 关系名 private String name; private @EndNode SonNode sonNode; RelationNode(ParentNode parentNode, String name, SonNode sonNode){ this.parentNode = parentNode; this.name = name; this.sonNode = sonNode; } }
@Getter @NodeEntity("SonNode") @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) public class SonNode { private @Id @GeneratedValue Long id; private @Property(name = "name") String name; private @Relationship(type = "RelationEdge", direction = "INCOMING") Set<RelationNode> sets = new HashSet<>(); public SonNode(String name){ this.name = name; } }
5、Repository层
public interface ParentReporitory extends Neo4jRepository<ParentNode,Long> { }
6、Controller层
@RestController @Slf4j public class Neo4JController { @Autowired ParentReporitory parentReporitory; @GetMapping(value = "/test1") public void test1(){ SonNode sonNode1 = new SonNode("孩子柳依依"); SonNode sonNode2 = new SonNode("孩子柳风"); ParentNode parentNode = new ParentNode("青年:柳大叔"); parentNode.addRelation(sonNode1,"女儿"); parentNode.addRelation(sonNode2,"儿子"); parentReporitory.save(parentNode); } @GetMapping(value = "/test2") public void test2(){ Iterable<ParentNode> parentNodes = parentReporitory.findAll(); Iterator<ParentNode> iterator = parentNodes.iterator(); while (iterator.hasNext()){ ParentNode parentNode = iterator.next(); Set<RelationNode> relationNodeSet = parentNode.getSets(); for (RelationNode relationNode : relationNodeSet){ log.info("id:"+parentNode.getId()+" name:"+parentNode.getName() +" 关系:"+relationNode.getName() +"子节点:"+relationNode.getSonNode().getName()); } } } }
7、测试
先执行test1接口,在执行test2接口,结果如图:
测试成功,然后我们使用D3.js可以实现前端页面的展示,这个我没做。
来源:oschina
链接:https://my.oschina.net/mdxlcj/blog/3152755