1. 程式人生 > >電影網站增刪改查 spring boots/MVC/neo4j 原始碼分析-2 DATA 實體建模(noe4j)

電影網站增刪改查 spring boots/MVC/neo4j 原始碼分析-2 DATA 實體建模(noe4j)

模型設計部分:分為節點實體和關係實體

兩個節點實體 actor , movie , 一個關係實體   actor in movies (roles)

前提, NEO4J 必須配置 

1.neo4j依賴
spring-data-neo4j
jackson-jsog

2.config resources/ogm.properties

actor.java

package com.test.data.domain;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.voodoodyne.jackson.jsog.JSOGGenerator;
import 
org.neo4j.ogm.annotation.GraphId; import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.typeconversion.DateLong; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @JsonIdentityInfo(generator=JSOGGenerator.class)//防止查詢資料的時候引發遞迴效應 @NodeEntity //節點實體
public class Actor { @GraphId //節點唯一標識 , 系統自動生成 Long id; private String name; private int sex; @DateLong @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")//neo4j 沒有日期格式資料型別,用註解進行轉換 private Date born; public Actor() { } public Long getId() { return id; } public void setId
(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public Date getBorn() { return born; } public void setBorn(Date born) { this.born = born; } }

movie.java;

package com.test.data.domain;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.voodoodyne.jackson.jsog.JSOGGenerator;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.typeconversion.DateLong;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@JsonIdentityInfo(generator=JSOGGenerator.class)
@NodeEntity
public class Movie {
    @GraphId
Long id;
    private String name;
    private String photo;
@DateLong
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
@Relationship(type="扮演", direction = Relationship.INCOMING)
    List<Role> roles = new ArrayList<>();//關係列表,泛型 指只能存放所有角色的集合
public Role addRole(Actor actor, String name){ //增加關係的方法
Role role = new Role(actor,this,name);
        this.roles.add(role);
        return role;
}

    public Movie() { }

    public Long getId() {
        return id;
}

    public void setId(Long id) {
        this.id = id;
}

    public List<Role> getRoles() {
        return roles;
}

    public void setRoles(List<Role> roles) {
        this.roles = roles;
}

    public String getName() {
        return name;
}

    public void setName(String name) {
        this.name = name;
}

    public String getPhoto() {
        return photo;
}

    public void setPhoto(String photo) {
        this.photo = photo;
}

    public Date getCreateDate() {
        return createDate;
}

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
}
}

Role.java

package com.test.data.domain;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.voodoodyne.jackson.jsog.JSOGGenerator;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;
@JsonIdentityInfo(generator=JSOGGenerator.class)
@RelationshipEntity(type = "扮演")
public class Role {
    @GraphId
Long id;
String name;
@StartNode //開始節點
Actor actor;
@EndNode //結束節點
Movie movie;
    public Role() {  //空的建構函式
}

    public Role(Actor actor, Movie movie, String name) {//建構函式的過載
this.actor = actor;
        this.movie = movie;
        this.name = name;
}

    public Long getId() {
        return id;
}

    public void setId(Long id) {
        this.id = id;
}

    public String getName() {
        return name;
}

    public void setName(String name) {
        this.name = name;
}

    public Actor getActor() {
        return actor;
}

    public Movie getMovie() {
        return movie;
}

}

分頁程式碼粗略一看不懂,  結合前端再研究:

package com.test.data.service;
import org.neo4j.ogm.cypher.Filters;
import org.neo4j.ogm.cypher.query.Pagination;
import org.neo4j.ogm.cypher.query.SortOrder;
import org.neo4j.ogm.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@Service
//分頁 Pageable pageable, List<T> results 頁數設定和排序欄位設定
public class PagesService<T> {
    @Autowired
private Session session;
    public Page<T> findAll(Class<T> clazz, Pageable pageable, Filters filters){
        Collection data = this.session.loadAll(clazz, filters, convert(pageable.getSort()), new Pagination(pageable.getPageNumber(), pageable.getPageSize()), 1);
        return updatePage(pageable, new ArrayList(data));
}

    private Page<T> updatePage(Pageable pageable, List<T> results) {
        int pageSize = pageable.getPageSize();
        int pageOffset = pageable.getOffset();
        int total = pageOffset + results.size() + (results.size() == pageSize?pageSize:0);
        return new PageImpl(results, pageable, (long)total);
}

    private SortOrder convert(Sort sort) {
        SortOrder sortOrder = new SortOrder();
        if(sort != null) {
            Iterator var3 = sort.iterator();
            while(var3.hasNext()) {
                Sort.Order order = (Sort.Order)var3.next();
                if(order.isAscending()) {
                    sortOrder.add(new String[]{order.getProperty()});
} else {
                    sortOrder.add(SortOrder.Direction.DESC, new String[]{order.getProperty()});
}
            }
        }
        return sortOrder;
}
}

 

相關推薦

電影網站刪改 spring boots/MVC/neo4j 原始碼分析-2 DATA 實體建模(noe4j)

模型設計部分:分為節點實體和關係實體兩個節點實體 actor , movie , 一個關係實體   actor in movies (roles) 前提, NEO4J 必須配置  1.neo4j依賴 spring-data-neo4j jackson-jsog 2.con

電影網站刪改 spring boots/MVC/neo4j 原始碼分析-1 前提

前提: idea , maven 專案新增 分模組 各引用大的方面分兩個模組, data  M /webui  VC: pom.xml for data module  <?xml ver

