1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fluent-mybatis-fluent-mybatis

04.03.2025 10:30
GitLife Service Account
  • При генерации кода оптимизация обработки сценариев с указанием суперкласса через generics для Entity
  • Fix #I56PNZ: Generic varargs в этом методе НЕ изменяются, поэтому он является типобезопасным.
Последнее сообщение коммита: v1.9.8
04.03.2025 10:30
GitLife Service Account
  • Генерируемый класс XyzEntity теперь поддерживает super class. В super class можно определять общие атрибуты. Используется аналогично определению интерфейсов.
    введите описание изображения здесь
    введите описание изображения здесь
    введите описание изображения здесь

  • Добавлены аннотации @GmtCreate, @GmtModified; для удобства сортировки полей

  • В конфигурациях TABLE_NAME, ENTITY_NAME константы были изменены на верхний регистр

  • Исправлена ISSUE I4Q3RH

Последнее сообщение коммита: fix ISSUE I4Q3RH
04.03.2025 10:29
GitLife Service Account
  • В сервисе @FormService добавлено свойство proxy со значением по умолчанию true. При значении false используется способ Annotation Processor для генерации подкласса FormService, автоматического реализования определённых методов и копирования аннотаций, определённых над этими методами. Это позволяет поддерживать аннотации, определённые над методами, такими как управление транзакциями и кэшированием.
Последнее сообщение коммита: add test
04.03.2025 10:29
GitLife Service Account
  • Устранение проблемы I4STG5, добавлена возможность пользовательского отображения полей при генерации Entity.
  • Устранение проблем с FormService, исправлено некорректное создание условий GT при генерации.
  • Устранение проблемы I4YHGO.
  • При генерации кода теперь допускается использование параметров типа generics.
Последнее сообщение коммита: v1.9.5
04.03.2025 10:29
GitLife Service Account
  • Улучшения функциональности
    1. При генерации кода, если путь daoDir не указан, то не создаются интерфейсы и реализации DAO, а также не создается базовый класс baseDao при компиляции.
    2. При генерации кода добавлена возможность установки типов дат в JDK.
  • Временная проблема с использованием псевдонимов в запросах JOIN была исправлена.
  • Проблема использования метода count() вместо count(*) при использовании DISTINCT была исправлена.
  • Проблемы с использованием пользовательских первичных ключей были исправлены, следующие методы теперь поддерживают пользовательские первичные ключи:
    1. save (пакетная загрузка Entity)
    2. saveOrUpdate

Свойство BaseEntity.table.supplier было установлено как transient для удобства сериализации fastjson; это свойство помечено как @Deprecated и будет удалено в будущих версиях.

Последнее сообщение коммита: v1.9.4
04.03.2025 10:29
GitLife Service Account
  • Настройка модулей функциональности form-service
  1. Удаление модуля form-service-meta и объединение его в fluent-mybatis;
  2. Выделение отдельного модуля fluent-mybatis-annotation для удобства определения API-интерфейсов с минимальной зависимостью.
Последнее сообщение коммита: add test
04.03.2025 10:29
GitLife Service Account
  • Добавление в FormService функционала автоматического отображения параметров, аналогичного JPA
    1. Поддержка ключевых слов: update/save/insert/delete/logicDelete/top/find/count/list/stdPaged/tagPaged/paged/exists и методов с этими ключевыми словами
    2. Поддержка указанных выше ключевых слов + By + поле1 + And + поле2 для вывода параметров метода
    3. Поддержка имени метода + @Entry аннотация для смешанной компиляции
    4. Поддержка параметров типа enum
  • Реализация поддержки javax.validation для параметров FormService
    аналог JPA
  • @FormService поддерживает объявление в абстрактном классе
  • Fluent MyBatis динамическое изменение имени таблицы
@Bean
public MapperFactory mapperFactory() {
    return new MapperFactory()
        .tableSupplier((t, v) -> "fluent_mybatis." + t, StudentEntity.class);
}
  • IRichEntity добавлены два быстрых метода
    1. firstByNotNull: поиск списка записей, где поля не пустые, и возврат первой записи, удовлетворяющей условию
    2. asQuery: использование непустых полей как условий запроса
  • PrinterMapper печатает SQL, при передаче Date параметра, выполняется форматирование
  • Fluent MyBatis динамическое условие, кроме поддержки Predicate, добавлена возможность использования булевых условий
Последнее сообщение коммита: v1.9.2
04.03.2025 10:28
GitLife Service Account
  • Изменение реализации интерфейса IEntityRelation для связи 1-1 и 1-N в fluent MyBatis: входной параметр был изменён с одного Entity на List, что решает проблему 1+N запросов.
  • В сгенерированных классах Entity добавлены аннотации Lombok (@Builder, @NoArgsConstructor, @AllArgsConstructor).
  • Введение функциональности Form-service-meta, подробнее здесь.
Последнее сообщение коммита: add form service test
04.03.2025 10:28
GitLife Service Account
  • Устранение 2 проблем:

    1. I4FH25

    При генерации запросов с соединением таблиц, если есть вложенные SQL-запросы, условия выборки в этих вложенных запросах не учитывают алиас таблиц.

    1. I4FG8V

    Обладает ли JoinQuery возможностью объединения UNION и UNION ALL?

  • Добавление нового модуля функциональности form-service-meta:

    1. Определение API-интерфейсов сервиса, позволяющее без необходимости программирования реализовать CRUD-операции для одной таблицы.
Последнее сообщение коммита: form-service-meta
04.03.2025 10:28
GitLife Service Account
  • Решение проблем с данными Entity в многомодульной среде (пересечение имён Ref классов, загрузка маппера только частично через MapperFactory).
    1. Генерируемые директории для Ref и IEntityRelation теперь находятся в basePackage вместо фиксированного пакета (cn.org.atool.fluent.mybatis.refs). Это значит, что при наличии нескольких basePackage будут существовать несколько версий Ref и IEntityRelation.
    2. Дальнейшее упрощение генерируемого кода путём удаления файлов QueryRef и MapperRef.
  • При генерации кода добавлен выбор между полноценными и неполноценными моделями (@Tables(isRichEntity = false)). В случае использования полноценной модели, Entity будет наследовать RichEntity, а при использовании неполноценной — BaseEntity.
  • Класс IEntity получил методы для получения значений по имени поля: valueBy(FieldMapping), valueByField(String), valueByColumn(String).
  • Класс MapperFactory получил методы для инициализации окружения:
    1. dbType: Изменение значения по умолчанию для типа базы данных объекта Entity.
    2. tableSupplier: Изменение значения по умолчанию для способа получения имени таблицы объекта Entity.
    3. register: Регистрация конвертора для типов отличных от стандартных при вызове PoJoHelper.toPoJo.
    4. initializer: Установка других параметров окружения по умолчанию.
  • Для проверки работы Entity в многомодульной среде были скорректированы тестовые данные.
  • С версии 1.8.0 до 1.87 усилились попытки упрощения генерации кода; текущая структура каталогов выглядит следующим образом, дальнейшие возможности оптимизации практически исчерпаны.
Последнее сообщение коммита: v1.8.7
04.03.2025 10:28
GitLife Service Account
  • Исправлено исключение при инициализации определения поставщика SQL для множества источников данных.
  • Исправлена ошибка синтаксиса в методе count для случая одного поля с указанным псевдонимом.
Последнее сообщение коммита: v1.8.6.1
04.03.2025 10:28
GitLife Service Account

версия 1.8.6

  • Упрощены методы инструмента IRef, чтобы отделить методы, которые не предназначены для использования пользователями, но необходимы системе.
  • Упрощены методы генерации класса Entity, за исключением метода entityClass как по умолчанию; остальные методы (pkSetter, findPk, tableSupplier) выполняются через вызов методов инструментального класса в базовом классе, что позволяет избежать переопределения в подклассах.
  • Метод Mapper#print преобразован в статический инструментальный метод, позволяющий выводить соответствующие SQL-запросы без запуска контейнера.
  • Метод Entity.findTableBelongTo() заменён на tableSupplier(); метод changeTableBelongTo(String) заменён на tableSupplier(String); названия методов согласованы с методами инструментального класса IRef.
  • Методы связи один-к-одному и один-ко-многим в классе Entity перемещены из AllRef в IEntityRelation, что позволяет пользователям реализовать переопределение этих методов по мере необходимости (например, добавление функциональности сортировки).
  • Исправлена ошибка конвертации camelCase при вводе строки со смешанными регистрами в PoJoHelper#toPoJo.
  • Исправлено конфликтное использование бинов MapperFactory при наличии других бинов, объявленных с аннотацией @PostConstruct; инициализация MapperFactory перемещена из метода @PostConstruct в setApplicationContext.
  • Реализован новый способ вызова "пухлых" методов (связей) класса Entity через функциональные методы, что позволяет избежать использования рефлексии.- Генерируемые коды теперь поддерживают определение полей типа List и других параметризованных типов помимо базовых типов данных (@Column).
Последнее сообщение коммита: generator
04.03.2025 10:27
GitLife Service Account

Новые возможности версии 1.8.5

  • Устранена проблема отсутствия маппинга ResultMap при отсутствии определённого MapperFactory бин в приложении. При запуске приложения проверяется наличие MapperFactory бина, если он не определён, выбрасывается сообщение об ошибке.
  • Добавлена возможность вывода SQL-запросов без фактического выполнения операций с базой данных. Это удобно для тестирования.
/**
 * Не выполняет фактический SQL-запрос, а лишь возвращает сконструированное SQL-запросное выражение MyBatis
 *
 * @param mode       0: режим '?'-заполнителя; 1: режим замены переменных; 2: режим '?'-заполнителя MyBatis
 * @param simulators имитация выполнения операций над данными, пример: m -> m.listEntity(query)
 * @return список SQL-запросов
 */
default List<String> print(int mode, Consumer<IWrapperMapper>... simulators);

Пример:

    @Test
    void insertWithPk() {
        List<String> sql = mapper.print(m -> m.insertWithPk(new StudentEntity().setId(1L)));
        want.list(sql).eqList("" +
            "INSERT INTO fluent_mybatis.student " +
            "(`id`, `gmt_created`, `gmt_modified`, `is_deleted`, `env`, `tenant`) " +
            "VALUES " +
            "(?, now(), now(), 0, ?, ?)");
    }
  • Добавлен метод WHERE applyIf(boolean condition, Function<WHERE, WHERE> apply)
// Пример
StudentUpdate update = StudentUpdate.updater()
    .set.address().is("address")
    .end()
    .where.applyIf(student != null,
        c -> c.id().eq(student.getId())
            .and.age().between(student.getAge() - 10, student.getAge() + 10)
            .and.address().like(student.getAddress(), If::notBlank)
    )
    .end();
Последнее сообщение коммита: comments
04.03.2025 10:27
GitLife Service Account

Версия 1.8.4

  • Уменьшено количество сгенерированного кода, полностью удалены сгенерированные эквиваленты класса XyzSqlProvider, теперь используется SqlProvider напрямую; Класс Mapper также генерируется только как пустой шаблон XzyMapper, что обеспечивает полиморфизм и возврат соответствующего экземпляра IMapping. Все аннотации реализации Mapper находятся на интерфейсе IEntityMapper.

  • Определение первичного ключа и возможность записи обратной связи по первичному ключу для методов insert и insertBatch осуществляется при загрузке; Определение ResultMap для метода listEntity также происходит при загрузке. Подробнее см. реализацию классов StatementBuilder и SqlKit.

    Примечание: При запуске Fluent MyBatis требуется настроить бин MapperFactory

@Bean
public MapperFactory mapperFactory() {
    return new MapperFactory();
}
  • Добавлена поддержка изменения типа базы данных во время выполнения, чтобы одна программа могла работать с двумя различными базами данных (например, MySQL для рабочих сред и H2 для тестовых).
// Изменение типа базы данных
IRef.changeDbType(DbType.MYSQL);
  • В методе select добавлена возможность исключения полей select.exclude(...)
