Neo4jにアクセスする spring-data-neo4j 入門編 (I)
Spring-data-neo4j入門編
この記事では、spring-data-neo4jを使用してneo4jデータベースにアクセスする方法を、簡単なムービーとアクターの例で簡単に説明します。
グラフデータベースに関する理論や利用シーンは、グラフデータベースとリレーショナルデータベースの比較と同様に、この記事の範囲外です。人物と映画の関係には、俳優と監督があり、映画には俳優として複数の人物、監督として複数の監督が存在することがある。つまり、人物と映画の間には、ACTED _INとDIRECTEDの関係が存在する。グラフデータベースでは、1人の人物が複数の映画を指し示すことがあり、同じ映画を指し示す2本の線がそれぞれACTED_INとDIRECTEDの関係で存在することがある。
- neo4jデータベースのインストール
- Mavenプロジェクトにspring-data-neo4jと関連する依存関係を追加します。
- ドメインオブジェクトを書き込む
- Neo4jRepository インターフェースを継承する。
- サービスの実装
- コントローラでアクセスする
- スクリーンショットの実行
- 概要
1, neo4jデータベースのインストール
neo4jデータベースのインストール方法については、インターネット上にたくさん情報があるので、今回は割愛します。私はデフォルトのインストールを使用しています。アクセスアドレスはhttp://127.0.0.1:7474/browser/、データベースアクセスのプロトコルはbolt://localhostです。
2、javaプロジェクトの依存関係を追加します。
メインはspring-boot-starter-data-neo4jで、この依存関係を追加するには、以下を参照してください。
スプリングブートガイド
.
<?xml version="1.0" encoding="UTF-8"? >
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yq</groupId>
<artifactId>demo-data-neo4j</artifactId>
<version>0.1.0</version>
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.2.9</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-embedded-driver</artifactId>
<version>${neo4j-ogm.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-bolt-driver</artifactId>
<version>${neo4j-ogm.version}</version>
</dependency>
<! -- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
...
</project>
3、ドメインオブジェクトを書き込む
今回は、MovieとPersonの2つのオブジェクトがありますが、どちらも比較的単純なものです。コードは以下の通りです。なお、@NoArgsConstructorを追加する必要があります。
NoArgsConstructorは自動的に引数のないコンストラクタを作成し、spring-ogmはそれを使用します。NodeEntityは、これがneo4jデータベースのノードであることを示します。
//つまり、アクターはムービーを指します。
@Relationship(type = "DIRECTED", direction = Relationship.OUTGOING)
private List dMovies;
は、俳優から映画への関係があること、つまり、人が映画を指し示すことを示します。この関係には属性を追加していませんが、今後の例でどのような役割を果たすか、あるいは主監督か副監督かなど、拡張することが可能です。
@lombok.Data
@NoArgsConstructor
@NodeEntity
public class Movie{
@Id
@GeneratedValue
private Long id;
private String title;
private String category;
private int revenue;
public Movie (String title, String category, int revenue) {
this.title = title;
this.category = category;
this.revenue = revenue;
}
}
@lombok.Data
@NoArgsConstructor
@NodeEntity
public class Person{
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private int height;
public Person (String firstName, String lastName, int height) {
this.firstName = firstName;
this.lastName = lastName;
this.height = height;
}
@Relationship(type = "ACTED_IN", direction = Relationship.OUTGOING)
private List<Movie> aMovies;
// that is, actors point to movies
@Relationship(type = "DIRECTED", direction = Relationship.OUTGOING)
private List<Movie> dMovies;
//Entities handled by the OGM must have one empty public constructor to allow the library to construct the objects.
public void addActMovie(Movie movie) {
if (this.aMovies == null) {
this.aMovies = new ArrayList<>();
}
this.aMovies.add(movie);
}
public void addDirectMovie(Movie movie) {
if (this.dMovies == null) {
this.dMovies = new ArrayList<>();
}
this.dMovies.add(movie);
}
}
public interface MovieRepository extends Neo4jRepository<Movie, Long> {
Movie findByTitle(@Param("title") String title);
Collection<Movie> findByRevenueGreaterThan(int revenue);
}
4, Neo4jRepository インターフェイスを継承する。
Neo4jRepositoryは、ちょうどspring jpaのJpaRepositoryのようなもので、すでにsave, delete, findAll, findOne, pagingなど多くの機能を実装するのに役立っています。また、メソッド名とクエリ関係文字列に基づいて、自動的にAndやGT LTなどを構成することができます。
MovieRepositoryのfindByTitleメソッドは、自動的にタイトルでMovieを探す手助けをしてくれます。これは、MATCH (n:Movie) WHERE n.title = {title}と同等です。RETURN n
また、findByRevenueGreaterThan(int revenue); メソッドは、MATCH (n:Movie) WHERE n.revenue > {revenue} と同じ意味になります。RETURN n
@RestController
@RequestMapping("/movie")
public class MovieController {
@Autowired
MovieRepository movieRepository;
@GetMapping("/all")
public Iterable<Movie> findAll() {
return movieRepository.findAll();
}
@GetMapping("/findByReveueGT")
public Iterable<Movie> findByRevenueGT(@RequestParam Integer revenue) {
return movieRepository.findByRevenueGreaterThan(revenue);
}
}
PersonRepository と MovieRepository は類似しているので、ここでは紹介しません。 コード . スタートとフォークは自由に追加してください。
5, サービスの実装
一般的に言えば、単一のリポジトリは、オブジェクト自体のCRUDを実装して、我々はビジネスロジックを実現したい場合、我々はこのような俳優と追加する映画の関係を完了するように、サービスの中で、メソッドaddActor2Movieがあります完了する必要があります。このメソッドは、まずPersonRepositoryを呼び出して人が存在するかどうかを確認し、次にMovieRepositoryを呼び出して映画が存在するかどうかを確認し、両方が存在する場合は、人のメソッドaddActMovieを呼び出し、人オブジェクトを保存し、それ以外はエラーを報告しています。
6, コントローラーでアクセス
データを表示するためだけにコントローラを使用しています。
最初のコントローラであるPersonControllerには、初期化とデータの挿入を行うためのinitメソッドがあり、findAllやfindByfirstNameといった
2つ目のコントローラであるMovieControllerは、すべての映画を表示し、収益によって映画を照会します。
コード例
@SpringBootApplication
@EnableNeo4jRepositories
public class Application {
private final static Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
PersonController のコードは github で見ることができます。 コード . .
7、@EnableNeo4jRepositoriesアノテーションを追加します。
SpringBootApplicationでアノテーションされたクラスにEnableNeo4jRepositoriesを追加する必要があります。
spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=neo4j
8、スクリーンショットを実行する
実行する前に、application.propertiesを設定する必要があります。
spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=neo4j
最初のものは、データの初期化を完了し、likeNameによるクエリを実行しているところです。
2つ目はneo4jのデータです
映画「REVENUE」による3つ目のクエリ。
スクリーンショットを追加してください。データベースにムービーオブジェクトが既に存在するかどうかを確認し、http://127.0.0.1:8080/movie/all看看是否有数据。
概要
spring-data-neo4jを使ったneo4jデータベースへのアクセスは、ドメイン(nodeEntiryアノテーション)とNeo4jRepositoryを使って、データベースにアクセスし操作することになります。
続きはこちら
この記事は、名前と大小関係に基づく単純なクエリですが、複雑なクエリについては、@Queryアノテーションを追加します。
Neo4jへのアクセス Spring-data-neo4j入門 (2) 複雑なクエリのための@Query
Queryの書き方については、後ほど詳しく説明します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例