ストアドプロシージャ
ストアドプロシージャを呼び出すには、DAO メソッドに @Procedure
アノテーションを付ける必要があります。
@Dao
public interface EmployeeDao {
@Procedure
void execute(@In Integer id, @InOut Reference<BigDecimal> salary);
...
}
戻り値
戻り値の型は void
でなければなりません。
プロシージャ名
アノテーションが付けられたメソッド名は、デフォルトでプロシージャ名として認識されます。これをオーバーライドするには、 @Procedure
の name
要素に値を指定します。
@Procedure(name = "calculateSalary")
void execute(@In Integer id, @InOut Reference<BigDecimal> salary);
パラメータ
ストアド プロシージャのパラメータの順序は、DAO メソッドのパラメータの順序と一致する必要があります。
すべてのパラメータには、次のいずれかのアノテーションを付ける必要があります。
@In
@InOut
@Out
@ResultSet
IN パラメータ
IN パラメータを示すには、対応する DAO メソッドのパラメータに @In
アノテーションを付けます。 DAO メソッドのパラメータの型は、次のいずれかである必要があります。
java.util.OptionalInt
java.util.OptionalLong
java.util.OptionalDouble
次の定義があるとします。
@Procedure
void execute(@In Integer id);
このメソッドは次のように呼び出すことができます。
EmployeeDao dao = new EmployeeDaoImpl();
dao.execute(1);
INOUT パラメータ
INOUT パラメータを示すには、対応する DAO メソッドのパラメータに @InOut
アノテーションを付けます。 DAO メソッドのパラメータの型は org.seasar.doma.jdbc.Reference
である必要があり、その型パラメータは次のいずれかである必要があります。
java.util.OptionalInt
java.util.OptionalLong
java.util.OptionalDouble
次の定義があるとします。
@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 パラメータを示すには、対応する DAO メソッドのパラメータに @Out
アノテーションを付けます。 DAO メソッドのパラメータの型は org.seasar.doma.jdbc.Reference
である必要があり、その型パラメータは次のいずれかである必要があります。
java.util.OptionalInt
java.util.OptionalLong
java.util.OptionalDouble
次の定義があるとします。
@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パラメータもしくは結果セット
カーソルまたは結果セットを示すには、対応する DAO メソッドのパラメータに @ResultSet
アノテーションを付けます。
DAO メソッドのパラメータの型は java.util.List
であり、その要素の型は次のいずれかである必要があります。
java.util.Map<String, Object>
java.util.OptionalInt
java.util.OptionalLong
java.util.OptionalDouble
次の定義があるとします。
@Procedure
void execute(@ResultSet List<Employee> employees);
このメソッドは次のように呼び出すことができます。
EmployeeDao dao = new EmployeeDaoImpl();
List<Employee> employees = new ArrayList<Employee>();
dao.execute(employees);
for (Employee e : employees) {
...
}