About

ドキュメント

Javadocs

プロジェクト文書

Built by Maven

概要

ストアドプロシージャーを呼び出すには、@ProcedureをDaoのメソッドに注釈します。

@Config(config = AppConfig.class)
public interface EmployeeDao {
    @Procedure
    void execute(@In Integer id, @InOut Reference<BigDecimal> salary);
    ...
}

パラメータには、パラメータの種別を示す@In@InOut@Out@ResultSetのいずれかのアノテーションが必須です。 パラメータは複数指定できます。 戻り値はvoidでなければいけません。

プロシージャー名

デフォルトではメソッド名がプロシージャー名になります。 @Procedurename要素に値を指定した場合は、その値がプロシージャー名になります。

@Procedure(name = "calculateSalary")
void execute(@In Integer id, @InOut Reference<BigDecimal> salary);

@Procedurecatalog要素やschema要素にカタログ名やスキーマ名を指定できます。 このときプロシージャーの名前はcatalog要素、schema要素、name要素(指定されていなければメソッド名)をピリオドで連結したものになります。

@Procedure(catlog = "CATALOG", schema ="SCHEMA", name = "calculateSalary")
void execute(@In Integer id, @InOut Reference<BigDecimal> salary);

パラメータ

ストアドプロシージャーのパラメータとDaoメソッドのパラメータの並び順は合わせなければいけません。

INパラメータ

INパラメータは、@Inをメソッドのパラメータに注釈して示します。 パラメータの型が基本型もしくはドメインクラスの場合、引数をnullにできます。 それ以外の型の場合、引数はnullであってはいけません。

@Procedure
void execute(@In Integer id);

次のように使用します。

EmployeeDao dao = new EmployeeDaoImpl();
dao.execute(1);

INOUTパラメータ

INOUTパラメータは、@InOutをメソッドのパラメータに注釈して示します。 注釈されるパラメータの型はorg.seasar.doma.jdbc.Reference でなければいけません。 Referenceの型パラメータは基本型もしくはドメインクラスでなければいけません。 引数はnullであってはいけません。

@Procedure
void execute(@InOut Reference<BigDecimal> salary);

次のように使用します。

EmployeeDao dao = new EmployeeDaoImpl();
BigDecimal in = new BigDecimal(100);
Reference<BigDecimal> ref = new Reference<BigDecimal>(in);
dao.execute(ref);
BigDecimal out = ref.get();

OUTパラメータ

OUTパラメータは、@Outをメソッドのパラメータに注釈して示します。 注釈されるパラメータの型はorg.seasar.doma.jdbc.Reference でなければいけません。 Referenceの型パラメータは基本型もしくはドメインクラスでなければいけません。 引数はnullであってはいけません。

@Procedure
void execute(@Out Reference<BigDecimal> salary);

次のように使用します。

EmployeeDao dao = new EmployeeDaoImpl();
Reference<BigDecimal> ref = new Reference<BigDecimal>();
dao.execute(ref);
BigDecimal out = ref.get();

カーソルのOUTパラメータもしくは結果セット

カーソルのOUTパラメータ、もしくはストアドファンクションが返す結果セットは、@ResultSetをメソッドのパラメータに注釈して示します。 注釈されるパラメータの型は、基本型ドメインクラスエンティティクラスjava.util.Map<String, Object>のいずれかを要素とするjava.util.Listでなければいけません。 引数はnullであってはいけません。

@Procedure
void execute(@ResultSet List<Employee> employees);

次のように使用します。

EmployeeDao dao = new EmployeeDaoImpl();
List<Employee> employees = new ArrayList<Employee>();
dao.execute(employees);
for (Employee e : employees) {
    ...
}

検索結果を受ける型がエンティティクラスやエンティティクラスを要素とするjava.util.Listの場合において、エンティティのプロパティすべてに対して漏れなく結果セットのカラムをマッピングすることを保証したい場合は、@ResultSetensureResultMapping要素にtrueを指定します。

@Procedure
void execute(@ResultSet(ensureResultMapping = true) List<Employee> employee);

結果セットのカラムにマッピングされないプロパティが存在する場合org.seasar.doma.jdbc.ResultMappingExceptionがスローされます。

マップのキーのネーミング規約

結果セットをjava.util.Map<String, Object>にマッピングする場合、 @ProceduremapKeyNaming要素にマップのキーのネーミング規約を指定できます。

@Procedure(mapKeyNaming = MapKeyNamingType.CAMEL_CASE)
void execute(@ResultSet List<Map<String, Object>> employees);

MapKeyNamingType.CAMEL_CASEは、カラム名をキャメルケースに変換することを示します。 そのほかに、カラム名をを大文字や小文字に変換する規約があります。 指定しない場合、変換は行われません。