1. Spring Data Neo4j概述

认识Spring-Data-Neo4j之前,需要先对OGM有一个了解

OGM即对象图映射(Object Graph Mapper ,简称ORM ),基于OGM可以将neo4j中的图模型快速转换成java中的对象。

下面给出Spring Data Neo4j的定义

Spring Data Neo4j 简称SDN,是一个对象-图形映射(OGM)框架,是为了简化开发者的工作而创建的,它的目的是通过处理所有底层工作和从Neo4j读域实体并写回去所必须的映射逻辑来提高效率

2. 构建Spring Data Neo4j项目

2.1 创建项目

如果使用的是Neo4j的 4.0以上版本,JDK需要选择11或者以上。

构建项目是选择spring或者直接maven都可以

下面在pom.xml中添加:

<!-- springboot项目必备 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>
<profiles><profile><id>local</id><properties><spring.profiles.active>local</spring.profiles.active><docker.image.prefix>industrygraphbrowse</docker.image.prefix></properties><activation><!-- 设置默认激活这个配置 --><activeByDefault>true</activeByDefault></activation></profile>
</profiles><dependencies><!-- springboot项目必备 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</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><version>1.18.20</version></dependency><!-- springboot项目必备 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--neo4j主要用到这个配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId></dependency><!-- 该项目集成了两种数据库(mysql和neo4j)使用jpa进行事务区分 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 扫描路径,版本为2.21b不然的话在服务器上 neo4j mapper不生效 --><dependency><groupId>io.github.lukehutch</groupId><artifactId>fast-classpath-scanner</artifactId><version>2.21</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>27.0.1-jre</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!--集成Mybatis必备(这里的mybatis是为mysql准备的,neo4j使用spring data封装)--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></dependency></dependencies>

2.2 application.yml

logging:level:com.abcft.industrygraphbrowse.service: infofile:name: "logs/service.log"server:port: 18071tomcat.uri-encoding: UTF-8spring:application:name: industrygraphbrowseprofiles:active: "@spring.profiles.active@"mvc:async:request-timeout: 200000data:neo4j:uri: bolt://47.100.117.207:7687username: neo4jpassword: *********

2.3 实体类的构建

@NodeEntity注解可以声明改类是neo4j中一类节点抽象出的标签。@Id是自定定义的主键,neo4j会在你创建节点是自动为你生成一个id,如果你不想使用则通过@Id来表明自己使用的id,这么做是为了在持久层是使用,这里先跳过,下面会详细介绍他的作用。

我这里创建的是一个编程语言类,他对标neo4j中的编程语言标签:

如果你在实体类中给属性的命名与neo4j中标签属性的命名不同,则可以通过@Property注解来标识

/*** @author: hbw**/
@NodeEntity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProgramLanguage {/*** 指定id后,就可将spring-data-neo4j自带的增删改查默认的id改为自己定义的id*/@Idprivate String uuid;/*** 名称*/@Property(name = "name")private String name;/***简介*/private String introduction;/*** 图片文本文档*/private String textDocument;/*** 视频文档*/private String video;/*** 修改时间*/private Long modifyTime;}

2.4 持久层的构建

首先,就像平时使用springboot的持久层一样,先加上@Repository注解,然后让持久层接口集成两个接口,这两个接口都使用泛型接收两个类型,一个是我们创建的实体类ProgramLanguage,另一个是实体类中的id,也就是我们添加了注解的哪个属性的类型,spring data neo4j通过这两个类型可以为我们自动生成一些已经写好的cypher语句如save,delete,find等,大家自行查看。

/*** @author: hbw** dao层和我们mybatis很像,定义一个类继承 Neo4jRepository<T,E>,* 这里的E就是你的主键id的类型;Neo4jRepository<T,E> 这里默认有很多实现对neo4j的操作,* 比如save,delete,find等,大家自行查看。* 接口里我们定义了一个existsProgramLanguageById的方法注解是@Query;* 里边内容就涉及到Cypher语法,我们在后续文章中详细讲解,这里就只需要理解根据ppid查询ProgramLanguage的名字**/
@Repository
public interface ProgramLanguageRepository extends Neo4jRepository<ProgramLanguage,String>, CrudRepository<ProgramLanguage,String> {@Query("match(n:ProgramLanguage{ppid:{ppid}}) return n.name")public String existsProgramLanguageById(String ppid);}

2.5 Service层

首先是service的接口层,这里有两个方法,因为spring data neo4j已经帮我们实现了,所以不需要再持久层中写。

/*** @author: hbw**/
public interface ProgramLanguageService {/***  获取所有数据* @return*/@Transactional(transactionManager = "neo4jTransactionManager")public List<ProgramLanguage> getAll();/*** 添加节点* @param programLanguage*/@Transactional(transactionManager = "neo4jTransactionManager")public int saveProgramLanguage(ProgramLanguage programLanguage);}

然后是实现类,这里直接调用spring data neo4j帮我们实现的方法。

