springboot 整合spring jpa neo4j

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;
}

最后可以启动项目进行测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值