1. 序章

このチュートリアルでは、Spring DataモジュールとArangoDBデータベースの操作方法を学習します。 ArangoDBは、無料のオープンソースマルチモデルデータベースシステムです。 1つのデータベースコアと統合クエリ言語AQL(ArangoDBクエリ言語)を使用して、Key-Value、ドキュメント、およびグラフのデータモデルをサポートします。

必要な構成、基本的なCRUD操作、カスタムクエリ、エンティティの関係について説明します。

2. ArangoDBのセットアップ

ArangoDBをインストールするには、まず、ArangoDBの公式Webサイトのダウンロードページからパッケージをダウンロードする必要があります。

このチュートリアルでは、ArangoDBのコミュニティエディションをインストールします。 詳細なインストール手順は、ここにあります。

デフォルトのインストールには、というデータベースが含まれています _system と root すべてのデータベースにアクセスできるユーザー。

パッケージに応じて、インストーラーはインストールプロセス中にrootパスワードを要求するか、ランダムなパスワードを設定します。

デフォルトの構成では、ArangoDBサーバーがで実行されていることがわかります 8529 ポート。

セットアップが完了すると、でアクセス可能なWebインターフェイスを使用してサーバーと対話できます。 http://localhost:8529. このホストとポートは、チュートリアルの後半でSpringDataの構成に使用します。

代わりに使用することもできます arangosh、サーバーとの対話用の同期シェル。

起動から始めましょう arangosh と呼ばれる新しいデータベースを作成するには baeldung-database とユーザー baeldung この新しく作成されたデータベースにアクセスできます。

arangosh> db._createDatabase("baeldung-database", {}, [{ username: "baeldung", passwd: "password", active: true}]);

3. 依存関係

アプリケーションでArangoDBでSpring Dataを使用するには、次の依存関係が必要です。

<dependency>
    <groupId>com.arangodb</groupId>
    <artifactId>arangodb-spring-data</artifactId>
    <version>3.5.0</version>
</dependency>

4. 構成

データの操作を開始する前に、ArangoDBへの接続を設定する必要があります。 ArangoConfigurationインターフェイスを実装する構成クラスを作成してこれを行う必要があります。

@Configuration
public class ArangoDbConfiguration implements ArangoConfiguration {}

内部では、2つのメソッドを実装する必要があります。 最初のオブジェクトは、データベースへのインターフェイスを生成するArangoDB.Builderオブジェクトを作成する必要があります。

@Override
public ArangoDB.Builder arango() {
    return new ArangoDB.Builder()
      .host("127.0.0.1", 8529)
      .user("baeldung").password("password"); }

接続を作成するために必要なパラメーターは、ホスト、ポート、ユーザー名、およびパスワードの4つです。

または、構成クラスでこれらのパラメーターの設定をスキップすることもできます。

@Override
public ArangoDB.Builder arango() {
    return new ArangoDB.Builder();
}

それらをarango.propertiesリソースファイルに保存できるため、次のようになります。

arangodb.host=127.0.0.1
arangodb.port=8529
arangodb.user=baeldung
arangodb.password=password

これは、Arangoが検索するデフォルトの場所です。 InputStreamをカスタムプロパティファイルに渡すことで上書きできます。

InputStream in = MyClass.class.getResourceAsStream("my.properties");
ArangoDB.Builder arango = new ArangoDB.Builder()
  .loadProperties(in);

実装する必要のある2番目の方法は、アプリケーションで必要なデータベース名を指定することです。

@Override
public String database() {
    return "baeldung-database";
}

さらに、構成クラスには @EnableArangoRepositories SpringDataにArangoDBリポジトリを探す場所を指示するアノテーション:

@EnableArangoRepositories(basePackages = {"com.baeldung"})

5. データ・モデル

次のステップとして、データモデルを作成します。 この作品では、 name author 、およびpublishDateフィールドを持つ記事表現を使用します。

@Document("articles")
public class Article {

    @Id
    private String id;

    @ArangoId
    private String arangoId;

    private String name;
    private String author;
    private ZonedDateTime publishDate;

