Mybatis Generator — это инструмент для создания слоя персистентности базы данных, который автоматически генерирует SQL-запросы.
Mybatis Generator представляет собой набор расширений для MyBatis, включающий пять видов аннотаций для автоматического создания SQL-запросов:
Инструмент позволяет автоматизировать создание запросов на изменение (вставка, обновление и удаление), а также запросов на выборку данных.
Инструмент поддерживает три типа соединения таблиц: левое, внутреннее и правое.
Поддержка представлений результатов запросов. Инструмент позволяет использовать представления результатов запросов, аналогичные тем, что используются в Jackson Json. В аннотации @ExecuteSelect можно указать представление результатов запроса, и инструмент будет автоматически связывать таблицы в соответствии с представлением. Если представление содержит связи «один к одному» или «один ко многим», то значения связанных полей будут установлены с помощью дополнительных запросов.
Возможность настройки параметров методов Mapper. Инструмент предоставляет возможность изменять параметры методов Mapper с помощью перехватчиков (interceptor). Также можно добавлять дополнительные условия фильтрации и значения для вставки (или обновления).
Поддержка стандартных условий фильтрации, значений по умолчанию для вставки (обновления) и сортировки. Эти параметры можно настроить с помощью аннотаций ExecuteInsert и подобных.
После запуска приложения MybatisGenerator начинает отслеживать события ContextRefreshedEvent. Затем он ищет методы Mapper, помеченные аннотациями ExecuteInsert и подобными, и создаёт динамические SQL-источники (SqlSource) и регистрирует MappedStatement.
Метод ExecuteInsert может принимать только один параметр, который может быть экземпляром объекта или массивом. Тип параметра может быть любым JavaBean или Map. При вставке инструмент сопоставляет поля объекта с соответствующими столбцами таблицы.
Пример использования аннотации ExecuteInsert для вставки экземпляра объекта:
@ExecuteInsert
int insert(Entity entity);
Пример использования аннотации ExecuteInsert для вставки массива:
@ExecuteInsert
int insertArray(T[] array);
Пример использования аннотации ExecuteInsert для вставки списка с использованием значений по умолчанию:
@ExecuteInsert(columnValue = {@ColumnValue(field = "updateTime", placeholder = "now()"),
@ColumnValue(field = "createTime", placeholder = "now())})
int insertList(List<User> users);
Использование класса запроса:
@ExecuteSelect
List<T> selectList(Object query);
Запрос количества элементов:
@ExecuteCount
long selectCount(Object query);
Использование карты условий запроса:
@ExecuteSelect
List<User> searchByCondition(@FilterParam Map<String, Object> condition, @Limit int limit);
Запрос одного элемента:
@ExecuteSelect(selectOne = true)
T selectOne(Object query);
Поиск по идентификатору:
@ExecuteSelect(view = "detail")
User getById(@IdParam long id);
@ExecuteSelect(view = "detail")
List<User> getByIds(@IdParam List<Long> ids);
Использование значений по умолчанию:
@ExecuteSelect(filter = {@Filter(field = "type", placeholder = "1", conflict = ConflictAction.discard)})
List<User> selectByType(@FilterParam(field = "type") Integer type);
Запрос с использованием связанных таблиц:
@ExecuteSelect(orderBy = "id desc")
List<User> search(@FilterParam(field = "type") int type,
@FilterParam(table = "car", column = "license", type = FilterType.preMatch, join = @Join(table = "car",
joinColumns = @JoinColumn(column = "driver_id", referTable = "user", referColumn = "id"))) String license);
Обновление по идентификатору:
@ExecuteUpdate(columnValue = @ColumnValue(field = "updateTime", placeholder = "now()"))
int changeName(@IdParam long id, @ValueParam("name") String name);
@ExecuteUpdate(columnValue = @ColumnValue(field = "updateTime", placeholder = "now()"))
int changeNames(@IdParam List<Long> id, @ValueParam("name") String name);
Обновление с использованием условий запроса:
@ExecuteUpdate
int updateByCondition(@FilterParam Object condition, @ValueParam Object val);
Удаление по условию запроса:
@ExecuteDelete(filter = @Filter(field = "type", placeholder = "1"))
int deleteByCompanyName(@FilterParam(field = "companyName", type = FilterType.preMatch) String companyName);
Удаление с использованием условия:
@ExecuteDelete
int deleteByCondition(Object condition);
Удаление по идентификаторам:
@ExecuteDelete
int deleteByIds(@IdParam List<IdType> keys);
Класс сущности похож на Spring Data JPA. BaseMapper и EmptyMapper определяют тип сущности и тип первичного ключа. Для сущностей с составным первичным ключом достаточно пометить соответствующие поля аннотацией @Id. Поля сущности могут ссылаться на другие таблицы, которые должны быть объявлены в аннотации @Entity.
Сущность может содержать связи «один к одному» и «один ко многим». Они помечаются аннотациями HasOne и HasMany соответственно. Поддерживаются результаты просмотра параметров. HasOne поддерживает сортировку и возвращает одну запись. HasMany поддерживает сортировку и позволяет указать количество возвращаемых записей.
Можно использовать класс запроса для объявления всех поддерживаемых фильтров. Фильтры могут ссылаться на другие таблицы. Если фильтр ссылается на другую таблицу, которая не объявлена в аннотации @Entity, необходимо использовать аннотацию Query для объявления связи между таблицами.
Фильтры могут использовать аннотацию @Filter для указания оператора фильтра (=, >, <, in
и т. д.), имени поля сущности или имени столбца таблицы, либо для игнорирования поля. Класс запроса может объявлять разбиение на страницы и сортировку. Разбиение на страницы осуществляется с помощью аннотаций @Limit и @Offset, а сортировка — с помощью @Sort.
Параметры метода Mapper могут быть помечены аннотациями @FilterParam, @IdParam, @ValueParam. @FilterParam указывает параметры запроса или объект запроса. @IdParam указывает на параметры идентификатора, когда сущность использует составной первичный ключ, параметры должны быть java bean или Map, если параметры имеют тип List или массив, используется оператор in
. @ValueParam указывает значение поля, которое нужно обновить, оно может быть отдельным полем (с указанием field или column) или java bean.
ExecuteSelect, ExecuteCount, ExecuteUpdate и ExecuteDelete позволяют указывать условия фильтрации по умолчанию, ExecuteInsert и ExecuteUpdate позволяют указывать значения по умолчанию для столбцов таблицы. Перехватчики
ExecuteSelect может задавать сортировку по умолчанию.
Перехватчики могут быть заданы для ExecuteInsert, ExecuteSelect, ExecuteCount, ExecuteUpdate, ExecuteDelete. Перехватчик должен быть статическим методом или методом по умолчанию в текущем интерфейсе Mapper и принимать один параметр типа InterceptorContext.
Также можно задать глобальный перехватчик, который должен быть экземпляром GeneratorInterceptor. Глобальный перехватчик действует только тогда, когда не задан перехватчик для метода, но его можно вызвать через статический метод MybatisGenerator.intercept.
Глобальный перехватчик должен быть установлен с помощью статического метода MybatisGenerator.setDefaultInterceptor(GeneratorInterceptor defaultInterceptor).
Параметры сортировки
Placeholder @Filter, @FilterParam, @ColumnValue, @ValueParam могут использовать placeholder. Placeholder используется для фильтрации условий справа от оператора или вставки или обновления значений. Может иметь следующие формы:
HasOne и HasMany Поля HasOne и HasMany должны быть типом связанной сущности или коллекцией сущностей (массив или список). Аннотации HasOne и HasMany должны указывать условие фильтрации (filter атрибут). Условие фильтрации должно содержать placeholder, которое может быть другим полем сущности или константой. Если placeholder — это выражение, то при ссылке на поле сущности используйте формат $[fieldName] или $(tableName).columnName или $(tableName.tableAlias).columnName. Имя таблицы и псевдоним таблицы должны соответствовать таблице сущности или связанной таблице, объявленной аннотацией @Entity.
При реализации полиморфного самосоединения таблиц необходимо использовать псевдоним таблицы, обычно оставляя его пустым. Например, если таблица user содержит сотрудников и руководителей, и вы хотите запросить сотрудников руководителя Ван, вам нужно использовать самосоединение.
Повторная обработка полей фильтрации Параметры метода, значения по умолчанию и перехватчики могут генерировать условия фильтрации. Эти условия фильтрации ссылаются на повторяющиеся поля таблицы данных, они обрабатываются в соответствии с типом ConflictAction по следующим правилам:
Порядок обработки параметров метода, значений по умолчанию и перехватчиков
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )