Spring Boot中引入Neo4j图形数据库

创建节点(node),查找节点,为了好的展示效果,对关系(relation)的处理后续再说。

1、Neo4j配置

pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>

application.properties

spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123456

Neo4jConfig.java

import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;

@Configuration
@EnableNeo4jRepositories(basePackages="com.test.demo.neo4j")
//上述配置如果不起作用,可以主启动类配置@ComponentScan("com.test.demo.neo4j")
public class Neo4jConfig {
}

2、业务模拟

NeoPerson.java

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;

@NodeEntity(label = "Person")
public class NeoPerson {
	/**
	 * Neo4j会分配ID
	 */
	@Id 
	@GeneratedValue 
	private Long id;    
    /**
     * 属性
     */
	@Property(name = "name")
    private String name;
    @Property(name = "age")
    private Long age;
    @Property(name = "born")
    private Long born;

    get,set...	
}

PersonRepository.java

@Repository
public interface PersonRepository extends CrudRepository<NeoPerson, Long> {
    @Query("MATCH (n:Person) RETURN n ")
    List<NeoPerson> getUserNodeList();
    
    /**
     * spring-data-neo4j 支持方法命名约定查询 findBy{Coder的属性名}
     * @param name
     * @return
     */
    NeoPerson findByName(@Param("name") String name);

    @Query("create (n:Person{name:{name},age:{age},born:{born}}) RETURN n ")
    List<NeoPerson> addUserNode(@Param("name") String name, @Param("age")Long age,@Param("born") Long born);
}

Neo4jService.java

@Service
public class Neo4jService {
    @Autowired
    private PersonRepository personRepository;

    public List<NeoPerson> addUser(NeoPerson userNode){
        return personRepository.addUserNode(userNode.getName(),userNode.getAge(),userNode.getBorn());
    }
    
    public List<NeoPerson> findAllUser(){
        return personRepository.getUserNodeList();
    }
    
    public NeoPerson findByName(String name) {
    	return personRepository.findByName(name);
    }
}

Neo4jController.java

@RestController
@RequestMapping("/neo")
public class Neo4jController {
	@Autowired
	// 自动从spring容器中加载personService
	private Neo4jService personService;

	@RequestMapping("/findAllUser")
	public List<NeoPerson> findAllUser() {
		return this.personService.findAllUser();
	}

	@RequestMapping("/findone")
	public NeoPerson findByName(String name) {
		return this.personService.findByName(name);
	}

	@RequestMapping("/add")
	public List<NeoPerson> addUsesr(NeoPerson user) {
		return this.personService.addUser(user);
	}

}

运行
1、增加用户:浏览器中访问http://cos6743:8081/neo/add?name=JavaNeo&age=33&born=1998
返回结果:[{“name”:“JavaNeo”,“age”:33,“born”:1998}]
2、查看用户:浏览器中访问http://cos6743:8081/neo/findAllUser
返回结果:[{“born”:null,“name”:“Yang Tom”,“age”:35},{“born”:null,“name”:“Lilly Wski”,“age”:34},{“born”:1978,“name”:“Emil Eifrem”,“age”:null}]

3、客户端查看

match
参考:https://spring.io/projects/spring-data-neo4j

猜你喜欢

转载自blog.csdn.net/weixin_44153121/article/details/85712614