About

ドキュメント

プロジェクト文書

Built by Maven

問い合わせメソッド

DAO (Data Access Object) インタフェースには様々な問い合わせメソッドを持たせることができます.

全件取得

エンティティを全件取得するメソッドです.

メソッド名 (正規表現)
(get|find)All
引数
なし
戻り値
エンティティのList
public interface EmployeeDao {
    List<Employee> findAll();
}
実行されるJPQL
SELECT employee FROM Employee AS employee

主キーによる検索

主キーを指定してエンティティを取得するメソッドです.

検索はEntityManager#find(Class, Object)メソッドによって行われます. 引数で指定された主キーに該当するエンティティが存在しない場合はnullが返されます.

メソッド名 (正規表現)
get|find
引数
エンティティの主キー
戻り値
エンティティ
public interface EmployeeDao {
    Employee find(int id);
}

主キーによる検索 (リファレンスのみ)

主キーを指定してエンティティを取得するメソッドです. 返されるエンティティの状態は遅延ロードされます. エンティティの状態に最初にアクセスしたときに遅延ロードが発生します.

検索はEntityManager#getReference(Class, Object)メソッドによって行われます. 引数で指定された主キーに該当するエンティティが存在しない場合でもエンティティが返されますが, このエンティティの状態にアクセスしたときにjavax.persistence.ObjectNotFoundExceptionがスローされます.

メソッド名 (正規表現)
(get|find)Reference
引数
エンティティの主キー
戻り値
エンティティ
public interface EmployeeDao {
    Employee getReference(int id);
}

主キーとバージョンによる検索

主キーとバージョンを指定してエンティティを取得するメソッドです.

引数で指定された主キーに該当するエンティティが存在しない場合はnullが返されます. 引数で指定されたバージョンとエンティティのバージョンが一致しない場合は javax.persistence.OptimisticLockExceptionがスローされます.

メソッド名 (正規表現)
get|find
引数
エンティティの主キー, エンティティのバージョンプロパティ
戻り値
エンティティ
public interface EmployeeDao {
    Employee find(int id, int version);
}
実行されるJPQL
SELECT employee FROM Employee AS employee WHERE employee.id = :id

引数を条件とする検索

引数にマッチするエンティティを取得するメソッドです.
引数は問い合わせ条件に含めるエンティティのプロパティと引数の名前を一致させます. メソッドが呼び出された際に,nullでない引数が問い合わせ条件に含まれます. nullでない引数が複数ある場合はANDで連結されます.
引数名には演算子をサフィックスで指定することができます. 指定可能なサフィックスは「引数名およびDTOのプロパティ名のサフィックス」 を 参照してください. サフィックスを省略すると = 演算子が使用されます.

メソッド名 (正規表現)
(get|find).*
引数
問い合わせ条件に含めるエンティティのプロパティの並び
戻り値
エンティティまたはエンティティのList
public interface EmployeeDao {
    List<Employee> findByParameter(String name);
}
実行されるJPQL
SELECT employee FROM Employee AS employee WHERE employee.name = :name

エンティティのプロパティを条件とする検索

引数で指定したエンティティのプロパティにマッチするエンティティを取得するメソッドです.
メソッドが呼び出された際に,引数で渡されたエンティティのnullでないプロパティが 問い合わせ条件に含まれます. nullでないプロパティが複数ある場合はANDで連結されます.

メソッド名 (正規表現)
(get|find).*
引数
問い合わせ条件に含めるエンティティ
戻り値
エンティティまたはエンティティのList
public interface EmployeeDao {
    List<Employee> findByExample(Employee emp);
}
実行されるJPQL
SELECT employee FROM Employee AS employee WHERE employee.name = :name AND employee.hereDate = :hereDate

DTOのプロパティを条件とする検索

引数で指定したDTOのプロパティにマッチするエンティティを取得するメソッドです.
メソッドが呼び出された際に,引数で渡されたDTOのnullでないプロパティが 問い合わせ条件に含まれます. nullでないプロパティが複数ある場合はANDで連結されます.
DTOのプロパティ名には演算子をサフィックスで指定することができます. 指定可能なサフィックスは「引数名およびDTOのプロパティ名のサフィックス」 を 参照してください. サフィックスを省略すると = 演算子が使用されます.

メソッド名 (正規表現)
(get|find).*
引数
問い合わせ条件に含めるDTO
戻り値
エンティティまたはエンティティのList
public interface EmployeeDao {
    List<Employee> findByDto(EmployeeDto dto);
}
実行されるJPQL
SELECT employee FROM Employee AS employee WHERE employee.name LIKE :name

条件式による検索

引数で指定した条件式にマッチするエンティティを取得するメソッドです.
条件式はKuina-DaoのCriteria APIが提供するもので,ORや副問い合わせなどJPQLのWHERE句で 可能な任意の条件を指定することができます.

メソッド名 (正規表現)
(get|find).*
引数
条件式の並び
戻り値
エンティティまたはエンティティのList
public interface EmployeeDao {
    List<Employee> findCondition(ConditionalExpession cond);
}

JPQLによる検索

