問い合わせメソッド
DAO (Data Access Object) インタフェースには様々な問い合わせメソッドを持たせることができます.
- 全件取得
- 主キーによる検索
- 主キーによる検索 (リファレンスのみ)
- 引数を条件とする検索
- エンティティのプロパティを条件とする検索
- DTOのプロパティを条件とする検索
- 条件式による検索
- JPQLによる検索
- SQLによる検索
全件取得
エンティティを全件取得するメソッドです.
- メソッド名 (正規表現)
-
(get|find)All
- 引数
- なし
- 戻り値
- エンティティの
List
- 例
-
public interface EmployeeDao { List<Employee> findAll(); }
- 実行されるJPQL
-
SELECT employee FROM Employee AS employee
主キーによる検索
主キーを指定してエンティティを取得するメソッドです.
- メソッド名 (正規表現)
-
get|find
- 引数
- エンティティの主キー
- 戻り値
- エンティティ
- 例
-
public interface EmployeeDao { Employee find(int id); }
- 実行されるJPQL
-
SELECT employee FROM Employee AS employee WHERE employee.id = :id
主キーによる検索 (リファレンスのみ)
主キーを指定してエンティティのリファレンスを取得するメソッドです.
- メソッド名 (正規表現)
-
(get|find)Reference
- 引数
- エンティティの主キー
- 戻り値
- エンティティ
- 例
-
public interface EmployeeDao { Employee getReference(int 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の名前は問い合わせ対象のエンティティ名とメソッド名をピリオドで
連結したものになります.
メソッドに@QueryName
を付けることにより,使用するNamed Queryの名前を
変更することができます.
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にマップすることができます.
問い合わせの結果セットと名前の一致するDTOのプロパティに値が設定されます.
使用するSQLファイルの名前は,Daoのインタフェース名 (先頭小文字) とメソッド名をアンダースコアで連結し,
拡張子 .sql
を付加したものになります.
SQLファイルはDaoインタフェースのパッケージと同じ階層のディレクトリに配置します.
SQLによる検索は,JPA (EntityManager
) を使用せず,JDBC APIを直接使用します.
- メソッド名 (正規表現)
-
(get|find).+
- 引数
- SQLに含まれるパラメータの並び
- 戻り値
- DTOまたはDTOの
List
- 例
-
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のプロパティを条件とする検索では,問い合わせ条件に使用する演算子を
引数名またはプロパティ名のサフィックスで指定することができます.
サフィックスが指定されていない場合は =
演算子が適用されます.
サフィックス | 演算子 | 説明 |
---|---|---|
_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 としてください.
値が真の場合,問い合わせ条件に含まれます.
|