1添加pom文件依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
2.添加配置文件Neo4jConfig
package com.govindex.web.core.config;
import org.neo4j.ogm.session.SessionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @Author: xxx
* @Date: 2021/6/2 09:29
* @Description:
*/
@Configuration
@EnableNeo4jRepositories(basePackages = "com.govindex.main.mapper.node")// 开启Neo4jRepositories的支持
@EntityScan(basePackages = "com.govindex.main.domain.node")// 开启实体类扫描
@EnableTransactionManagement // 开启事务
public class Neo4jConfig {
@Value("${spring.data.neo4j.uri}")
private String uri;
@Value("${spring.data.neo4j.username}")
private String userName;
@Value("${spring.data.neo4j.password}")
private String password;
@Bean
public SessionFactory sessionFactory() {
// with domain entity base package(s)
return new SessionFactory(configuration(),"com.govindex.main.domain.node");
}
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
.uri(uri).credentials(userName, password).build();
return configuration;
}
@Bean
public Neo4jTransactionManager transactionManager() {
return new Neo4jTransactionManager(sessionFactory());
}
}
3.在yml文件中添加配置 *注意端口号7687( 重点)
#####################################neo4j配置##################################
data:
neo4j:
uri: bolt://192.168.2.79:7687
username: neo4j
password: neo4j
4.编写测试类
- controller
package com.govindex.web.controller.neo4j;
import com.govindex.main.domain.node.NodePerson;
import com.govindex.main.domain.node.RelationshipActedIn;
import com.govindex.main.service.INeo4jService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Author: yanziyu
* @Date: 2021/6/1 15:33
* @Description:
*/
@Api(tags = {"Neo4jController"})
@RestController
@RequestMapping("/neo4j")
public class Neo4jController {
@Autowired
private INeo4jService neo4jService;
@GetMapping("getPersonByName")
@ApiOperation(value = "根据名字获取某个人", notes = "根据名字获取某个人")
public List<NodePerson> getPersonByName(@RequestParam String name){
List<NodePerson> list=neo4jService.getPersonByName(name);
return list;
}
@GetMapping("getActedIn")
@ApiOperation(value = "查询所有ACTED_IN关系", notes = "获取ACTED_IN关系")
public List<RelationshipActedIn> getActedIn(){
List<RelationshipActedIn> list=neo4jService.getActedIn();
return list;
}
@GetMapping("getActedInByPerson")
@ApiOperation(value = "查询某个人ACTED_IN关系", notes = "查询某个人ACTED_IN关系")
public List<RelationshipActedIn> getActedInByPerson(@RequestParam String name){
List<RelationshipActedIn> list=neo4jService.getActedInByPerson(name);
return list;
}
@GetMapping("getPersonActedInByPerson")
@ApiOperation(value = "查看与某人合作的演员", notes = "查看与某人合作的演员")
public List<NodePerson> getPersonActedInByPerson(@RequestParam String name){
List<NodePerson> list=neo4jService.getPersonActedInByPerson(name);
return list;
}
}
- service
package com.govindex.main.service;
import com.govindex.main.domain.node.NodePerson;
import com.govindex.main.domain.node.RelationshipActedIn;
import java.util.List;
/**
* @Author: yanziyu
* @Date: 2021/6/1 16:10
* @Description:
*/
public interface INeo4jService {
List<RelationshipActedIn> getActedIn();
List<RelationshipActedIn> getActedInByPerson(String name);
List<NodePerson> getPersonByName(String name);
List<NodePerson> getPersonActedInByPerson(String name);
}
- serviceImpl
package com.govindex.main.service.impl;
import com.govindex.main.domain.node.NodePerson;
import com.govindex.main.domain.node.RelationshipActedIn;
import com.govindex.main.mapper.node.PersonRepository;
import com.govindex.main.mapper.node.RelationshipActedInRepository;
import com.govindex.main.service.INeo4jService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: yanziyu
* @Date: 2021/6/1 16:10
* @Description:
*/
@Service
public class Neo4jServiceImpl implements INeo4jService {
@Autowired
private RelationshipActedInRepository relationshipActedInRepository;
@Autowired
private PersonRepository personRepository;
@Override
public List<RelationshipActedIn> getActedIn() {
List<RelationshipActedIn> list=relationshipActedInRepository.getActedIn();
return list;
}
@Override
public List<RelationshipActedIn> getActedInByPerson(String name) {
List<RelationshipActedIn> list=relationshipActedInRepository.getActedInByPerson(name);
return list;
}
@Override
public List<NodePerson> getPersonByName(String name) {
List<NodePerson> list=personRepository.getPersonByName(name);
return list;
}
@Override
public List<NodePerson> getPersonActedInByPerson(String name) {
List<NodePerson> list=personRepository.getPersonActedInByPerson(name);
return list;
}
}
- RelationshipActedInRepository
package com.govindex.main.mapper.node;
import com.govindex.main.domain.node.RelationshipActedIn;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: xxx
* @Date: 2021/6/1 16:13
* @Description:
*/
@Repository
public interface RelationshipActedInRepository extends Neo4jRepository<RelationshipActedIn,Long> {
@Query("MATCH p=()-[r:ACTED_IN]->() RETURN p")
List<RelationshipActedIn> getActedIn();
@Query("MATCH r=(p:Person {name: {name}})-[:ACTED_IN]->(m) RETURN r")
List<RelationshipActedIn> getActedInByPerson(@Param("name") String name);
}
- PersonRepository
package com.govindex.main.mapper.node;
import com.govindex.main.domain.node.NodePerson;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
* @Author: xxx
* @Date: 2021/6/2 14:43
* @Description:
*/
public interface PersonRepository extends Neo4jRepository {
@Query("MATCH (p {name:{name}}) RETURN p")
List<NodePerson> getPersonByName(@Param("name") String name);
@Query("MATCH (tom:Person {name:{name}})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors")
List<NodePerson> getPersonActedInByPerson(@Param("name")String name);
}
- NodeMovie
package com.govindex.main.domain.node;
import lombok.Data;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;
/**
* @Author: xxx
* @Date: 2021/6/1 16:05
* @Description:
*/
@NodeEntity(label = "Movie")
@Data
public class NodeMovie {
@Id
@GeneratedValue
private Long id;
@Property(name = "title")
private String title;
@Property(name = "tagline")
private String tagline;
@Property(name = "released")
private Integer released;
}
- NodePerson
package com.govindex.main.domain.node;
import lombok.Builder;
import lombok.Data;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;
/**
* @Author: xxx
* @Date: 2021/6/2 11:24
* @Description:
*/
@NodeEntity(label = "Person")
@Data
@Builder
public class NodePerson {
@Id
@GeneratedValue
private Long id;
@Property(name = "name")
private String name;
@Property(name = "born")
private Integer born;
}
- RelationshipActedIn
package com.govindex.main.domain.node;
import lombok.Data;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;
/**
* @Author: yanziyu
* @Date: 2021/6/1 16:07
* @Description:
*/
@RelationshipEntity(type = "ACTED_IN")
@Data
public class RelationshipActedIn {
@Id
@GeneratedValue
private Long id;
@StartNode
private NodePerson from;
@EndNode
private NodeMovie to;
}
最后可以启动项目进行测试