SpringBoot整合Neo4j(SpringBoot+Mybatis+Druid+Neo4j)


前面幾篇文章簡單的描述了Neo4j的安裝、配置及導數的內容,這篇就來寫下實際項目中如何整合應用Neo4j。下面要整合的是SpringBoot+Mybatis+Druid+Neo4j這樣的一個框架。廢話不多說,直接開始吧(這里我用的是2018.1.8版本的IntelliJ IDEA、jdk1.8)。

第一步創建一個SpringBoot的WebService項目

打開IDEA點擊Create New Project。

選擇Spring Initializr,再點擊Next下一步。

填寫好項目信息后點Next

選擇Web,勾選SpringWebServices,之后點擊Next

最后點擊Finish,初始的SpringBoot webservice項目就完成了

此后需要等待一小段時間讓它構建完成。

完成之后其目錄結構如上圖所示,java包下有SpringBoot的啟動類,resources下有個SpringBoot的application.propertis配置文件,而我喜歡用yml就把它改成了yml,這個視個人喜好而定。

下面可以先完善一下項目的包結構,我的包結構如下所示:

第二步:添加依賴包

需要手動添加的只有三個包,分別是Neo4j 驅動、mybatis還有druid連接池,完整POM如下:


    
    
   
   
           
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0 </modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot </groupId>
  7. <artifactId>spring-boot-starter-parent </artifactId>
  8. <version>2.2.7.RELEASE </version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.minant </groupId>
  12. <artifactId>mant </artifactId>
  13. <version>0.0.1-SNAPSHOT </version>
  14. <name>minant-service-neo4j </name>
  15. <description>springBoot+mybatis+druid+neo4j </description>
  16. <properties>
  17. <java.version>1.8 </java.version>
  18. </properties>
  19. <dependencies>
  20. <!--構建項目時添加的包-->
  21. <dependency>
  22. <groupId>org.springframework.boot </groupId>
  23. <artifactId>spring-boot-starter-web-services </artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot </groupId>
  27. <artifactId>spring-boot-starter-test </artifactId>
  28. <scope>test </scope>
  29. <exclusions>
  30. <exclusion>
  31. <groupId>org.junit.vintage </groupId>
  32. <artifactId>junit-vintage-engine </artifactId>
  33. </exclusion>
  34. </exclusions>
  35. </dependency>
  36. <!--手動添加-->
  37. <!--neo4j-jdbc-driver-->
  38. <dependency>
  39. <groupId>org.neo4j </groupId>
  40. <artifactId>neo4j-jdbc-driver </artifactId>
  41. <version>3.4.0 </version> </dependency>
  42. <!--mybatis-spring-boot-->
  43. <dependency>
  44. <groupId>org.mybatis.spring.boot </groupId>
  45. <artifactId>mybatis-spring-boot-starter </artifactId>
  46. <version>1.3.2 </version>
  47. </dependency>
  48. <!-- 連接池-->
  49. <dependency>
  50. <groupId>com.alibaba </groupId>
  51. <artifactId>druid-spring-boot-starter </artifactId>
  52. <version>1.1.10 </version>
  53. </dependency>
  54. </dependencies>
  55. <build>
  56. <plugins>
  57. <plugin>
  58. <groupId>org.springframework.boot </groupId>
  59. <artifactId>spring-boot-maven-plugin </artifactId>
  60. </plugin>
  61. </plugins>
  62. </build>
  63. </project>

第三步:yml配置