    // constructors
}

ArangoDBエンティティには @書類 コレクション名を引数として取る注釈。 デフォルトでは、大文字と小文字を区別しないクラス名です。

次に、2つのidフィールドがあります。 Springのもの @Id 注釈とArangoの2番目のもの @ArangoId 注釈。 最初のものは、生成されたエンティティIDを格納します。 2つ目は、データベース内の適切な場所に同じIDナットを格納します。 私たちの場合、これらの値はそれに応じて 1 と 記事/1.

これで、エンティティを定義したら、データアクセス用のリポジトリインターフェイスを作成できます。

@Repository
public interface ArticleRepository extends ArangoRepository<Article, String> {}

ArangoRepositoryインターフェースを2つの汎用パラメーターで拡張する必要があります。 この例では、IDがString型のArticleクラスです。

6. CRUDオペレーション

最後に、いくつかの具体的なデータを作成できます。

開始点として、記事リポジトリへの依存関係が必要になります。

@Autowired
ArticleRepository articleRepository;

そして、 Article クラスの単純なインスタンス:

Article newArticle = new Article(
  "ArangoDb with Spring Data",
  "Baeldung Writer",
  ZonedDateTime.now()
);

ここで、この記事をデータベースに保存する場合は、単に 保存 方法:

Article savedArticle = articleRepository.save(newArticle);

その後、両方が id と arangoId フィールドが生成されました:

assertNotNull(savedArticle.getId());
assertNotNull(savedArticle.getArangoId());

データベースから記事を取得するには、最初にそのIDを取得する必要があります。

String articleId = savedArticle.getId();

次に、findByIdメソッドを呼び出すだけです。

Optional<Article> articleOpt = articleRepository.findById(articleId);
assertTrue(articleOpt.isPresent());

記事エンティティがあるので、そのプロパティを変更できます。

Article article = articleOpt.get();
article.setName("New Article Name");
articleRepository.save(article);

最後に、 save メソッドを再度呼び出して、データベースエントリを更新します。 IDはすでにエンティティに割り当てられているため、新しいエントリは作成されません。

エントリの削除も簡単な操作です。 リポジトリのdeleteメソッドを呼び出すだけです。

articleRepository.delete(article)

IDで削除することも可能です:

articleRepository.deleteById(articleId)

7. カスタムクエリ

Spring DataArangoDB、を使用すると、派生リポジトリを利用して、メソッド名でクエリを定義できます。

@Repository
public interface ArticleRepository extends ArangoRepository<Article, String> {
    Iterable<Article> findByAuthor(String author);
}

2番目のオプションは、 AQL(ArangoDbクエリ言語)を使用することです。 これは、@Queryアノテーションで適用できるカスタム構文言語です。

それでは、特定の著者のすべての記事を検索し、公開日で並べ替える基本的なAQLクエリを見てみましょう。

@Query("FOR a IN articles FILTER a.author == @author SORT a.publishDate ASC RETURN a")
Iterable<Article> getByAuthor(@Param("author") String author);

8. 関係

ArangoDB は、エンティティ間の関係を作成する可能性を提供します。

例として、Authorクラスとその記事の間に関係を作成しましょう。

そのためには、 @Relations アノテーションを使用して新しいコレクションプロパティを定義する必要があります。このアノテーションには、特定の著者によって書かれた各記事へのリンクが含まれます。

@Relations(edges = ArticleLink.class, lazy = true)
private Collection<Article> articles;

ご覧のとおり、 ArangoDB の関係は、@Edgeで注釈が付けられた別のクラスを介して定義されています。

@Edge
public class ArticleLink {

    @From
    private Article article;

    @To
    private Author author;

    // constructor, getters and setters
}

注釈付きの2つのフィールドが付属しています @から および@To. それらは、着信と発信の関係を定義します。

9. 結論

このチュートリアルでは、構成方法を学習しました ArangoDB SpringDataで使用します。 基本的なCRUD操作、カスタムクエリ、エンティティリレーションについて説明しました。

いつものように、すべてのソースコードはGitHub利用できます。