はじめてのSpring Data【Part 1 Spring Data 概要編 】

(Posted on December  4th, 2012 by Toshihiko Ikeda in  Spring Source, Spring Data.)

NoSQL系も含めデータベースは何種類あるのでしょうか? 大分、淘汰されました思いますが、WIKIPEDIA 「NoSQL」を見る限り、今でも、少なくとも30種類は軽く超えるのではないでしょうか。データベースは特徴ごとに「リレーショナル」、「ビックテーブル」、「ドキュメント」、「キー・バリュー」及び「グラフDB」に分類され、それぞれAPI及びドライバの種類、使い方も変わってきます。当然のことながら、データベースの種類に応じてアプリケーションインタフェース(API)を学習する必要がありますが、アプリケーションの要求するデータの基本操作(CRUD:Create,Read,Update,Delete)は変わりません。なので、ある程度、共通のAPIを作成することはできると思います。APIを共通化できれば、新しい種類のデータベースを採用したとしてもAPIの学習時間、アプリケーションの改修期間も大幅に短縮されます。Spring Dataは、まさに「データベースのインタフェース抽象化と、共通したインタフェースの提供」を目的としたSpring Sourceの一大プロジェクトです。

Spring Data プロジェクト

Spring Dataプロジェクトは、Rod Johnson(元SpringSource)とEmil Eifrem(Neo4j)とのSpring One 2010の共同セッションの中で、Spring FrameworkとNeo4j グラフデータベースとの統合について議論され、現在でも注目されているNoSQLのNeo4j グラフデータベースをSpring Frameworkが対応する目的で、Spring Dataプロジェクトが発足されました。その当時までSpring FrameworkはJPA、JDBC、Hibernateなどの技術を使ったリレーショナルデータベースのみが対応され、NoSQLはまだ対応されていませんでした。

Spring Dataプロジェクトは、Spring Data for JPA、Spring Data for MongoDB、Spring Data for Neo4jなどデータベースの種類に応じてサブプロジェクトが発足されていることから、複数サブプロジェクトの集合体と考えることができます。2012年12月3日、現在、このURL(http://www.springsource.org/spring-data)に示すプロジェクトが存在します。

springdataprj

Spring Data のミッションステートメント

Spring Dataは「データベースのインタフェース抽象化と、共通したインタフェースの提供」を目的としますが、複数プロジェクトにおいて「共通したインタフェースの提供」を目指すために、Spring Dataプロジェクトには次のようなミッションステートメントが存在します。

“Spring Data provides a familiar and consistent Spring-base programming model for NoSQL and relational store while retaining store-specific features and capabilities. “

この原文でキーとなる文(上記の太字、下線の文)を訳すと「…慣れ親しんだ一貫したSpringベースのプログラミングモデル…」となります。単に共通したインタフェースを提供するだけではなく、「…慣れ親しんだ一貫したSpringベースのプログラミングモデル…」を提供することがミッションステートメントの中心となります。

それではこの「慣れ親しんだ一貫したSpringベースのプログラミングモデル」とは何かについて考えてみましょう。まずは、Spring Frameworkの特徴についておさらいです。下記の三角形の図はご覧になったことがあるでしょう。そもそものSpring Frameworkは 複雑でお決まり事の多いEJB(Enterprise Java Beans)2.0以前の仕様に対するアンチテーゼとして、POJOライクなシンプルなBeanを管理できる生産性の高いフレームワークとして誕生いたしました。この生産性の高いフレームワークを支える技術のバックボーンとなるのが以下の三つの技術要素です。Spring Dataを利用する開発者は、この技術要素を慣れ親しんだSpringの特徴として開発を進めることができます。

    1. Dependency Injection (依存性の注入:DI)
    2. Aspect-Oriented Programming(アスペクト志向プログラミング:AOP)
    3. Portable Service Abstraction(データ永続化、スケジュール、トランザクションに関する実装とビジネスロジックを疎結合にするための抽象化)

spring参加系

たとえ、データベースの種類が代わっても、慣れ親しんだSpringの特徴を活かしたPOJOセントリックなデータアクセスができるようにミッションステートメントとして約束しています。データベースの種類が代わったからと言ってデータアクセスの方法を変更する必要はないのです。今までの考え方の延長上にあるから新しいデータベースを採用してもデータアクセスに関わる開発規模、難易度もある程度予想の範囲以内に納めることができます。

springdata特徴

一貫したPOJOセントリックなデータアクセスモデルを提供するSpring Dataですが、本ブログでは、次回以降、リポジトリ、ドメインマッピング及びテンプレートの三つの機能に分けて、具体的にサンプルコードを使って説明いたします。乞うご期待を!!!

以上