Использование и расширение MappingHandler
Назначение MappingHandler — обеспечивать взаимное преобразование между именами классов, атрибутов и таблицами, столбцами.
Интерфейс определяется следующим образом:
public interface MappingHandler {
/**
* Получение имени таблицы по имени класса
*
* @param className имя класса
* @param params параметры
* @return имя таблицы
*/
String getTable(String className, Map<String, Object> params);
/**
* Получение имени таблицы по классу
*
* @param clazz класс
* @param params параметры
* @return имя таблицы
*/
String getTable(Class<?> clazz, Map<String, Object> params);
/**
* Получение имени первичного ключа по классу
*
* @param clazz класс
* @return имя первичного ключа
*/
String getPkField(Class<?> clazz);
/**
* Получение имени столбца по имени класса и имени атрибута
*
* @param clazzName имя класса
* @param fieldName имя атрибута
* @return имя столбца
*/
String getColumn(String clazzName, String fieldName);
/**
* Получение имени столбца по классу и имени атрибута
*
* @param clazz класс
* @param fieldName имя атрибута
* @return имя столбца
*/
String getColumn(Class<?> clazz, String fieldName);
/**
* Получение атрибута по классу и имени столбца
*
* @param clazz
* @param columnName
* @return
*/
String getField(Class<?> clazz, String columnName);
}
По умолчанию предоставляется реализация DefaultMappingHandler, которая наследуется от AbstractMappingHandler и следует ранее упомянутым соглашениям (usage.md).
Также предоставляются несколько часто используемых параметров для настройки:
modelPackages
Пакет, в котором находятся классы сущностей. Формат аналогичен формату пакетов при сканировании Spring, поддерживается использование подстановочных знаков, несколько пакетов разделяются запятой.
Этот параметр необходимо указать при использовании коротких имён классов в пользовательском SQL, передаётся через конструктор.
customClassMapping
Добавление пользовательского сопоставления полных имён классов с короткими именами. Обычно не требуется.
Может использоваться, когда в разных пакетах есть классы с одинаковыми именами, но нужно использовать короткие имена в SQL.
tablePrefixMap
Определение префиксов таблиц. Во многих случаях разные проекты или модули имеют разные префиксы таблиц, но у классов сущностей нет префикса. Например, таблица ss_user соответствует классу сущности User.
Map<String, String> tablePrefixMap = new LinkedHashMap<>();
tablePrefixMap.put("com.sonsure", "ss_");
mappingHandler.setTablePrefixMap(tablePrefixMap);
Эта конфигурация автоматически добавит префикс ss_ при преобразовании имён всех классов сущностей в пакете com.sonsure.
PS: Если на классе сущности используются аннотации, то будут использоваться имена, указанные в аннотациях.
Если предоставленный по умолчанию DefaultMappingHandler не удовлетворяет требованиям, можно реализовать или переписать соответствующие методы преобразования.
Затем при объявлении JdbcEngine установите:
<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
<!-- ...... -->
<property name="mappingHandler" ref="customMappingHandler"/>
</bean>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )