1. 程式人生 > >Springboot整合Neo4j驅動模式開發

Springboot整合Neo4j驅動模式開發

     在學習Neo4j的時候網上找了很多資料也參考了很多大牛的部落格,感覺這方面的資料實在太少了有的部落格只是隻言片語表達的很不清晰因此走了很多彎路。查找了很多關於Springboot整合Neo4j的資料大部分都是基於springdata來做的,這方面看似很簡單但是如果執行插入操作就會很慢 影響插入效率。雖然他有@query標籤可以書寫cypher語句但是無法做到拼接組裝cypher,無奈之下只有重構,改成Neo4j的驅動模式開發,具體操作如下:

   1:首先建立一個簡單的Springboot專案

2:在pom.xml中匯入Neo4j的相關聯的Maven座標

<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-ogm-bolt-driver</artifactId> <version>2.1.3</version>
</dependency>

3:配置檔案中配置行相應的資訊

這個是http訪問的配置 我的專案裡有兩個模式http模式和驅動模式

#neo4j 資料庫配置
spring:
  data:
    neo4j:
      uri: http://192.168.1.108:7474
      username: neo4j
      password: 123456
#Neo4j驅動模式配置
blotUri: bolt://192.168.1.108:7687

4:在程式中配置驅動模式資訊

public class Neo4jV2Application {

    @Value("${blotUri}"
) private String uri; @Value("${spring.data.neo4j.username}") private String username; @Value("${spring.data.neo4j.password}") private String password; public static void main(String[] args) { SpringApplication.run(Neo4jV2Application.class, args); } /** * 圖資料庫驅動模式 * * @return */ @Bean public Driver neo4jDriver() { return GraphDatabase.driver(uri, AuthTokens.basic(username,password)); }

5:注入例項訪問Neo4j圖資料庫

@Resource
private Driver driver;
public void getWbswryxxMessage(ConsumerRecord record) {

    Wbswryxx wbswryxx = JSON.parseObject(record.value().toString(), Wbswryxx.class);
    if (wbswryxx != null) {
        Session session = null;
Transaction tx = null;
        try {
            if (wbswryxx.getZjhm() != null) {
                Map map = IdCardUtil.VerifyIdcardAndFullIDCard(wbswryxx.getZjhm());
String idcard = (String)map.get("idcard");
                if ((Boolean) map.get("idcardIsOk")) {

                    Map params = new HashMap<>();
String detailAddress=null;
                    if (wbswryxx.getYycsmc() != null) {
                        StringBuffer sb = new StringBuffer();
                        if (wbswryxx.getYycsxzqh() != null) {
                            sb.append(wbswryxx.getYycsxzqh());
}
                        if (wbswryxx.getYycsdz() != null) {
                            sb.append(wbswryxx.getYycsdz());
}

                        sb.append(wbswryxx.getYycsmc());
detailAddress = sb.toString();
}


                    StringBuffer sbCypher = new StringBuffer();
idcard = IdCardUtil.getFullIDCard(idcard);
params.put("idcard", idcard);
sbCypher.append("Merge(a:Persion{idcard:{idcard}})");
                    if (wbswryxx.getYycsmc() != null) {
                        params.put("detailAddress", detailAddress);
sbCypher.append(" Merge(b:InternetBar{detailAddress:{detailAddress}})").append("Merge (a)-[r:PersionToInternetBar{swsj:{beginTime},xwsj:{endTime}}]->(b)");
}

                    if (wbswryxx.getSwkssjDate() != null) {

                        params.put("beginTime", wbswryxx.getSwkssjDate().getTime());
} else {
                        params.put("beginTime", 0);
}
                    if (wbswryxx.getXwsjDate() != null) {

                        params.put("endTime", wbswryxx.getXwsjDate().getTime());
} else {
                        params.put("endTime", 0);
}
                    params.put("persionName", wbswryxx.getSwryxm());
params.put("persionSex", wbswryxx.getXb());
String birthday = idcard.substring(6, 14);
                    if(IdCardUtil.VerifyBirthday(birthday)){

                        params.put("persionBirthday", Integer.parseInt(birthday));
}else {
                        params.put("persionBirthday", Integer.parseInt("0"));
}
                    sbCypher.append("on create set a.name={persionName},a.sex={persionSex},a.birthday={persionBirthday}");
                    if (wbswryxx.getYycsmc() != null) {

                        params.put("InternetBarName", wbswryxx.getYycsmc());
sbCypher.append(",b.name={InternetBarName}");
                        if (wbswryxx.getYycsdz() != null) {
                            params.put("InternetBarAddress", wbswryxx.getYycsdz());
sbCypher.append(",b.address={InternetBarAddress}");
}
                        if (wbswryxx.getYycsxzqh() != null) {
                            params.put("InternetBarQH", wbswryxx.getYycsxzqh());
sbCypher.append(",b.administrativeDivision={InternetBarQH} ");
}
                    }

                    String cypher = sbCypher.toString();
session = driver.session();
tx = session.beginTransaction();
tx.run(cypher, params);
tx.success();
}

            }


        } catch (Exception e) {
            logger.error("網咖資訊表插入資料報錯具體資訊如下 " + record.toString());
logger.error("異常資訊為: " + e.getMessage());
} finally {
            if (null != tx) {
                tx.close();
}
            if (null != session) {
                session.close();
}

        }
    }
}

6:通過驅動模式進行查詢操作  轉換成實體物件的時候用到了fastJson進行轉換

@Resource
private Driver neo4j;
@Override
public Neo4jResoult getPersionsByImportPersionCase(Long hour, String prevNumber, String name, Neo4jResoult
        neo4jResoult) {
Session session = null;
Transaction tx = null;
    try {
        session = neo4j.session();
tx = session.beginTransaction();
//查詢出案件結點
Map params = new HashMap();
params.put("name", name);
StatementResult result1 = tx.run(" match(a:ImportPersionCase{name:{name}}) return  a", params);
        int indexImportPersionCase = 0;
        while (result1.hasNext()) {
            org.neo4j.driver.v1.types.Node node = result1.next().get("a").asNode();
Map<String, Object> map = node.asMap();
String mapString = JSONObject.toJSONString(map);
ImportPersionCase importPersionCase = JSONObject.parseObject(mapString, ImportPersionCase.class);

        }

        tx.success();
} catch (Exception e) {
        e.printStackTrace();
} finally {

        if (null != tx) {
            tx.close();
}
        if (null != session) {
            session.close();
}

    }


    return new Neo4jResoult();
}
歡迎評論轉載 轉載請註明出處 https://blog.csdn.net/zhanaolu4821/article/details/80940598

相關推薦

Springboot整合Neo4j驅動模式開發

