Переопределение уже сопоставленных утверждений - PullRequest
0 голосов
/ 27 января 2020

Я использую стороннюю библиотеку, которая использует mybatis под капотом и поставляется со своими предопределенными xml конфигурациями для нее. Библиотека разбирает их один раз при запуске.

Теперь, когда мне нужно включить в микс свой собственный SQL, как бы я go переопределил уже зарегистрированные мапперы?

В настоящее время я использую доступ к конфигурациям mappedStatements через commons-lang3.FieldUtils, удалив определенные сопоставленные операторы вручную и затем снова проанализировав мой собственный пользовательский xml, эффективно заменив устаревшие операторы lika так:

org.apache.ibatis.session.Configuration configuration = ....getSqlSessionFactory().getConfiguration();

try {

    Field mappedStatements = FieldUtils.getField(configuration.getClass(), "mappedStatements", true);
    mappedStatements.setAccessible(true);
    HashMap mappers = (HashMap) mappedStatements.get(configuration);

    for (CustomQueryEnum entry : CustomQueryEnum.values()) {
        mappers.remove(entry.getIdentifier());
        mappers.remove(entry.getFqdn());

        InputStream inputStream = Resources.getResourceAsStream(entry.getResourcePath());
        XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, entry.getResourcePath(), configuration.getSqlFragments());
        mapperParser.parse();
    }

} catch (IllegalAccessException | IOException e) {
    log.error("Failed to parse custom mybatis mappers!");
}

Это выглядит немного странно, и мне интересно, есть ли Есть серьезные недостатки на этом пути, или если это действительно осуществимый способ go ...

...