Боюсь, ответ в том, что MyBatis не обеспечивает прямой способ контролировать случай ключей в результате карте. Недавно я задал этот вопрос в группе MyBatis Google: https://groups.google.com/forum/?fromgroups#!topic/mybatis-user/tETs_JiugNE
Результат зависит от поведения драйвера JBDC.
Также выясняется, что выполнение псевдонимов столбцов, предложенное @jddsantaella, не работает во всех случаях. Я тестировал MyBatis-3.1.1 с тремя базами данных в прошлом: MySQL, PostgreSQL и H2 и получил разные ответы. С MySQL случай псевдонима столбца диктует случай ключа в hashmap. Но с PostgreSQL он всегда строчный и с H2, он всегда имеет верхний регистр. Я не тестировал, будут ли псевдонимы столбцов работать с Oracle, но по умолчанию возвращаются заглавные буквы.
Я вижу два варианта:
Вариант 1: Создание какой-то вспомогательный метод, что ваш код всегда будет использовать для извлечения данных из возвращенной карты. Например:
private Object getFromMap(Map<String, Object> map, String key) {
if (map.containsKey(key.toLowerCase())) {
return map.get(key.toLowerCase());
} else {
return map.get(key.toUpperCase());
}
}
Вариант 2: Написать класс LowerCaseMap, который простирается от java.util.AbstractMap
или java.util.HashMap
и оберток всех звонков в put
, putAll
и/или get
всегда быть в нижнем регистре. Затем укажите, что MyBatis должен использовать вашу конкретную версию LowerCaseMap, а не стандартную HashMap, при заполнении данных из запроса.
Если вам понравилась эта идея, и нужна помощь о том, как сказать MyBatis, как использовать другой конкретный класс коллекции, увидеть мой ответ на этот StackOverflow вопрос: https://stackoverflow.com/a/11596014/871012
Я думал, что может быть какой-то способ изменить код API, но, наконец, я выбрал второй вариант. –