mybatis で、後からマッパーを追加する。

既に生成済の 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);
}