複数のクラスパスにあるマッパーXMLを読み込む(Load mappers in multiple classpathes)

SpringBoot + MyBatis でsetMapperLocationsする時に複数個所においてあるマッパーをすべて読み込ませたかったんだけど・・・パッと出てこなかったのでここに記す。

@Configure
public class DbConfig
{
    // マッパーXMLが置いてあるクラスパスをここに定義
    public static final String[] MAPPER_XML_PATH = {
        "classpath:net/rizworks/springboot/test/batchcommon/dao/*.xml",
        "classpath:net/rizworks/springboot/test/baseentity/dao/*.xml"
    };

    ...

    @Bean(name = "primarySqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(primaryDataSource);
        
        // Here ! add results to an "Array" resolved each classpath
        //---
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        List stack = new ArrayList<>();
        for (int i=0; i < MAPPER_XML_PATH.length; i++) {
        	Resource[] rscs = resolver.getResources(MAPPER_XML_PATH[i]);
        	stack.addAll(Arrays.asList(rscs));
        }
        bean.setMapperLocations(stack.toArray(new Resource[stack.size()]));
        //---
        
        SqlSessionFactory factory = bean.getObject();
        factory.getConfiguration().setMapUnderscoreToCamelCase(true);
        return factory;
    }
...
}

まあ結局のところ、setMapperLocationsに渡せるのは1つの配列なんでクラスパスの解決結果を1つの配列にまとめて渡してやるだけなのね。(*゚▽゚)ノ

カテゴリー: Java

コメントを残す

メールアドレスが公開されることはありません。