mybatis-metamodel — это плагин для генерации метамодели данных для mybatis-plus и tk mapper, предназначенный для решения проблемы тесной связи между кодом и структурой базы данных при создании пользовательских SQL-запросов в сложных сценариях.
Мы знаем, что mybatis-plus и tk mapper — это отличные плагины для расширения возможностей mybatis. Они реализуют общие операции CRUD (создание, чтение, обновление и удаление) путём переопределения MappedStatement. Это значительно повышает эффективность разработки. Однако в некоторых сложных сценариях использования общие операции CRUD не могут удовлетворить наши потребности в разработке, и нам приходится создавать собственные запросы с помощью встроенных компонентов условий запроса. В таких случаях трудно избежать использования строковых представлений имён таблиц или полей, что может привести к ошибкам во время выполнения в сложных проектах, если имена полей будут изменены.
Чтобы избежать ошибок во время выполнения, этот проект предоставляет метаданные базы данных на этапе компиляции, помогая приложениям обнаруживать изменения в существующих метаданных базы данных уже на этапе компиляции.
Рассмотрим пример: нам нужно создать собственный SQL-запрос для получения информации о пользователе. После внедрения этого проекта мы можем автоматически сгенерировать метамодель UserInfo_.class на этапе компиляции, которая содержит информацию о каждом поле таблицы. Кроме того, мы можем использовать MetaModelContext для получения соответствующей информации о таблице.
Mapper
// Пример запроса по условию
String queryUserName = "hugo_1";
Example userInfoQueryExample = new Example(UserInfo.class);
Example.Criteria criteria = userInfoQueryExample.createCriteria();
criteria.andEqualTo(UserInfo_.username.getColumn(), queryUserName);
List<UserInfo> userInfosByQuery = userInfoMapper.selectByExample(userInfoQueryExample);
Assert.assertEquals(1, userInfosByQuery.size());
// Получение имени таблицы
String tableName = metaModelContext.getTableName(UserInfo_.class);
Assert.assertEquals("user_info", tableName);
mybatis-plus
// Запрос по карте
// Поиск данных с именем пользователя hugo_1
Map<String, Object> map = new HashMap<>();
map.put(UserInfo_.username.getColumn(), "hugo_1"); // Получение метаданных
userInfo = userInfoMapper.selectByMap(map).get(0);
// Обобщённый запрос
// Список адресов, равных «Китай»
List<UserInfo> userList = userInfoMapper.selectList(
new QueryWrapper<UserInfo>().eq(UserInfo_.address.getColumn(), "Китай")
);
// Получение имени таблицы
String tableName = metaModelContext.getTableName(UserInfo_.class);
См. wiki:
Спасибо следующим проектам с открытым исходным кодом:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )