blog.bouzuya.net

2022-10-19 MyBatis の Mapper の INSERT / UPDATE / DELETE のメソッドの戻り値型

MyBatis の Mapper の INSERT / UPDATE / DELETE のメソッドの戻り値型。

結論: int, long だと INSERT / UPDATE / DELETE された行数。 boolean だとその行数 > 0 のとき true

SELECT については ResultMap だなんだとドキュメントに書かれているがそれ以外についての記述を見つけられなかった。諦めてソースコードを眺める。おそらくこのあたり。

https://github.com/mybatis/mybatis-3/blob/mybatis-3.5.11/src/main/java/org/apache/ibatis/binding/MapperMethod.java#L60-L74

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;
  }

https://github.com/mybatis/mybatis-3/blob/mybatis-3.5.11/src/main/java/org/apache/ibatis/binding/MapperMethod.java#L107-L121

たとえば boolean は行数が 1 以上なら true になるようだ。 intlong を指定すれば件数が返される。

SqlSession::insert などのコメントには↓のように書いてある。

  • @return int The number of rows affected by the insert.

https://github.com/mybatis/mybatis-3/blob/mybatis-3.5.11/src/main/java/org/apache/ibatis/session/SqlSession.java#L182

行数は挿入・更新・削除された行数っぽい。


twiq 実装メモ (29)

query 側の model 。

  • domain と同様にならないか
  • query db の writer は event の projection を書き込む形に
  • ……とは言え現状は過剰

Aggregate の command メソッド。

  • &mut self は Rust っぽさはあるけど &self で十分な気がする
  • 特に Repository の API に before を取ることで Clone 必須になっているので

今日のコミット。