java连接neo4j(使用spring data neo4j)
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)相关推荐
- 使用Spring Data Neo4j进行领域建模
大家好,威利在这里. 上次我告诉您,我正在使用Neo4j和Spring Data Neo4j构建Skybase CMDB,我很高兴收到很多对此的积极反馈. 我展示了一些代码,但没有那么多. 在本文中, ...
- Spring认证中国教育管理中心-Spring Data Neo4j教程一
原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器.请通过您的依赖管 ...
- Spring认证中国教育管理中心-Spring Data Neo4j教程三
原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心) 6.2.处理和提供唯一 ID 6.2.1.使用内部 Neo4j id 为您的域类提供 ...
- Spring Data Neo4j
问题 使用响应式编程方式来访问Neo4j,这里假设已经准备好Neo4j服务器了. Spring Initializr https://start.spring.io/ 在这个界面初始化工程: appl ...
- 通过Spring Data Neo4J操作您的图形数据库
在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...
- 最新Kafka教程(包含kafka部署与基本操作、java连接kafka、spring连接kafka以及使用springboot)
最新Kafka教程(包含kafka部署与基本操作.java连接kafka.spring连接kafka以及使用springboot) 欢迎转载,转载请注明网址:https://blog.csdn.net ...
- java 整合solr_SpringBoot整合Spring Data Solr
此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 org.spri ...
- java localdate mysql_mysql – 带有Java 8 LocalDateTime的Spring Data JPA
我最近几个月一直在使用Spring Data JPA和MYSQL,这是一次非常成功和顺畅的体验.在那里我使用java 8 LocalDateTime来存储日期时间字段,JPA自动将这些字段映射到mys ...
- mongodb数据库java接口,MongoDB —— 使用Spring Data MongoDB操作数据库
我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/docs/2. ...
最新文章
- pytorch tensorboard
- SET IDENTITY_INSERT [Table] [ON|OFF]
- WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理【01】
- rxjs里scan operator的执行研究
- Metro风格的Java组合框(JMetro)–重新介绍
- C++语言之类class
- android jni framework,Android Framework层的JNI机制(二)
- 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
- Python使用Mysql官方驱动(取出dict类型的数据)
- tomcat版本升级
- html作业word,Word实验作业——个人简历.doc
- Linux:CentOS 7 解压 7zip 压缩的文件
- 小程序直传阿里云OSS 踩坑
- 25日—你看蓝蓝的天
- 梅森质数(2^n - 1是质数,则n是质数)的证明
- HDU 2037 今年暑假不AC
- 频繁gc是什么意思_一次解决jvm GC过于频繁的经历
- ERROR: No matching distribution found for XXXXX 国内的镜像源来加速网络
- 人力资源管理的毕业论文选题推荐?
- 滤波器,滤波器的种类,作用,原理