     在學習Neo4j的時候網上找了很多資料也參考了很多大牛的部落格,感覺這方面的資料實在太少了有的部落格只是隻言片語表達的很不清晰因此走了很多彎路。查找了很多關於Springboot整合Neo4j的資料大部分都是基於springdata來做的,這方面看似很簡單但是如果執

SpringBoot整合JmsTemplate(佇列模式和主題模式)(xml和JavaConfig配置實現)

1.匯入jar包: <!--jmsTemplate--> <dependency> <groupId>org.springframework.boot</groupId>

springboot整合neo4j

剛開始按網上部落格搭建 spring boot 和 neo4j一直報sessionFactory找不到,直到下載了spring-data-neo4j的例項demo對比才搭建成功,而且使用者名稱是neo4j,不是建立一個數據庫時的名字,搞了幾個小時終於搞成功了。以後還是多看官方

Springboot整合MongoDB的Docker開發,其它應用也類似

# 1 前言 `Docker`是容器開發的事實標準,而`Springboot`是`Java`微服務常用框架,二者必然是會走到一起的。本文將講解如何開發`Springboot`專案,把它做成`Docker`映象,並執行起來。 # 2 把Springboot打包成Docker映象 `Springboot

springboot整合mybatis(SSM開發環境搭建)

add bug fin () 3.0 config autoconf tro mysql 0.項目結構: 1.application.properties中配置整合mybatis的配置文件、mybatis掃描別名的基本包與數據源 server.po

SpringBoot從入門到放棄》之第(八)篇——SpringBoot整合Mybatis(大型專案開發技術首選)

一千個讀者有一千個哈姆雷特。 你們的專案中,傾向於把資料庫的語句寫在Java類裡,還是使用Mybatis框架呢? 相對來說,做一些複雜的大專案,用第三方開源的Mybatis會比較好。把資料庫操作語句抽取出來,寫在xml檔案,方便管理。 個人比較傾向於使用Mybatis,還有Mybat

SpringBoot整合RabbitMQ之Spring事件驅動模型

實戰背景:在進入RabbitMQ各大技術知識點之前,我們先來談談跟事件驅動息息相關的ApplicationEvent、ApplicationListener以及ApplicationEventPublisher這三大元件,點選進去看其原始碼可以發現裡面使用的CachingConnectionFa

SSM整合開發實戰-poi匯入匯出excel-mvc三層模式開發體驗(福利:內附完整視訊教程)

