当前位置:   article > 正文

Neo4j配合springboot与echarts进行方剂药物关系的可视化-1_echarts可视化neo4j

echarts可视化neo4j

 

首先介绍neo4j的安装和springdata Neo4j的基本操作

一、关于neo4j

neo4j是一个高性能的NOSQL图形数据库,打破了关系型数据库的束缚,应用前景十分广泛。

我们尝试通过neo4j构建中医方剂和药物关系图。

二、安装neo4j

我们可以通过docker安装neo4j

docker pull neo4j

创建 $HOME/neo4j/data 目录,然后通过这条命令运行neo4j,在此之前记得检查防火墙的端口开放情况

docker run     --publish=7474:7474 --publish=7687:7687     --volume=$HOME/neo4j/data:/data -d    neo4j

查看运行情况

docker ps

通过浏览器访问neo4j的控制面板,看到这个页面即为安装成功(默认密码是neo4j,登陆后需要重置密码)

三、创建项目

关于springdata neo4j,还可以参考spring的官方示例项目

https://github.com/neo4j-examples/movies-java-spring-data-neo4j

首先构建一个springboot项目,添加如下的依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>1.3.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-cache</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-data-jpa</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-data-neo4j</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>com.alibaba</groupId>
  25. <artifactId>druid-spring-boot-starter</artifactId>
  26. <version>1.1.9</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>mysql</groupId>
  30. <artifactId>mysql-connector-java</artifactId>
  31. <scope>runtime</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.projectlombok</groupId>
  35. <artifactId>lombok</artifactId>
  36. <optional>true</optional>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-test</artifactId>
  41. <scope>test</scope>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.neo4j</groupId>
  45. <artifactId>neo4j</artifactId>
  46. <version>3.2.9</version>
  47. <scope>runtime</scope>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.neo4j</groupId>
  51. <artifactId>neo4j-ogm-embedded-driver</artifactId>
  52. <version>${neo4j-ogm.version}</version>
  53. <scope>test</scope>
  54. </dependency>
  55. <dependency>
  56. <groupId>org.neo4j</groupId>
  57. <artifactId>neo4j-ogm-bolt-driver</artifactId>
  58. <version>${neo4j-ogm.version}</version>
  59. </dependency>
  60. </dependencies>

配置springboot的yml配置文件

  1. spring:
  2. data:
  3. neo4j:
  4. uri: bolt://你的地址:7687
  5. username: 你的账户
  6. password: 你的密码

四、试着插入一个节点

我们新建一个方剂bean和一个药物bean

这个方剂bean中有一个List<YaowuWithLinked>属性,用于指明哪些药物bean与这个方剂bean相连

  1. @NodeEntity//必须要加这个注解
  2. public class FangjiWithLinked {//方剂节点
  3. @Id
  4. @GeneratedValue
  5. private Long id;//每个bean都必须添加这个属性
  6. private String fangjiName;//方剂名称
  7. @JsonIgnoreProperties("fangjiWithLinked")
  8. @Relationship(type = "containes", direction = Relationship.INCOMING)//这里的type是自己定义的
  9. private List<YaowuWithLinked> yaowuWithLinkeds;//与这个方剂节点相连的药物节点
  10. public FangjiWithLinked() {//记得添加空构造器
  11. }
  12. public List<YaowuWithLinked> getYaowuWithLinkeds() {
  13. return yaowuWithLinkeds;
  14. }
  15. public FangjiWithLinked(String fangjiName) {
  16. this.fangjiName = fangjiName;
  17. }
  18. public String getFangjiName() {
  19. return fangjiName;
  20. }
  21. public void setFangjiName(String fangjiName) {
  22. this.fangjiName = fangjiName;
  23. }
  24. public void addYaowuWithLinked(YaowuWithLinked... yaowu) {//快速添加药物节点的方法
  25. if (this.yaowuWithLinkeds == null) {
  26. this.yaowuWithLinkeds = new LinkedList<>();
  27. }
  28. this.yaowuWithLinkeds.addAll(Arrays.asList(yaowu));
  29. }
  30. }
  1. @NodeEntity
  2. public class YaowuWithLinked {
  3. @Id
  4. @GeneratedValue
  5. private Long id;
  6. private String name;
  7. public YaowuWithLinked() {
  8. }
  9. public YaowuWithLinked(String name) {
  10. this.name = name;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. }

然后创建dao,继承Neo4jRepository,即可实现基础的CRUD操作(复杂的逻辑还需要手动编写接口方法)。

public interface NodeDao extends Neo4jRepository<FangjiWithLinked, Long> {}

我们在test类中,试着插入一个节点,看看能否成功

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class KnowledgeGraphApplicationTests {
  4. @Autowired
  5. private NodeDao nodeDao;
  6. @Test
  7. public void contextLoads() {
  8. }
  9. @Test
  10. public void testInsertNewNode() {
  11. FangjiWithLinked test = new FangjiWithLinked("四君子汤");
  12. YaowuWithLinked yaowu1 = new YaowuWithLinked("人参");
  13. YaowuWithLinked yaowu2 = new YaowuWithLinked("白术");
  14. YaowuWithLinked yaowu3 = new YaowuWithLinked("茯苓");
  15. YaowuWithLinked yaowu4 = new YaowuWithLinked("甘草");
  16. test.addYaowuWithLinked(yaowu1,yaowu2,yaowu3,yaowu4);
  17. nodeDao.save(test);
  18. }
  19. }

调用这个test方法,然后查看neo4j的控制台,可以看到,已经成功的创建了节点

接下来,我们开始考虑如何将这些节点展示到前端,并试着添加搜索逻辑

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/904239
推荐阅读
相关标签
  

闽ICP备14008679号