Я использую стороннюю библиотеку, которая использует 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 ...