/*** @author: hbw**/
@Service
public class ProgramLanguageServiceImpl implements ProgramLanguageService {@AutowiredProgramLanguageRepository programLanguageRepository;/*** 获取所有数据* @return*/@Overridepublic List<ProgramLanguage> getAll() {Iterable<ProgramLanguage> allProgramLanguage = programLanguageRepository.findAll();List<ProgramLanguage> programLanguageList = Lists.newArrayList(allProgramLanguage);return programLanguageList;}/*** 添加节点* @param programLanguage*/@Overridepublic int saveProgramLanguage(ProgramLanguage programLanguage) {if(StringUtils.isEmpty(programLanguage.getUuid())){programLanguage.setUuid(UUID.randomUUID().toString());}ProgramLanguage save = programLanguageRepository.save(programLanguage);if (save != null){return 200;}else {return 404;}}
}

2.6 控制层:

最后是控制层的创建,这里的CommonResult是我自定义的结果集。你们可以直接返回

/*** @author: hbw**/
@RestController
@RequestMapping("programLanguage")
public class ProgramController {@AutowiredProgramLanguageService programLanguageService;@PostMapping("/getAll")public CommonResult getAll(){CommonResult commonResult;List<ProgramLanguage> programLanguageList = programLanguageService.getAll();if (programLanguageService.getAll() == null){commonResult = new CommonResult(404,"查询结果为空");}else {commonResult = new CommonResult(200,"查询成功",programLanguageService.getAll());}return commonResult;}@PostMapping("/saveProgramLanguage")public CommonResult saveProgramLanguage(@RequestBody ProgramLanguage programLanguage){CommonResult commonResult;if (programLanguageService.saveProgramLanguage(programLanguage) == 200){commonResult = new CommonResult(200,"添加成功");}else {commonResult = new CommonResult(404,"添加失败");}return commonResult;}}

2.7 测试

这里使用Postman对接口进行了测试

查看neo4j数据库(创建成功):

执行查询所有,查询成功:

java连接neo4j(使用spring data neo4j)相关推荐

  1. 使用Spring Data Neo4j进行领域建模

    大家好,威利在这里. 上次我告诉您,我正在使用Neo4j和Spring Data Neo4j构建Skybase CMDB,我很高兴收到很多对此的积极反馈. 我展示了一些代码,但没有那么多. 在本文中, ...

  2. Spring认证中国教育管理中心-Spring Data Neo4j教程一

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器.请通过您的依赖管 ...

  3. Spring认证中国教育管理中心-Spring Data Neo4j教程三

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心) 6.2.处理和提供唯一 ID 6.2.1.使用内部 Neo4j id 为您的域类提供 ...

  4. Spring Data Neo4j

    问题 使用响应式编程方式来访问Neo4j,这里假设已经准备好Neo4j服务器了. Spring Initializr https://start.spring.io/ 在这个界面初始化工程: appl ...

  5. 通过Spring Data Neo4J操作您的图形数据库

    在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...

  6. 最新Kafka教程(包含kafka部署与基本操作、java连接kafka、spring连接kafka以及使用springboot)

    最新Kafka教程(包含kafka部署与基本操作.java连接kafka.spring连接kafka以及使用springboot) 欢迎转载,转载请注明网址:https://blog.csdn.net ...

  7. java 整合solr_SpringBoot整合Spring Data Solr

    此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 org.spri ...

  8. java localdate mysql_mysql – 带有Java 8 LocalDateTime的Spring Data JPA

    我最近几个月一直在使用Spring Data JPA和MYSQL,这是一次非常成功和顺畅的体验.在那里我使用java 8 LocalDateTime来存储日期时间字段,JPA自动将这些字段映射到mys ...

  9. mongodb数据库java接口,MongoDB —— 使用Spring Data MongoDB操作数据库

    我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/docs/2. ...

最新文章

  1. pytorch tensorboard
  2. SET IDENTITY_INSERT [Table] [ON|OFF]
  3. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理【01】
  4. rxjs里scan operator的执行研究
  5. Metro风格的Java组合框(JMetro)–重新介绍
  6. C++语言之类class
  7. android jni framework,Android Framework层的JNI机制(二)
  8. 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
  9. Python使用Mysql官方驱动(取出dict类型的数据)
  10. tomcat版本升级
  11. html作业word,Word实验作业——个人简历.doc
  12. Linux:CentOS 7 解压 7zip 压缩的文件
  13. 小程序直传阿里云OSS 踩坑
  14. 25日—你看蓝蓝的天
  15. 梅森质数(2^n - 1是质数,则n是质数)的证明
  16. HDU 2037 今年暑假不AC
  17. 频繁gc是什么意思_一次解决jvm GC过于频繁的经历
  18. ERROR: No matching distribution found for XXXXX 国内的镜像源来加速网络
  19. 人力资源管理的毕业论文选题推荐?
  20. 滤波器,滤波器的种类,作用,原理

热门文章

  1. Windows10无法完成更新 正在撤销更改怎么解决转载
  2. win10无法开启适用于linux的windows的子系统,重启后一直撤销申请
  3. 根据业绩确定提成比例并计算提成
  4. php空间开启伪静态,php虚拟主机开启伪静态(虚拟主机伪静态规则配置)
  5. FristiLeaks_1.3#攻略
  6. ARFoundation入门1.0 什么是AR
  7. Pytorch官方文档英语翻译
  8. 交换机路由器的基本配置
  9. 怎么制作出好玩的头像?教你制作个性头像小技巧
  10. 数电6_1——时序逻辑电路概述(很久整理的,没有下文)