    前面幾篇部落格雖然簡單的介紹了基於SSM的框架實現POI匯入匯出的介紹,但是也就只是“簡單的介紹”而已,而且沒有物盡其用。即整合出來的SSM其實還可以做其他很多的事情,閒暇之餘我又基於SSM開發了“產品資訊”的“增加 刪除 修改 更新”功能,目的是為了體會體會目前企業

Springboot整合web開發

一,整合 Servlet1,通過註解掃描完成 Servlet 元件的註冊1.1 編寫 servlet 1 /** 2 * 3 * springboot整合servlet方式一 4 * @author java 5 *<servlet> 6 * <serv

springboot整合redisson分散式鎖(叢集模式)

1.maven引入redisson <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</arti

Springboot整合文件開發工具Swagger《SpringBoot學習七》

1. 為什麼要引用Swagger? 我們在之前的開發中大部分都是前後的分離,前端人員不知道要呼叫說明介面,但是後臺人員又不想寫介面文件,介面文件好麻煩,不知道有沒有同學寫過,特別麻煩,反正我不想寫,我在想如果有一個工具能在程式碼開發的時候就生成介面文件該多好,於是Swagger就解決

SpringBoot整合Netty開發一個基於WebSocket的聊天室

前言 基於SpringBoot,藉助Netty控制長連結,使用WebSocket協議做一個實時的聊天室。 專案效果 專案統一登入路徑: http://localhost:8080/chat/netty 使用者名稱隨機生成,離線呼叫非同步方法,資料寫操作,登入顯示歷史聊天

springboot整合影象資料庫Neo4j

百度百科:     Neo4j是一個高效能的,NOSQL圖形資料庫,它將結構化資料儲存在網路上而不是表中。它是一個 嵌入式的、基於 磁碟的、具備完全的事務特性的Java持久化引擎,但是它將結構化資料儲存在網路(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高效能的圖引擎,該引擎具

springboot整合redisson分散式鎖(redis叢集模式

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/qsssyyw/article/details/81562868 1.maven引入redisson         &l

(九) RabbitMQ實戰教程(面向Java開發人員)之SpringBoot整合RabbitMQ

SpringBoot整合RabbitMQ 使用SpringBoot整合RabbitMQ非常簡單,它極大程度的簡化了開發成本,使用SpringBoot整合RabbitMQ需匯入如下依賴 <parent> <groupId>o

JavaEE開發SpringBoot整合MyBatis以及Thymeleaf模板引擎

上篇部落格我們聊了《》,從上篇部落格的內容我們不難看出SpringBoot的便捷。本篇部落格我們繼續在上篇部落格的基礎上來看一下SpringBoot是如何引入和使用MyBatis和Thymeleaf的。在之前的部落格中我們提到過Hibernate,今天部落格所引入的Mybatis所扮演的角色與Hibernat

Springboot整合Thymeleaf開發測試

第一步:在Maven中引入Thymeleaf的依賴,加入以下依賴配置即可: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

Springboot 整合Websocket 註解開發之第一步瀏覽器和伺服器建立連線(解決了建立連線時404錯誤!!!!)

1、建立一個springboot專案 勾選web和websocket選項      建立完成後build.gradle檔案如下,主要是依賴得新增上(另外說明以下compile('org.springframework.boot:spring-boot-starter-w

springboot整合mybatis註解開發,thymeleaf的簡單使用

1、前言 之前玩過使用xml配置檔案整合mybatis,這次為了整合thymeleaf模板,選用簡單的註解完成資料庫的查詢。整合工具無非是引入依賴,新增配置完成此相關功能。玩過之後,記錄一下學習的過程,以備後續使用。 2、依賴引入 使用springboot開發,建議裝上springboo

springBoot整合redisCluster(redis叢集)模式

最近準備弄一個springBoot電商秒殺的demo專案,在搭建後臺框架時,非關係型資料庫準備整合redis,之前用的是單機版,考慮到是電商專案,後面用jmeter做壓力測試效果可能不好,於是想試試redisCluster叢集模式,看看併發qps變化效果,在網上看了很多部落格