// Пример 1
new XyzQuery().select.exclude("id", "user_name");
// Пример 2
new XyzQuery().select.exclude(FieldRef.Student.id, FieldRef.Student.userName);
// Пример 3
new XyzQuery().select.exclude(StudentEntity::getId, StudentEntity::getUserName);
  • При создании запроса JOIN больше не требуется явное указание псевдонима Query, если псевдоним не указан, система автоматически присваивает его.```java
    JoinQuery query = new StudentQuery().join(new StudentScoreQuery())
    .onEq(StudentEntity::getId, StudentScoreEntity::getStudentId)
    .endJoin().build();

- Для поддержки динамического изменения типа базы данных и других новых возможностей, внутренняя реализация сборки SQL была модифицирована. Теперь все сборки SQL используют функциональные выражения, которые собираются целиком только при выполнении.
Последнее сообщение коммита: FreeKit
04.03.2025 10:27
GitLife Service Account

v1.8.3

  • Fix ISSUE I492JR: Устранена проблема, связанная с неравенством сравнения класса Entity при наличии нескольких classloaders. Это приводило к возникновению исключения "is not a @FluentMybatis Entity".
Последнее сообщение коммита: v1.8.3 解决不同的classloader,导致的class比较问题
04.03.2025 10:26
GitLife Service Account

Версия 1.8.2

  • Обновление методами updateById, logicDeleteById и другими операциями обновления по условию ID, поддерживаются также значения по умолчанию, установленные в IDefaultSetter
  • Исправление проблемы I47X9R: при массовой вставке в Oracle, если значение для вставки равно null, используется альтернативное имя

Версия Yöntemler 1.8.1

  • Улучшение I49EUN: при пагинационной выборке, когда count = 0, больше нет необходимости выполнять запрос конкретного списка
  • Улучшение I47E1E: при пагинационной выборке, объект StdPagedList увеличен свойством hasNextPage
  • Исправление I495FE: при генерации кода для таблицы Oracle, исправлено использование большого регистра для свойства Entity
  • Улучшение поддержки группировки при пагинационной выборке
  • Поддержка типа обработчика @TableId в методах deleteById, findById и других

Версия 1.8.1

  • Улучшение I49EUN: при пагинационной выборке, когда count = 0, больше нет необходимости выполнять запрос конкретного списка
  • Улучшение I47E1E: при пагинационной выборке, объект StdPagedList увеличен свойством hasNextPage
  • Исправление I495FE: при генерации кода для таблицы Oracle, исправлено использование большого регистра для свойства Entity
  • Улучшение поддержки группировки при пагинационной выборке
  • Поддержка типа обработчика @TableId в методах deleteById, findById и других
Последнее сообщение коммита: oracle batch insert
04.03.2025 10:26
GitLife Service Account

v1.8.0.1

v1.8.0

  • Классы файлов, сгенерированных во время компиляции, значительно упрощены:
    1. Объединение трёх функциональных файлов (XyzEntityHelper + XyzDefaults + XyzMapping) в один файл XyzMapping
    2. Объединение двух функциональных файлов (XyzWrapperHelper + XyzFormSetter) в файл XyzSegment
    3. Объединение файла XyzSqlProvider в файл XyzMapper- Улучшена способность объекта FieldMapping записывать лямбда-выражения для getter и setter сущностей, что позволяет снизить объем генерируемого кода.
  • Упрощено количество сгенерированного кода, переместив многие функции в базовый класс и утилиты; объем кода, сгенерированного версией OnClickListener.CLICK, уменьшился более чем вдвое, но функциональность осталась прежней.
  • Улучшена поддержка нескольких типов баз данных, с единой точкой входа Mapper -> SqlProvider -> реализация SqlKit для различных баз данных.
  • Исправлено несколько ISSUE:
    1. I47X9R: При массовой вставке, если одно и то же свойство не было присвоено нескольким объектам сущностей, это свойство не включается в список полей insert.
    2. I47VM5: Простое перехватывание передачи значения LIKE, чтобы запретить использование одного символа %.
    3. I466L2: Для PoJoHelper#toPoJo, если атрибуты объекта map не полностью совпадают с атрибутами объекта PoJo, добавлена возможность использования метода #toPoJoListIgnoreNotFound.
    4. I48448: Оптимизация структуры объединенного кода, внешние скобки () для union кода, чтобы предотвратить проблемы анализа сложных синтаксических конструкций.
    5. I47VMA: Решение проблем ненормализованных имен полей и таблиц при генерации кода.
    6. I48HQ4: Добавление поддержки typeHandler для @TableId.- Изменено поведение установки условий по умолчанию для Updater и Query; теперь все Updater и Query имеют установленные условия по умолчанию, кроме того, добавлены методы emptyQuery и emptyUpdater для создания объектов без условий по умолчанию
  • Добавлена возможность настройки вторичного кэша MyBatis
Последнее сообщение коммита: v1.8.0.1
29.11.2024 18:26
GitLife Service Account

v1.7.3

Последнее сообщение коммита: add test
29.11.2024 18:26
GitLife Service Account

v1.8.0

Последнее сообщение коммита: v1.8.0
29.11.2024 18:26
GitLife Service Account

v1.7.2

Последнее сообщение коммита: v1.7.2
1
https://api.gitlife.ru/oschina-mirror/fluent-mybatis-fluent-mybatis.git
git@api.gitlife.ru:oschina-mirror/fluent-mybatis-fluent-mybatis.git
oschina-mirror
fluent-mybatis-fluent-mybatis
fluent-mybatis-fluent-mybatis