有服務端口、名稱、數據源連接池等,賦上yml文件:


    
    
   
   
           
  1. server:
  2. port: 8081
  3. servlet:
  4. context-path: /
  5. spring:
  6. application:
  7. name: service-neo4j
  8. http:
  9. encoding:
  10. charset: UTF-8
  11. enabled: true
  12. force: true
  13. datasource:
  14. type: com.alibaba.druid.pool.DruidDataSource
  15. driverClassName: org.neo4j.jdbc.bolt.BoltDriver
  16. url: jdbc:neo4j:bolt://localhost:7687
  17. username: neo4j
  18. password: root
  19. # 數據源其他配置
  20. initialSize: 5
  21. minIdle: 5
  22. maxActive: 20
  23. maxWait: 60000
  24. timeBetweenEvictionRunsMillis: 60000
  25. minEvictableIdleTimeMillis: 300000
  26. # validation-query: match (n) return id(n) limit 2
  27. testWhileIdle: false
  28. testOnBorrow: false
  29. testOnReturn: false
  30. poolPreparedStatements: true
  31. filters: stat,wall,log4j
  32. maxPoolPreparedStatementPerConnectionSize: 20
  33. useGlobalDataSourceStat: true
  34. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  35. mybatis:
  36. mapper-locations: classpath*:/mapper/*.xml
  37. config-location: classpath:mybatis-config.xml

第四步:編寫代碼

這里編寫代碼就與一般SMM項目的編寫大同小異了,只不過XML中的SQL要寫成查詢Neo4j用的Cypher語句就行了。如下:


    
    
   
   
           
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.minant.mant.mapper.MyNeo4jMapper">
  4. <select id="getAll" resultType="com.minant.mant.model.MovieInfoModel">
  5. MATCH (people:Movie)
  6. RETURN
  7. id(people) as id,
  8. people.title as title,
  9. people.tagline as tagline,
  10. people.released as released LIMIT 10
  11. </select>
  12. <insert id="addMovie" parameterType="com.minant.mant.form.MovieInfoForm">
  13. create(people:Movie{title:#{title},tagline:#{tagline},released:#{released}})
  14. </insert>
  15. <update id="updateMovie" parameterType="com.minant.mant.form.MovieInfoForm">
  16. match (people:Movie)
  17. where people.title = #{title}
  18. set people.tagline=#{tagline},people.released=#{released}
  19. </update>
  20. <delete id="delMovie" parameterType="com.minant.mant.form.MovieInfoForm">
  21. match (people:Movie)
  22. where people.title = #{title} delete people
  23. </delete>
  24. </mapper>

第五步:接口驗證

本DEMO中的測試數據為Neo4j Cypher學習中的 Movie Graph數據:

接口定義如下:


    
    
   
   
           
  1. package com.minant.mant.controller;
  2. import com.minant.mant.form.MovieInfoForm;
  3. import com.minant.mant.model.MovieInfoModel;
  4. import com.minant.mant.service.neo4j.Neo4jService;
  5. import org.springframework.beans.factory. annotation.Autowired;
  6. import org.springframework.web.bind. annotation.PostMapping;
  7. import org.springframework.web.bind. annotation.RequestBody;
  8. import org.springframework.web.bind. annotation.RequestMapping;
  9. import org.springframework.web.bind. annotation.RestController;
  10. import java.util.List;
  11. /**
  12. * @author : MinAnt
  13. * @ClassName : MyNeo4jController
  14. * @Description :
  15. * @date : 2020/5/14
  16. **/
  17. @RestController
  18. public class MyNeo4jController {
  19. @Autowired
  20. private Neo4jService neo4jService;
  21. /**
  22. * 查詢所有電影節點信息
  23. * */
  24. @RequestMapping("/getAll")
  25. public List<MovieInfoModel> getAll() {
  26. List<MovieInfoModel> models = neo4jService.getAll();
  27. return models;
  28. }
  29. /**
  30. * 新增電影節點
  31. * */
  32. @RequestMapping("/add")
  33. public int add(MovieInfoForm form) {
  34. form = new MovieInfoForm();
  35. form.setTitle( "MinAntMovie");
  36. form.setReleased( "2020");
  37. form.setTagline( "my test add");
  38. int i = neo4jService.addMovie(form);
  39. return i;
  40. }
  41. /**
  42. * 修改電影節點
  43. * */
  44. @RequestMapping("/update")
  45. public int update(MovieInfoForm form) {
  46. form = new MovieInfoForm();
  47. form.setTitle( "MinAntMovie");
  48. form.setReleased( "2050");
  49. form.setTagline( "my test update");
  50. int i = neo4jService.updateMovie(form);
  51. return i;
  52. }
  53. /**
  54. * 刪除電影節點
  55. * */
  56. @RequestMapping("/delMovie")
  57. public int delMovie(MovieInfoForm form) {
  58. form = new MovieInfoForm();
  59. form.setTitle( "MinAntMovie");
  60. int i = neo4jService.delMovie(form);
  61. return i;
  62. }
  63. }

調用接口結果如下:

至此項目整合完成!

 

源碼鏈接:https://github.com/AntMxs/MyNeo4j


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM