Слияние кода завершено, страница обновится автоматически
LabelLoader
, чтобы гарантировать, что параметр ids
в методе load(key, ids)
имеет значение.@LabelFor
, чтобы поддерживать ссылки на поля в родительских и дочерних классах.IndexArrayParamFilter
: поддерживает разбор параметров вида key[0]=v1 & key[1]=v2
SuffixOpParamFilter
: теперь поддерживает объединение параметров, таких как игнорирование регистра, например: name-ct-ic=xxx
MetaResolver
: добавлен метод clearCache()
, который позволяет вручную очищать кэш BeanMeta
@DbIgnore
: теперь поддерживает аннотацию других пользовательских аннотаций, делая их аналогичными @DbIgnore
AnnoUtils
: может использоваться для разбора составных аннотаций@LabelFor
аннотация, которая наследует @DbIgnore
, и может использоваться для аннотации и разбора полей Label. Например: поле statusName
может быть помечено как Label для перечисления status
. В микросервисной среде: поле user_id
в таблице order
сервиса заказов, а поле username
находится в сервисе членства, при запросе заказа невозможно напрямую объединить таблицы. В этом случае можно пометить поле username
в OrderVO
как Label для поля userId
: @LabelFor("userId")
private Long userId;
// Значение загружается удаленно с помощью соответствующего LabelLoader и автоматически устанавливается
@LabelFor("userId")
private String username;
LabelLoader
, который может использоваться для загрузки пользовательских Label, включая загрузку локальных или удаленных данных Label - Предоставлен реализованный класс EnumLabelLoader
, который используется для загрузки перечислений Label, метод использования следующий: @Bean
public EnumLabelLoader enumLabelLoader() {
return new EnumLabelLoader() // Загружает все перечисления, которые должны быть разобраны в SearchBean
.with(UserType.class, UserType::getLabel)
.with(UserStatus.class, UserStatus::getLabel)
.with(OrderType.class, OrderType::getLabel)
.with(OrderStatus.class, OrderStatus::getLabel);
}
```* Bean Searcher Boot Starter
bean-searcher.params.filter.use-index-array
для управления включением IndexArrayParamFilter
, по умолчанию false
bean-searcher.params.filter.use-index-array
для управления включением IndexArrayParamFilter
, по умолчанию false
JsonFieldConvertor
: теперь поддерживаются все типы составных genericsEnumParamConvertor
: проблема с неподдерживаемыми пустыми строками как параметромDateParamConvertor
, теперь поддерживаются следующие 8 форматов Date
параметров:
yyyy-MM-dd
— Например: 2024-01-01
yyyy-M-dd
— Например: 2024-1-01
(новый)yyyy-MM-d
— Например: 2024-01-1
(новый)yyyy-M-d
— Например: 2024-1-1
(новый)yyyy/MM/dd
— Например: 2024/01/01
yyyy/M/dd
— Например: 2024/1/01
(новый)yyyy/MM/d
— Например: 2024/01/1
(новый)yyyy/M/d
— Например: 2024/1/1
(новый)DateTimeParamConvertor
, теперь поддерживаются следующие 312 форматов DateTime
параметров:yyyy-MM-dd
— Автоматически дополняется до yyyy-MM-dd 00:00:00.000
yyyy-MM-dd H
— Автоматически дополняется до yyyy-MM-dd H:00:00.000
(новый)yyyy-MM-dd HH
— Автоматически дополняется до yyyy-MM-dd HH:00:00.000
yyyy-MM-dd H:m
— Автоматически дополняется до yyyy-MM-dd H:m:00.000
(новый)yyyy-MM-dd HH:m
— Автоматически дополняется до yyyy-MM-dd HH:m:00.000
(новый)yyyy-MM-dd H:mm
— Автоматически дополняется до yyyy-MM-dd H:mm:00.000
(новый)yyyy-MM-dd HH:mm
— Автоматически дополняется до yyyy-MM-dd HH:mm:00.000
yyyy-MM-dd H:m:s
— Автоматически дополняется до yyyy-MM-dd H:m:s.000
(новый)yyyy-MM-dd HH:m:s
— Автоматически дополняется до yyyy-MM-dd HH:m:s.000
(новый)yyyy-MM-dd H:mm:s
— Автоматически дополняется до yyyy-MM-dd H:mm:s.000
(новый)yyyy-MM-dd H:m:ss
— Автоматически дополняется до yyyy-MM-dd H:m:ss.000
(новый)yyyy-MM-dd HH:mm:s
— Автоматически дополняется до yyyy-MM-dd HH:mm:s.000
(новый)yyyy-MM-dd HH:m:ss
— Автоматически дополняется до yyyy-MM-dd HH:m:ss.000
(новый) * yyyy-MM-dd H:mm:ss
— Автоматически дополняется до yyyy-MM-dd H:mm:ss. 000
(новый)yyyy-MM-dd HH:mm:ss
— Автоматически дополняется до yyyy-MM-dd HH:mm:ss. 000
yyyy-MM-dd H:m:s. S
— Например: 2024-01-01 1:1:1. 9
(новый)yyyy-MM-dd H:m:s. SS
— Например: 2024-01-01 1:1:1. 09
(новый)yyyy-MM-dd H:m:s. SSS
— Например: 2024-01-01 1:1:1. 009
(новый)yyyy-MM-dd HH:m:s. S
— Например: 2024-01-01 01:1:1. 9
(новый)yyyy-MM-dd HH:m:s. SS
— Например: 2024-01-01 01:1:1. 09
(новый)yyyy-MM-dd HH:m:s. SSS
— Например: 2024-01-01 01:1:1. 009
(новый)yyyy-MM-dd H:mm:s. S
— Например: 2024-01-01 1:01:1. 9
(новый)yyyy-MM-dd H:mm:s. SS
— Например: 2024-01-01 1:01:1. 09
(новый)yyyy-MM-dd H:mm:s. SSS
— Например: 2024-01-01 1:01:1. 009
(новый)yyyy-MM-dd H:m:ss. S
— Например: 2024-01-01 1:1:01. 9
(новый)yyyy-MM-dd H:m:ss. SS
— Например: 2024-01-01 1:1:01. 09
(новый)yyyy-MM-dd H:m:ss. SSS
— Например: 2024-01-01 1:1:01. 009
(новый)yyyy-MM-dd HH:mm:s. S
— Например: 2024-01-01 01:01:1. 9
(новый)yyyy-MM-dd HH:mm:s. SS
— Например: 2024-01-01 01:01:1. 09
(новый)yyyy-MM-dd HH:mm:s. SSS
— Например: 2024-01-01 01:01:1. 009
(новый)yyyy-MM-dd HH:m:ss. S
— Например: 2024-01-01 01:1:01. 9
(новый)yyyy-MM-dd HH:m:ss. SS
— Например: 2024-01-01 01:1:01. 09
(новый)yyyy-MM-dd HH:m:ss. SSS
— Например: 2024-01-01 01:1:01. 009
(новый)yyyy-MM-dd H:mm:ss. S
— Например: 2024-01-01 1:01:01. 9
(новый)yyyy-MM-dd H:mm:ss. SS
— Например: 2024-01-01 1:01:01. 09
(новый)yyyy-MM-dd H:mm:ss. SSS
— Например: 2024-01-01 1:01:01. 009
(новый)yyyy-MM-dd HH:mm:ss. S
— Например: 2024-01-01 01:01:01. 9
yyyy-MM-dd HH:mm:ss. SS
— Например: 2024-01-01 01:01:01. 09
yyyy-MM-dd HH:mm:ss. SSS
— Например: 2024-01-01 01:01:01. 009
> Всё это серия форматов yyyy-MM-dd [Time]
, поддерживаются ещё 7 серий форматов, каждая серия включает 39 вариантов формата, подробное описание не приведено:
yyyy-M-dd [Time]
-- Серия форматов (новый)yyyy-MM-d [Time]
-- Серия форматов (новый)yyyy-M-d [Time]
-- Серия форматов (новый)yyyy/MM/dd [Time]
-- Серия форматов (новый)yyyy/M/dd [Time]
-- Серия форматов (новый)yyyy/MM/d [Time]
-- Серия форматов (новый)yyyy/M/d [Time]
-- Серия форматов (новый)### 🐛 Устранение ошибок
v4.3.4
: https://gitee.com/troyzhxu/bean-searcher/issues/IB1Y6M
Bean Searcher
OracleTimestampFieldConvertor
, для совместимости с полем TIMESTAMP
в Oracle. https://gitee.com/troyzhxu/bean-searcher/issues/IA87WB.field(..)
в конструкторе параметров, чтобы обеспечить совместимость с использованием неопределённых типов данных (коллекций/единичных значений).var params = MapUtils.builder()
// если ifTrue истинно, вернуть список, иначе вернуть единичное значение, тип которого может быть различным, начиная с v4.3.4
.field(User::getId, ifTrue ? List.of(1, 2, 3) : 4)
.build();
var params = MapUtils.builder()
// если ifTrue истинно, вернуть массив примитивных типов, иначе вернуть единичное значение, тип которого может быть различным, начиная с v4.3.4
.field(User::getId, ifTrue ? new int[]{1, 2, 3} : 4)
.build();
var params = MapUtils.builder()
// если ifTrue истинно, вернуть массив объектов, иначе вернуть единичное значение, тип которого может быть различным, начиная с v4.3.4
.field(User::getId, ifTrue ? new Integer[]{1, 2, 3} : 4)
.build();
```* Bean Searcher Boot Starter
* Добавлен новый параметр конфигурации `bean-searcher.field-converter.use-oracle-timestamp` для управления активностью `OracleTimestampFieldConverter`, по умолчанию `true`.
* Упрощена структура класса `BeanSearcherProperties`, внутренние подклассы были преобразованы в внешние классы.
Bean Searcher Solon Plugin
bean-searcher.field-converter.use-oracle-timestamp
для управления активностью OracleTimestampFieldConverter
, по умолчанию true
.BeanSearcherProperties
, внутренние подклассы были преобразованы в внешние классы.BeanMeta
теперь сохраняет порядок объявления полей в классах сущностей (то есть порядок генерации условий) https://github.com/troyzhxu/bean-searcher/issues/105
extractFieldParams(...)
в классе DefaultParamResolver
, чтобы он мог быть переопределен в потомках, что позволяет пользователям выполнять пользовательскую настройкуcreateBeanMeta(...)
в классе DefaultMetaResolver
, чтобы позволить пользователям настраивать подклассы BeanMeta
LRUCache
в классе DefaultGroupResolver
не следовал правилам порядка доступаDateTimeParamConverter
: теперь поддерживаются целочисленные значения времени в качестве параметровSpringSqlExecutor
: выполнение SQL с поддержкой транзакций Spring по умолчаниюbean-searcher.params.converter.zone-id
: позволяет настроить используемую зону времени для DateTimeParamConverter
SolonSqlExecutor
: выполнение SQL с поддержкой транзакций Solon по умолчаниюbean-searcher.params.converter.zone-id
: позволяет настроить используемую зону времени для DateTimeParamConverter
SearchResult
добавлен метод empty()
.RpcNames
добавлен метод newNames()
, заменивший прежний метод newConfig()
.buildForRpc()
конструктора параметров улучшен с точки зрения производительности.junit -> 5.10.3
, slf4j -> 2.0.16
, solon -> 2.9.0
.JsonFieldConvertor
при преобразовании сложных списков типа List<A<B>>
: https://github.com/troyzhxu/bean-searcher/issues/99
BeanMeta
: Добавлен метод getSqlSnippets()
, который позволяет пользователям получать все распаршенные SQL фрагменты, связанные с данным сущностным классом.SearchSql
: Добавлен метод getSearchParams()
, который позволяет пользователям в SqlInterceptor
получить распаршенные параметры поиска.MapBuilder
: Добавлены методы or(...)
и and(...)
, чтобы упростить использование логических групп в бэкэнде: https://gitee.com/troyzhxu/bean-searcher/issues/I9T66BMapBuilder
: Добавлены методы buildForRpc()
и buildForRpc(RpcNames)
, чтобы создавать параметры, подходящие для запроса удалённых API сервисов.MapBuilder
: Второй аргумент методов field(FieldFn, Collection)
и field(String, Collection)
теперь может принимать значение null
.DefaultParamResolver
: Добавлена возможность управления объединением или заменой группы выражений, используемых методом groupExpr(...)
при помощи свойства gexprMerge
: https://gitee.com/troyzhxu/bean-searcher/issues/I9TAV6JoinParaSerializer
: Объединяет значения параметров типа коллекция в строку, разделенную запятыми.ArrayValueParamFilter
: Поддерживает передачу массивовых значений параметров совместно с методами MapUtils.flat(...)
и MapUtils.flatBuilder(...).
SuffixOpParamFilter
: Упрощает передачу параметров с использованием суффиксов операторов, таких как age-gt=25
вместо age=25 & age-op=gt
. * Добавление JsonArrayParamFilter
: Упрощает передачу параметров с использованием JSON массивов, таких как возраст=[20,30]
вместо возраст-0=20 & возраст-1=30
.AlwaysTrue
(всегда истинно: at
) и AlwaysFalse
(всегда ложно: af
): https://gitee.com/troyzhxu/bean-searcher/issues/I9TMFIOracleDialect
: Использует новую синтаксическую конструкцию offset ? rows fetch next ? rows only
для пагинации, поддерживающую версии Oracle 12c (выпущенные после июня 2013 года) и выше.ExprParser
: Добавлены константы логических символов, такие как &
для логического "И" и |
для логического "ИЛИ", которые больше не могут быть переопределены.FieldParam
: Внутренний класс Value
получил новый метод getIndex()
bean-searcher.params.group.mergeable
, указывающий, можно ли объединять группы выражений, по умолчанию true
.bean-searcher.params.filter.use-size-limit
, указывающий, следует ли использовать SizeLimitParamFilter
, по умолчанию true
. Используйте следующий текст:```markdownВключает ли
ArrayValueParamFilter`, значение по умолчанию — `true`.bean-searcher.params.filter.use-suffix-op
Включает ли SuffixOpParamFilter
, значение по умолчанию — false
.bean-searcher.params.filter.use-json-array
Включает ли JsonArrayParamFilter
, значение по умолчанию — false
.JoinParaSerializer
в виде бинов.bean-searcher.params.group.mergeable
Указывает, можно ли объединять групповые выражения, значение по умолчанию — true
.bean-searcher.params.filter.use-size-limit
Включает ли SizeLimitParamFilter
, значение по умолчанию — true
.bean-searcher.params.filter.use-array-value
Включает ли ArrayValueParamFilter
, значение по умолчанию — true
.bean-searcher.params.filter.use-suffix-op
Включает ли SuffixOpParamFilter
, значение по умолчанию — false
.bean-searcher.params.filter.use-json-array
Включает ли JsonArrayParamFilter
, значение по умолчанию — false
.JoinParaSerializer
в виде бинов.
Текст был корректно оформлен согласно правилам перевода.
JsonFieldConvertor
, теперь он поддерживает поля типа byte[]
, возвращаемые базой данных (например, поле JSON в базе данных H2)HAVING
, используемых в динамическом запросе с параметрами полей в базе данных PostgreSQL. В случае, когда это условие содержало алиас поля, которое присутствовало в списке выборки (SELECT
), генерировалось некорректное условие HAVING
. Эта особенность синтаксиса поддерживается в MySQL, но не поддерживается в PostgreSQL.ListFieldConvertor
: поля типа List
, для которых не указан тип базы данных (dbType
)bean-searcher-solon-plugin
для использования без необходимости конфигурацииsolon
2.7.5spring-boot
2.7.18slf4j-api
2.0.13NullPointerException
при использовании @SearchBean.fields
в некоторых случаяхJsonFieldConvertor
: теперь поддерживаются сложные JSON
массивы для конвертации в поля типа List<T>
order by
, когда поле сортировки по умолчанию @SearchBean.orderBy
является одним конкатенированным аргументом, и при запросе никакие параметры не передаются.SQL_DATE
для конфигурационного параметра bean-searcher.params.convertor.date-target
.SQL_TIMESTAMP
для конфигурационного параметра bean-searcher.params.convertor.date-time-target
.SQL_TIME
для конфигурационного параметра bean-searcher.params.convertor.time-target
.Bean Searcher
BaseSearcher
, добавлено свойство failOnParamError
, которое позволяет конфигурировать выбрасывание исключения при ошибке параметра; значение по умолчанию — false
.DateParamConvertor
, теперь поддерживаются преобразования подклассов java.util.Date
; также добавлено свойство target
, позволяющее конфигурировать целевой тип преобразования.DateTimeParamConvertor
, теперь поддерживаются преобразования подклассов java.util.Date
; также добавлено свойство target
, позволяющее конфигурировать целевой тип преобразования.TimeParamConvertor
, добавлено свойство target
, позволяющее конфигурировать целевой тип преобразования.Bean Searcher Boot Starter
bean-searcher.params.fail-on-error
, которая указывает, следует ли выбрасывать исключение при ошибке параметра; значение по умолчанию — false
.bean-searcher.params.convertor.date-target
.bean-searcher.params.convertor.date-time-target
.bean-searcher.params.convertor.time-target
.Bean Searcher Solon Plugin
bean-searcher.params.fail-on-error
, которая указывает, следует ли выбрасывать исключение при ошибке параметра; значение по умолчанию — false
.bean-searcher.params.convertor.date-target
.bean-searcher.params.convertor.date-time-target
.bean-searcher.params.convertor.time-target
.### 🐛 Исправление ошибокBean Searcher
IllegalArgumentException
, когда тип поля в сущностях является целым числом, а передаются буквы как параметрыNumberParamConvertor
и EnumParamConvertor
, теперь NumberParamConvertor
不再处理枚举字段的转换JsonFieldConvertor
, который теперь поддерживает преобразование JSON значений типа не String
(например: PGobject
) в объектыNumberParamConvertor
и EnumParamConvertor
, теперь NumberParamConvertor
больше не выполняет преобразование поля enumJsonFieldConvertor
, которое теперь поддерживает преобразование JSON значений типа не String
(например: PGobject
) в объектыNumberParamConvertor
и EnumParamConvertor
. Теперь NumberParamConvertor
не выполняет преобразование полей enum.JsonFieldConvertor
. Теперь он поддерживает преобразование JSON значений типа не String
(например: PGobject
) в объекты.DateFieldConvertor
поддерживает преобразование типа Instant
: https://gitee.com/troyzhxu/bean-searcher/pulls/9
EnumParamConvertor
для полей с типом enum автоматически конвертирует параметры типа String/Enum
в номер значения
(по умолчанию) или значение поля
(определено атрибутом @DbField.type
)PreparedStatement.setObject(...)
все равно выводится лог SQLEnumParamConvertor
EnumParamConvertor
DynamicDialect
и DynamicDialectSupport
для поддержки динамических диалектовFieldParam.Value.isEmptyValue()
, переименованная в FieldParam.Value.isEmpty()
AbstractSearcher
, переименован в BaseSearcher
tables
отсутствует в аннотации @SearchBean
у подкласса, то он будет пытаться наследовать его из аннотации родительского класса (TODO)DateTimeParamConvertor
, теперь она поддерживает парсинг параметров в форматах yyyy-MM-dd HH:mm:ss.SSS
, yyyy-MM
и yyyy
slf4j
до версии 2.0.7
bean-searcher.sql.dialect-dynamic
, указывающий на использование динамического диалекта, значение по умолчанию — false
DataSourceDialect
springboot
до версии 3.0.6
bean-searcher.sql.dialect-dynamic
, указывающий на использование динамического диалекта, значение по умолчанию — false
DataSourceDialect
solon
до версии 2.2.17
DefaultSqlExecutor