2022-10-19 MyBatis の Mapper の INSERT / UPDATE / DELETE のメソッドの戻り値型
MyBatis の Mapper の INSERT / UPDATE / DELETE のメソッドの戻り値型。
結論: int, long だと INSERT / UPDATE / DELETE された行数。 boolean だとその行数 > 0 のとき true
。
SELECT については ResultMap だなんだとドキュメントに書かれているがそれ以外についての記述を見つけられなかった。諦めてソースコードを眺める。おそらくこのあたり。
sqlSession::insert
などの戻り値を rowCountResult
で wrap している。
rowCountResult
は以下。
private Object rowCountResult(int rowCount) {
final Object result;
if (method.returnsVoid()) {
result = null;
} else if (Integer.class.equals(method.getReturnType()) || Integer.TYPE.equals(method.getReturnType())) {
result = rowCount;
} else if (Long.class.equals(method.getReturnType()) || Long.TYPE.equals(method.getReturnType())) {
result = (long) rowCount;
} else if (Boolean.class.equals(method.getReturnType()) || Boolean.TYPE.equals(method.getReturnType())) {
result = rowCount > 0;
} else {
throw new BindingException("Mapper method '" + command.getName() + "' has an unsupported return type: " + method.getReturnType());
}
return result;
}
たとえば boolean
は行数が 1 以上なら true になるようだ。 int
や long
を指定すれば件数が返される。
SqlSession::insert
などのコメントには↓のように書いてある。
- @return int The number of rows affected by the insert.
行数は挿入・更新・削除された行数っぽい。
twiq 実装メモ (29)
query 側の model 。
- domain と同様にならないか
- query db の writer は event の projection を書き込む形に
- ……とは言え現状は過剰
Aggregate の command メソッド。
&mut self
は Rust っぽさはあるけど&self
で十分な気がする- 特に
Repository
の API にbefore
を取ることでClone
必須になっているので
今日のコミット。