既に生成済の SqlSession に対して後から SQL mapper を追加する方法
(設計として悪いので勧められない)
セッションが持っている マッパーレジストリにマッパークラスを追加する。
import org.apache.ibatis.binding.MapperRegistry; import org.apache.ibatis.session.SqlSession;
以下のようなメソッドを用意して呼べば良い。
public void addMapper(SqlSession session, Class<?> mapperClass) { MapperRegistry registory = session.getConfiguration().getMapperRegistry(); if (registory.getMapper(mapperClass, session)==null){ registory.addMapper(mapperClass); } }
メソッドにしないで、書くなら、こんなものかもしれないけど、getMapperRegistry() を2回
走らせるので効率悪い
Optional.ofNullable(sqlSession.getConfiguration().getMapperRegistry().getMapper(mapperClass, sqlSession)) .ifPresentOrElse(a->{}, ()->{ sqlSession.getConfiguration().getMapperRegistry().addMapper(mapperClass); });
でも、この方法が稀に失敗する場合があるので、
次のようにした方が良いみたいだ。
if (!sqlSession..getConfiguration().getMapperRegistry().getMappers().stream().anyMatch(c->c.equals(mapperclass))){ sqlSession.getConfiguration().getMapperRegistry().addMapper(mapperclass); }