Named Queryを使用して問い合わせを行うメソッドです.
使用するNamed Queryの名前はDaoのインタフェース名または問い合わせ対象のエンティティ名と,メソッド名をピリオドで 連結したものになります. メソッドに@QueryNameを付けることにより,使用するNamed Queryの名前を 明示的に指定することもできます. 検索順は次のとおりです.

  1. (もしあれば) @QueryNameアノテーションで指定された名前
  2. <DaoのFQN>.<Daoのメソッド名>
  3. <Daoの単純名>.<Daoのメソッド名>
  4. <エンティティ名>.<Daoのメソッド名>

JPQLは@NamedQueryアノテーションまたはマッピングファイルで定義します.

メソッド名 (正規表現)
(get|find).*
引数
JPQLに含まれるパラメータの並び
戻り値
エンティティまたはエンティティのList
public interface EmployeeDao {
    List<Employee> findByName();
}
実行されるNamed Queryの例
<named-query name="Employee.findByName">
  <query>
    SELECT
      employee
    FROM
      Employee employee
    WHERE
      employee.name = :name
  </query>
</named-query>

SQLによる検索

S2Dao相当の2WAY-SQLファイルを使用して問い合わせを行うメソッドです.
問い合わせの結果は任意のDTOまたはMapにマップすることができます. DTOにマップする場合は,問い合わせ結果のカラム名と名前の一致するDTOのプロパティに値が設定されます.
使用するSQLファイルの名前は,Daoのインタフェース名とメソッド名をアンダースコアで連結し, 拡張子 .sql を付加したものになります. SQLファイルはDaoインタフェースのパッケージと同じ階層のディレクトリに配置します.
SQLによる検索は,JPA (EntityManager) を使用せず,JDBC APIを直接使用します.

メソッド名 (正規表現)
(get|find).*
引数
SQLに含まれるパラメータの並び
戻り値
DTOまたはDTOのListまたはMapまたはMapList
public interface EmployeeDao {
    List<EmployeeDto> findByDepartmentName(String departmentName);
}
DTO
public class EmployeeDto {
    private int eid;
    private String ename;
    private String dname;

    //setters and getters
}
実行されるSQLファイルの名前の例
EmployeeDao_findByDepartmentName.sql
実行されるSQLファイルの例
SELECT
  e.id eid,
  e.name ename,
  d.name dname
FROM
  Employee e INNER JOIN Department d ON (e.department_id = d.id)
WHERE 
  d.name = /*departmentName*/'foo'

特別な意味を持つ引数名およびDTOのプロパティ名

引数を条件とする検索およびDTOのプロパティを条件とする検索では,特別な意味を持つ引数名またはプロパティ名があります.

引数名/DTOのプロパティ名 説明
orderbyおよびorderBy StringまたはString[]または OrderbySpecまたはOrderbySpec[] ソート順を指定します.
firstResult intまたはInteger 問い合わせで取得する最初の位置を指定します. 位置は0から始まります.
maxResults intまたはInteger 問い合わせで取得する最大の件数を指定します.

これらの引数名またはプロパティ名を通常の引数またはプロパティとして問い合わせ条件に含める場合は, 引数またはプロパティのgetterメソッドに@NamedParameterアノテーションを指定します.

関連を表す引数名およびDTOのプロパティ名

引数を条件とする検索およびDTOのプロパティを条件とする検索では,引数名またはDTOのプロパティ名で関連を表現することができます.

引数名またはDTOのプロパティ名で関連を表現するには,関連プロパティ名の後ろに'$'を付加し, 関連先エンティティのプロパティ名を続けます.

department$name

上の例では,検索対象のエンティティが持つ関連departmentのプロパティnameを 問い合わせ条件として使用します.

関連先エンティティの関連先を連続してしていることもできます.

department$manager$name

上の例では,検索対象のエンティティが持つ関連departmentの先にあるエンティティが持つ関連 managerのプロパティnameを問い合わせ条件として使用します.

引数名およびDTOのプロパティ名のサフィックス

引数を条件とする検索およびDTOのプロパティを条件とする検索では,問い合わせ条件に使用する演算子を 引数名またはプロパティ名のサフィックスで指定することができます. サフィックスが指定されていない場合は = 演算子が適用されます.

サフィックス 演算子 説明
_EQ =
_NE <>
_LT <
_LE <=
_GT >
_GE >=
_IN IN 引数またはプロパティの型は配列にします.
_NOT_IN NOT IN 引数またはプロパティの型は配列にします.
_LIKE LIKE
_STARTS LIKE 引数またはプロパティの値 (文字列) の末尾に'%'が付加されます.
_ENDS LIKE 引数またはプロパティの値 (文字列) の先頭に'%'が付加されます.
_CONTAINS LIKE 引数またはプロパティの値 (文字列) の先頭と末尾に'%'が付加されます.
_IS_NULL IS NULL 引数またはプロパティの値はbooleanまたはBooleanとしてください. 値が真の場合,問い合わせ条件に含まれます.
_IS_NOT_NULL IS NOT NULL 引数またはプロパティの値はbooleanまたはBooleanとしてください. 値が真の場合,問い合わせ条件に含まれます.