はじめよう

このページについて

このガイドでは、開発環境の設定方法を説明し、Domaの基本的な機能を紹介します。

JDKのインストール

最初に JDK 17 以降をインストールする必要があります。

サンプルプロジェクトの入手

サンプルプロジェクトを入手するには、次のコマンドを使用して、getting-started リポジトリのクローンを作成し、新しいディレクトリに移動します。

$ git clone https://github.com/domaframework/getting-started.git
$ cd getting-started

次のコマンドが成功すれば、プロジェクトのセットアップは完了です。

$ ./gradlew build

注釈

Windowsユーザーは、./gradlew build の代わりに gradlew build を実行してください。

サンプルプロジェクトの構造

getting-start サンプルは、Java-17 サブプロジェクトを含む Gradle マルチプロジェクトです。このガイドでは、java-17 サブプロジェクトに焦点を当てます。

プロジェクトを IDE にインポートする

Eclipse

Eclipse 4.23.0でテスト済みです。getting-started プロジェクトを Gradle プロジェクトとしてインポートしてください。

注釈

SQL文をファイルで管理する場合、Doma Tools が役立つかもしれません。

IntelliJ IDEA

IntelliJ IDEA Community 2023.3.4 でテストされています。プロジェクトを Gradle プロジェクトとしてインポートしてください。

注釈

次のIntelliJ IDEAプラグインを使用してDomaをサポートできます。機能が重複しているため、いずれか一方をお選びください。

プログラミングスタイル

Domaは、DSLとDAOの2つのプログラミングスタイルをサポートしています。 両方のスタイルを一緒に使用することで、そのメリットを最大限に引き出すことをお勧めします。

DSLスタイルは型安全なCriteria APIを使用しており、シンプルな動的SQLを自動生成する点で優れています。DAOスタイルはSQLステートメントをJavaのインターフェースメソッドにマップし、追加、更新、削除操作の標準的なSQLを自動生成することにも長けており、複雑なSQLを手動で書く場合にも役立ちます。

DSL スタイル

DSL スタイルでは、boilerplate.java17.repository.EmployeeRepository と :クエリDSL を使った例を使用します。

SELECT

SELECT ステートメントを実行して Java オブジェクトの結果を取得するには、次の例に従います。

public Employee selectById(Integer id) {
  var e = new Employee_();
  return queryDsl.from(e).where(c -> c.eq(e.id, id)).fetchOne();
}

クエリを組み立てるために Employee エンティティクラスのメタモデルクラスである Employee_ を使用します。メタモデルクラスは、アノテーション処理を通じて自動生成されるクラスです。

QueryDsl クラスの queryDsl インスタンスは、Criteria API の開始点として機能します。

上記のコードは次の SQL ステートメントを生成します。

select t0_.id, t0_.name, t0_.age, t0_.version from Employee t0_ where t0_.id = ?

DELETE

DELETE ステートメントを発行するには、次のように記述します。

public void delete(Employee employee) {
  var e = new Employee_();
  queryDsl.delete(e).single(employee).execute();
}

INSERT

INSERT ステートメントを発行するには、次のように記述します。

public void insert(Employee employee) {
  var e = new Employee_();
  queryDsl.insert(e).single(employee).execute();
}

UPDATE

UPDATE ステートメントを発行するには、次のように記述します。

public void update(Employee employee) {
  var e = new Employee_();
  queryDsl.update(e).single(employee).execute();
}

DAO スタイル

いくつかの例は boilerplate.java17.dao.EmployeeDao にあります。詳細については、DAOインタフェース および SQLテンプレート を参照してください。

SELECT (DAO)

DAO スタイルで SELECT ステートメントを発行して Java オブジェクトを取得するには、SQL テンプレートのテキストブロックで @Sql アノテーションを使用します。

@Sql("""
    select
      /*%expand*/*
    from
      employee
    where
      id = /* id */0
    """)
@Select
Employee selectById(Integer id);

このSQLテンプレートには、/*%expand*//* id */ の二つの特別な式が含まれています。SQLテンプレートの処理中に、/*%expand*/ とその後の * は完全なカラムリストに置き換えられます。同様に、/* id */ とその後の 0 はバインド変数 ? に置き換えられます。バインドされる値は selectById メソッドの id パラメータです。

上記のコードは次の SQL ステートメントを生成します。

select
  id, name, age, version
from
  employee
where
  id = ?

DELETE (DAO)

DELETE ステートメントを発行するには、次のように記述します。

@Delete
int delete(Employee employee);

INSERT (DAO)

INSERT ステートメントを発行するには、次のように記述します。

@Insert
int insert(Employee employee);

UPDATE (DAO)

UPDATE ステートメントを発行するには、次のように記述します。

@Update
int update(Employee employee);

次のステップ

他のサンプルプロジェクトを参照してください。