【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
提前安装好neo4j,使用Springboot2.1.5版本
1、依赖添加
org.projectlombok lombok true org.springframework.boot spring-boot-starter-data-neo4j
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") Setsets = 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") Setsets = new HashSet<>(); public SonNode(String name){ this.name = name; } }
5、Repository层
public interface ParentReporitory extends Neo4jRepository{ }
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(){ IterableparentNodes = parentReporitory.findAll(); Iterator iterator = parentNodes.iterator(); while (iterator.hasNext()){ ParentNode parentNode = iterator.next(); Set 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可以实现前端页面的展示,这个我没做。
文章来源: www.oschina.net,作者:木九天,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/mdxlcj/blog/3152755
评论 (0)
登录后可评论,请 登录 或 注册
评论您没有权限执行当前操作