電影網站刪改-5 spring boots/MVC/neo4j/thymeleaf 原始碼分析 查詢電影分頁

首先   熟悉webUI 下面的目錄, 包括 controller 和 view , VIEW 裡面的 static 靜態目錄包含 CSS 和JS 和圖片, templates 下面是根據模組功能劃

刪改Spring+MyBatis實戰版,給原老師一個交代

其實這次寫這個增刪改查,我的收穫很大,在同學的幫助下和老師的推動下,我也是學會了很多的技能點。 1.顯示資料 顯示資料對我而言可以說很好做,因為我以前增刪改查做了有N遍,但是我卻每次都是無功而返,半途而廢。 查詢為什麼簡單,因為查詢不需要傳入引數,sql語句不需要進行判斷,只需要把所有資料顯示出來就好了

Kotlin整合Spring Boot實現資料庫刪改(spring data jpa版)

接上次的kotlin整合spring boot的mybatis版本,這次分享的內容也很精彩,現在spring data jpa也慢慢流行起來了,因此學習kotlin的時候也順帶寫了spring data jpa版本的,下面就直接上程式碼分享給大家了 1 pom加入如下配置

redis刪改----Spring+redis

參考文章: java 檔案 package ******.redis; import org.springframework.context.ApplicationContext; imp

【java學習】spring mvc 公共dao的實現,定義基本的刪改

pri 代碼 部分 lec sse encoding del epo repos 接口類:    package com.blog.db.dao; import com.blog.util.Pagination; import java.util.Lis

第四十章:Spring MVC框架之傳統刪改06

傳統CRUD 列表頁面: 新增頁面: 編輯頁面: 刪除操作: 匯入SpringMVC jar包 commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEAS

SSM 實訓筆記 -12- 開源 Spring+Spring MVC+JDBC Template 刪改 前期專案(maven)

SSM 實訓筆記 -12- 開源 Spring+Spring MVC+JDBC Template 增刪改查 前期專案(maven) 實訓前期小專案,大佬勿笑 僱員資訊管理系統 2019-01-11 專案簡介: 內容: Spring + Spring MVC

Spring Mvc那點事---(12)Spring Mvc之mybatis使用註解進行刪改

       上一節我們演示了通過使用Mapper配置檔案進行資料的增刪改查,實際上還有另一種方法,mybatis為我們提供註解來操作資料庫,這樣我們就不要在mapper.xml中進行SQL語句配置,只需要在介面方法中使用mybatis註解進行操作,mybatis為我們提供

Spring MVC 實現刪改

一、核心原理 1. 用於傳送請求給伺服器: /home.htm 2. 請求被DispatchServlet攔截到 3. DispatchServlet通過HandleMapping檢查url有沒有對應的Controller, 如果有則呼叫Contro

Asp.Net MVC EF-DbFirst之刪改

生成 處的 message mod 更新 get請求 layout 失敗 inf 控制器及動作方法: using System; using System.Collections.Generic; using System.Linq; using System.Web;

Struts2+Spring+Hibernate實現員工管理刪改功能(一)之ssh框架整合

pri support scrip ext ack efault ring src 兩張 前言 轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html 本項目是我寫的一個練習,目的是回顧ssh框架的整合以及

ASP.NET MVC之Entity Framework刪改

打開 實體 ssd myba 基本 內容 mybatis 連接 mapping 一、EntityFramework簡介   ORM(Object-Relation-Mapping):對象關系映射,主要實現基於面向對象方式操作數據庫的各種方法,是一種框架技術。長期以來,C#O

spring boot 2.X 集成 Elasticsearch 5.x 實戰 刪改

springboot2.x Elasticsearch5.x 集成 實戰 增刪改查 其實這種博客網上一大片,為啥還要寫出來這篇博客?網上的例子都是基於elasticsearch2.x版本的,並不是5.x版本,而且還有好多是錯的,拿過來根本不能直接用來測試,還有就是spring-data沒有

spring boot(十五)spring boot+thymeleaf+jpa刪改示例

ali 遍歷 config link examples 技術分享 返回 stat 業務 快速上手 配置文件 pom包配置 pom包裏面添加jpa和thymeleaf的相關包引用 <dependency> <groupId>org.sprin

關於MVC工廠模式的刪改sql存儲過程

var http 添加 rec 接受 ring 變量 index ext 這裏MVC中用到了反射,工廠,泛型,接口 在搭建框架的時候,除了MVC的三層以外,還有泛型的接口層和工廠層 下面是dal層調用sql存儲過程,增刪改查,dal層繼承了接口層,實現了接口層裏面的方法

MyBatis-Spring(二)--SqlSessionTemplate實現刪改

允許 ref ack part basic pre 就是 path pda SqlSessionTemplate是個線稱安全的類,每運行一個SqlSessionTemplate時,它就會重新獲取一個新的SqlSession,所以每個方法都有一個獨立的SqlSession,這

4.6 基於Spring-Boot的Mysql+jpa的刪改學習記錄 > 我的程式猿之路:第三十六章

    1.專案結構       -JDK  1.8       -SpringBoot  2.0.6     &nbs

Spring Data jpa + extjs 實現簡單的刪改

公司最近的專案一部分是在使用MyBatis,還有一部分使用SpringJPA,jpa平時沒怎麼用過,今天閒來無事做個增刪改查的demo,記錄下來。 環境;jdk 1.8 編輯器: IDEA 資料庫:postgresql 首先貼上專案所需要的依賴 <?xml version=