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

 

首先介绍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项目,添加如下的依赖

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j</artifactId>
            <version>3.2.9</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-embedded-driver</artifactId>
            <version>${neo4j-ogm.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-bolt-driver</artifactId>
            <version>${neo4j-ogm.version}</version>
        </dependency>
    </dependencies>

配置springboot的yml配置文件

spring:
  data:
    neo4j:
      uri: bolt://你的地址:7687
      username: 你的账户
      password: 你的密码

四、试着插入一个节点

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

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

@NodeEntity//必须要加这个注解
public class FangjiWithLinked {//方剂节点
    @Id
    @GeneratedValue
    private Long id;//每个bean都必须添加这个属性
    private String fangjiName;//方剂名称

    @JsonIgnoreProperties("fangjiWithLinked")
    @Relationship(type = "containes", direction = Relationship.INCOMING)//这里的type是自己定义的
    private List<YaowuWithLinked> yaowuWithLinkeds;//与这个方剂节点相连的药物节点

    public FangjiWithLinked() {//记得添加空构造器
    }

    public List<YaowuWithLinked> getYaowuWithLinkeds() {
        return yaowuWithLinkeds;
    }

    public FangjiWithLinked(String fangjiName) {
        this.fangjiName = fangjiName;
    }

    public String getFangjiName() {
        return fangjiName;
    }

    public void setFangjiName(String fangjiName) {
        this.fangjiName = fangjiName;
    }

    public void addYaowuWithLinked(YaowuWithLinked... yaowu) {//快速添加药物节点的方法
        if (this.yaowuWithLinkeds == null) {
            this.yaowuWithLinkeds = new LinkedList<>();
        }
        this.yaowuWithLinkeds.addAll(Arrays.asList(yaowu));
    }
}
@NodeEntity
public class YaowuWithLinked {
    @Id
    @GeneratedValue
    private Long id;
    private String name;

    public YaowuWithLinked() {
    }

    public YaowuWithLinked(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

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

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

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

@RunWith(SpringRunner.class)
@SpringBootTest
public class KnowledgeGraphApplicationTests {

    @Autowired
    private NodeDao nodeDao;

    @Test
    public void contextLoads() {
    }

    @Test
    public void testInsertNewNode() {
        FangjiWithLinked test = new FangjiWithLinked("四君子汤");
        YaowuWithLinked yaowu1 = new YaowuWithLinked("人参");
        YaowuWithLinked yaowu2 = new YaowuWithLinked("白术");
        YaowuWithLinked yaowu3 = new YaowuWithLinked("茯苓");
        YaowuWithLinked yaowu4 = new YaowuWithLinked("甘草");
        test.addYaowuWithLinked(yaowu1,yaowu2,yaowu3,yaowu4);
        nodeDao.save(test);
    }
}

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值