自己下载neo4j数据库后:
启动后,在springboot项目集成.
pom文件
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <groupId>com.bjsxt</groupId> <artifactId>shiro_01_demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--<dependency>--> <!--<groupId>org.neo4j.driver</groupId>--> <!--<artifactId>neo4j-java-driver-spring-boot-starter</artifactId>--> <!--<version>4.0.1.1</version>--> <!--</dependency>--> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-ogm-http-driver</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> application.yml中:
server: port: 18016 max-http-header-size: 8192 spring: application: name: spring-boot-neo4j neo4j: # neo4j配置 uri: bolt://127.0.0.1:7687 username: neo4j password: 123456
如果出现以下报错:
org.springframework.transaction.CannotCreateTransactionException: Could not open Neo4j Session for transaction; nested exception is org.neo4j.driver.v1.exceptions.AuthenticationException: Unsupported authentication token, scheme 'none' is only allowed when auth is disabled.
在启动类里面添加:
@Bean
public org.neo4j.ogm.config.Configuration getConfiguration() {
return new org.neo4j.ogm.config.Configuration.Builder().credentials("neo4j", "123456").uri("bolt://localhost:7687").build();
entity对象:
@Data //节点的属性 @NodeEntity(label="person") @NoArgsConstructor public class Person implements Serializable { /** * neo4j的id增长策略 */ @Id @GeneratedValue private Long id; @Property private String name; }
dao层:
/** * @Author:蔡情原 * @CreateTime: 2022/02/04 * @Description:需要继承Neo4j<节点实体,id> */ @Repository public interface PersonRepository extends Neo4jRepository<Person,Long> { /** * 根据name查询 * @param name * @return */ @Query("match (n:person{name:{name}}) return n LIMIT 1") Person queryPersonByName(@Param("name") String name); /** *查询当前节点的父节点 * @param pId * @return */ @Query("Match (p:person) -[*]->(s:person) where id(p)={0} return s") List<Person> findChildList(Long pId); }
service层:
/** * @Author: 蔡情原 * @CreateTime: 2022/02/04 * @Description: */ @org.springframework.stereotype.Service @Slf4j public class Neo4jServiceImpl implements Neo4jService { @Autowired private PersonRepository personRepository; @Autowired private PersonRelationRepository personRelationRepository; @Autowired private StarRelationRepository starRelationRepository; /** * 根据id查询节点 * * @return */ @Override public Person queryPerson() { Person person = personRepository.findById(4876L).get(); return person; } /** * 查询person标签的所有节点 * * @return */ @Override public List<Person> queryAllPerson() { Iterable<Person> lists = personRepository.findAll(); /* Iterator<Person> iterator = lists.iterator(); List<Person> ts = Utils.copyIterator(iterator);*/ //Iterable<Person>转换为List<Person> List<Person> persons = IterableUtils.toList(lists); return persons; } /** * 保存person标签里面的节点 */ @Override public void savePerson() { try { Person person = new Person(); person.setName("蔡情原"); personRepository.save(person); } catch (Exception e) { log.error("neo4J保存person失败:{}", e); } } /** * 根据姓名查询 * * @param person * @return * @throws Exception */ @Override public Person queryPersonByName(Person person) throws Exception { //Optional判空检验 Optional.ofNullable(person).orElseThrow(() -> new Exception("传入对象为空")); //根据名称/id查询 if (StringUtils.isNotEmpty(person.getName())) { return personRepository.queryPersonByName(person.getName()); } else { return personRepository.findChildList(person.getId()).get(0); } } /** * 创建关系 */ @Override public void createRelation() { personRelationRepository.createRelation("狮驼王", "brother", "蛟魔王"); } /** * 查询当前节点的父节点 * * @param parentNode * @return */ @Override public List<Person> queryParentNode(String parentNode) { return personRelationRepository.queryParentNode(parentNode); } /** * 创建所有的关系 * * @return */ @Override public List<StarRelation> createRelationship() { return starRelationRepository.createRelationship(); } }
controller层:
/** * @Author: 蔡情原 * @CreateTime: 2022/02/04 * @Description: */ @RestController public class Neo4jController { @Autowired private Neo4jService neo4jService; /** * 根据id查询person节点 * * @return */ @RequestMapping(value = "queryPersonById", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public Person queryPerson() { return neo4jService.queryPerson(); } /** * 查询标签为person的所有节点 * * @return */ @RequestMapping(value = "queryAllPerson", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public List<Person> queryAllPerson() { return neo4jService.queryAllPerson(); } /** * 保存节点 */ @RequestMapping(value = "savePerson", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public void savePerson() { neo4jService.savePerson(); } /** * 根据姓名或者id查询person节点 * * @param person * @return * @throws Exception */ @RequestMapping(value = "queryPersonByName", produces = "application/json;charset=UTF-8", method = RequestMethod.POST) public Person queryPersonByName(@RequestBody Person person) throws Exception { return neo4jService.queryPersonByName(person); } /** * 创建关系 */ @RequestMapping(value = "createRelation", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public void createRelation() { neo4jService.createRelation(); } /** * 查询当前节点的父节点 * * @param parentNode * @return */ @RequestMapping(value = "queryParentNode", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public List<Person> queryParentNode(@RequestParam String parentNode) { return neo4jService.queryParentNode(parentNode); } /** * 创建所有的关系 * * @return */ @RequestMapping(value = "createRelationship", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public List<StarRelation> createRelationship() { return neo4jService.createRelationship(); } }
postman测试结果: