当前位置:   article > 正文

java 整合 neo4j 5.9.0简单使用_java整合neo4j

java整合neo4j

由于查到的视频资料都是老版本的neo4j,新版本中并没有之前的那些注解。所以这里简单写几个自学的例子。

大家看下面这个实体类

package com.example.neo4jtest.entity;

import com.example.neo4jtest.convert.MyConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.data.neo4j.core.convert.ConvertWith;
import org.springframework.data.neo4j.core.schema.*;

import java.util.*;

@EqualsAndHashCode(callSuper = true)
@Data
@Node(labels = {"Person"})
public class Person extends BaseNode{

    @Property(name = "pid")
    private Long pid;
 
    @Property(name = "name")
    private String name;
 
    @Property(name = "biography")
    private String biography;

    @Property(name = "birth")
    //方式1:@DateString(format = "yyyy-MM-dd")
    //方式2:@ConvertWith
    @ConvertWith(converter = MyConverter.class)
    private Date birth;

    @Property(name = "birthplace")
    private String birthplace;

    @Property(name = "death")
    private String death;

    @Relationship(type = "test")
    private List<Person> personList;

    @Relationship(type = "test",direction = Relationship.Direction.OUTGOING)
    private Set<SomeRelation> relationSet = new HashSet<>();

//    @CompositeProperty(converter = MyConverter2.class)
//    private Map<String, Address> address;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

变化1:
@NodeEntity()注解变成了@Node注解。并且它可以有多个labels
变化2:
删除了@RelationshipEntity注解,变成了@Relationship,type是关系名称,比如

 @Query("match (n:Person{name:$from}),(m:Person{name:$to}) create (n)-[:测试关系{relation:$relationName}]->(m)")
  • 1

这一段中的 【测试关系】 就是type。
这个注解目前有两种用法:
方式1:关注与当前节点有关系的对象,那么就是

@Relationship(type = "test")
private List<Person> personList;
  • 1
  • 2

使用示例:

	/**
     * 查询 拥有test关系的 名称为name的Person所有节点
     *
     * @return
     */
    @Query("match p=(:Person{name:$name})-[r:test] ->() return p")
    Person queryRelationForPersonByName(@Param("name") String name);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
方式2:关注关系+关系对象

	@Relationship(type = "test",direction = Relationship.Direction.OUTGOING)
    private Set<SomeRelation> relationSet = new HashSet<>();
  • 1
  • 2

使用示例:

@RelationshipProperties
public class SomeRelation {

    @RelationshipId
    private Long id;

    private Integer num;

    @TargetNode
    private Person targetPerson;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述
@ConvertWith(converter = MyConverter.class)注解:
自定义转换方式。比如String转Date,或者String转Object(某个自定义实体对象)
示例代码如下:

/**
 * @Author ztc
 * @Description 自定义转换器  实体中属性为Date
 * @Date 2023/7/28 16:13
 */
public class MyConverter implements Neo4jPersistentPropertyConverter<Date> {


    @Override
    public Value write(Date source) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(source);
        return Values.value(format);
    }

    @Override
    public Date read(Value source) {
        String dateString = source.asString();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return sdf.parse(dateString);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

都是简单的东西,只是希望和我一样不会的人少走点弯路。蟹蟹。

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

闽ICP备14008679号