MyBatisでリストで取得するのは簡単
@SelectProvider(type = HogeSqlBuilder::class, method = "selectList") override fun findAll(): List<Hoge>
MapKey を使うとSelect結果をいい感じにMapにしてくれるMyBatis。
この場合、Hoge.id
がKey、Valueが Hoge
のMapにして返してくれる。
@MapKey("id") @SelectProvider(type = HogeSqlBuilder::class, method = "selectMap") override fun findAll(): Map<Long, Hoge>
しかしValueはクラスじゃないといけない
たとえば値は Hoge.name だけあればいいような場合に、ValueをStringにしたいのだがそれはできないようだ。
// これはできない @MapKey("id") @SelectProvider(type = HogeSqlBuilder::class, method = "selectNameMap") override fun findAll(): List<id, String>
下記のような例外が発生する。 Stringに対してアクセサを呼び出そうとしてエラーになるようだ。
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.String'
対応策
おとなしくクラスを用意するか、リストで受けたあとに自分で詰め替えるとかでしょうね。。