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
)LabelLoader
, который может использоваться для загрузки пользовательских LabelEnumLabelLoader
, который используется для загрузки Label для перечисленийbean-searcher.params.filter.use-index-array
для управления включением IndexArrayParamFilter
, по умолчанию false
bean-searcher.params.filter.use-index-array
для управления включением IndexArrayParamFilter
, по умолчанию false
JsonFieldConvertor
: теперь поддерживает преобразование всех составных генериковEnumParamConvertor
: несовместимость с пустыми строковыми параметрами* Улучшение `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`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`
> Всего 18 форматов времени для даты `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]` -- Серия форматов (новый)
Улучшение конфигурационных параметров, поддержка функции подсказок в IDEA (при условии установки плагина Solon)## 🐛 Исправления ошибок
Bean Searcher Boot Starter
v4.3.4
: https://gitee.com/troyzhxu/bean-searcher/issues/IB1Y6M
Bean Searcher
OracleTimestampFieldConvertor
, для совместимости с полем TIMESTAMP
в Oracle.field(..)
в конструкторе параметров, для совместимости с использованием неопределённых типов (коллекции/одиночных значений).var params = MapUtils.builder()
// ifTrue если true, возвращает List, иначе возвращает одиночное значение, типы совпадают, начиная с v4.3.4
.field(User::getId, ifTrue ? List.of(1, 2, 3) : 4)
.build();
var params = MapUtils.builder()
// ifTrue если true, возвращает массив, иначе возвращает одиночное значение, типы совпадают, начиная с v4.3.4
.field(User::getId, ifTrue ? new int[] {1, 2, 3} : 4)
.build();
var params = MapUtils.builder()
// ifTrue если true, возвращает массив объектов, иначе возвращает одиночное значение, типы совпадают, начиная с v4.3.4
.field(User::getId, ifTrue ? new Integer[] {1, 2, 3} : 4)
.build();
```* Bean Searcher Boot Starter
* Новый конфигурационный параметр `bean-searcher.field-convertor.use-oracle-timestamp` для управления включением `OracleTimestampFieldConvertor`, по умолчанию `true`
* Упрощение класса `BeanSearcherProperties`, определение внутренних подклассов как внешних классов
Bean Searcher Solon Plugin
bean-searcher.field-convertor.use-oracle-timestamp
для управления включением OracleTimestampFieldConvertor
, по умолчанию true
BeanSearcherProperties
, определение внутренних подклассов как внешних классов# v4.3.3 @ 2024-10-08BeanMeta
сохраняет порядок объявления полей в классе сущности (то есть порядок генерации условий)extractFieldParams(..)
в DefaultParamResolver
для возможности переопределения в подклассах, что облегчает пользовательскую настройкуcreateBeanMeta(..)
из DefaultMetaResolver
, что облегчает пользовательскую настройку подкласса BeanMeta
LRUCache
по умолчанию для DefaultGroupResolver
DateTimeParamConvertor
: поддержка целочисленных значений параметров времениSpringSqlExecutor
: исполнитель SQL с поддержкой транзакций Spring по умолчаниюbean-searcher.params.convertor.zone-id
: настройка временной зоны для DateTimeParamConvertor
SolonSqlExecutor
: исполнитель SQL с поддержкой транзакций Solon по умолчаниюbean-searcher.params.convertor.zone-id
: настройка временной зоны для DateTimeParamConvertor
empty()
в класс SearchResult
Добавление метода newNames()
в класс RpcNames
вместо метода 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`: добавлен метод `getSearchParam()`, который позволяет пользователям получать распарсенные параметры поиска в `SqlInterceptor`
* Улучшение `MapBuilder`: добавлены методы `or(. . )` и `and(. . )`, которые упрощают использование логических групп в бэкенде: https://gitee.com/troyzhxu/bean-searcher/issues/I9T66B
* Улучшение `MapBuilder`: добавлены методы `buildForRpc()` и `buildForRpc(RpcNames)`, которые позволяют создавать параметры для запроса к удалённым API-сервисам
* Улучшение `MapBuilder`: методы `field(FieldFn, Collection)` и `field(String, Collection)` теперь поддерживают передачу `null` в качестве второго параметра
* Улучшение `DefaultParamResolver`: добавлен атрибут `gexprMerge`, который позволяет контролировать, объединяются ли или заменяются ли переданные групповые выражения из фронтенда с помощью метода `groupExpr(. . )`: https://gitee.com/troyzhxu/bean-searcher/issues/I9TAV6
* Добавлен `JoinParaSerializer`: сериализатор для объединения параметров, который обрабатывает параметры типа коллекции, автоматически преобразуя их в строку, разделённую запятыми
* Добавлен `ArrayValueParamFilter`: используется в сочетании с методами `MapUtils. flat(. . )` и `MapUtils. flatBuilder(. . )`, чтобы поддерживать использование параметров типа массив, например, передача параметров из фронтенда: age=20 & age=30 & age-op=bt * Добавлен `SuffixOpParamFilter`: упрощает передачу параметров из фронтенда, например, age-gt=25 вместо age=25 & age-op=gt
* Добавлен `JsonArrayParamFilter`: упрощает передачу параметров из фронтенда, например, age=[20,30] вместо age-0=20 & age-1=30
* Добавлены операторы `AlwaysTrue` (всегда истинно: `at`) и `AlwaysFalse` (всегда ложно: `af`): https://gitee.com/troyzhxu/bean-searcher/issues/I9TMFI
* Обновление `OracleDialect`: использование нового синтаксиса пагинации `offset ? rows fetch next ? rows only`, поддерживающего только версии Oracle 12c (выпущенные в июне 2013 года) и выше
* Улучшение `ExprParser`: добавлены константы логических операторов, логические операторы `&` и `|` больше не поддерживают пользовательские значения
* Улучшение `FieldParam`: добавлен метод `getIndex()` для внутреннего класса `Value`
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
в виде бина* Bean Searcher Solon Pluginbean-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
в виде бина## 🌻 Улучшения* Обновлен Junit -> 5.10.2JsonFieldConvertor
, теперь поддерживает поля типа byte[]
, возвращаемые базой данных (например, поле JSON
в H2)having
с параметрами полей, которые присутствуют в списке select
, приводит к ошибке с использованием псевдонима (этот синтаксис поддерживается в MySQL, но не в PgSQL).ListFieldConvertor
для полей типа List
, где dbType
не указанbean-searcher-solon-plugin
для использования без конфигурации@SearchBean.fields
, в некоторых случаях возникает ошибка NullPointerException
JsonFieldConvertor
, теперь поддерживает преобразование сложных JSON массивов в поля типа List<T>
Исправлено: при использовании поля @SearchBean.orderBy
как единственного параметра для сортировки, и отсутствии других параметров при запросе, все еще генерируется подзапрос order by
.
https://gitee.com/troyzhxu/bean-searcher/issues/I8NT9X## 🌻 Улучшения
Обновлен Spring Boot -> 3.1.6
Обновлен Solon -> 2.6.2
Обновлен slf4j -> 2.0.9
Обновлен xjsonkit -> 1.4.3
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
BaseSearcher
, добавлено свойство failOnParamError
, которое позволяет настроить, будет ли выбрасываться исключение при ошибке параметра. Значение по умолчанию — false
.DateParamConvertor
, теперь поддерживает преобразование подклассов java.util.Date
и добавлено свойство target
, которое позволяет настроить тип конвертации.DateTimeParamConvertor
, теперь поддерживает преобразование подклассов java.util.Date
и добавлено свойство target
, которое позволяет настроить тип конвертации.TimeParamConvertor
, добавлено свойство target
, которое позволяет настроить тип конвертации.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.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 SearcherIllegalArgumentException
: https://gitee.com/troyzhxu/bean-searcher/issues/I7PZQ1
NumberParamConvertor
и EnumParamConvertor
, NumberParamConvertor
больше не обрабатывает преобразование полей типа enum
JsonFieldConvertor
, теперь поддерживает преобразование JSON значений, не являющихся строками (например, PGobject
), в объектыDateFieldConvertor
поддерживает преобразование типа Instant
: https://gitee.com/troyzhxu/bean-searcher/pulls/9
EnumParamConvertor
автоматически преобразует параметры типа String/Enum
в номера значений
(по умолчанию) или названия значений
(определённые атрибутом @DbField.type
)PreparedStatement.setObject(..)
всё равно выводится лог SQLEnumParamConvertor
EnumParamConvertor
Bean Searcher
Bean Searcher Boot Starter
Bean Searcher Solon Plugin
Обновление Solon до версии v2.3.8
Обновление SpringBoot до версии v3.1.1
Bean Searcher
DynamicDialect
и DynamicDialectSupport
для поддержки динамических диалектовFieldParam.Value.isEmptyValue()
в FieldParam.Value.isEmpty()
AbstractSearcher
в BaseSearcher
DateTimeParamConvertor
, теперь поддерживает парсинг параметров в форматах yyyy-MM-dd HH:mm:ss.SSS
, yyyy-MM
и yyyy
slf4j
до версии 2.0.7
Bean Searcher Boot Starter
bean-searcher.sql.dialect-dynamic
, которая указывает, включена ли поддержка динамических диалектов, по умолчанию false
DataSourceDialect
springboot
до версии 3.0.6
Bean Searcher Solon Plugin
bean-searcher.sql.dialect-dynamic
, которая указывает, включена ли поддержка динамических диалектов, по умолчанию false
DataSourceDialect
solon
до версии 2.2.17
DefaultSqlExecutor
SearchBean
DefaultDbMapping.BeanField
ParamConvertor
для конвертации параметров, даже если @DbField.type
имеет значение UNKNOWN
ParamResolver.Convertor
-> FieldConvertor.ParamConvertor
, тип входного параметра DbType
изменен на FieldMeta
name
в аннотацию @DbField
для явного указания имени параметраcluster
в аннотацию @DbField
для явного указания, является ли это агрегатным полемmapTo
в аннотацию @DbField
для явного указания, на какую таблицу следует отображатьfields
в аннотацию @SearchBean
для указания дополнительных динамических условий@SearchBean.groupBy
при использовании конкатенации параметровwhere
и having
при одновременном использовании groupBy
и groupExpr
GroupPairResolver
bean-searcher-boot-starter
)### 👨🏻💻 ВкладчикиБлагодарим всех вкладчиков, которые работали над этим выпуском:
JsonFieldConvertor
, добавление атрибута failOnError
, который позволяет настроить, следует ли автоматически захватывать исключения JSON-парсинга (то есть игнорировать)bean-searcher.field-convertor.json-fail-on-error
, который указывает, следует ли выбрасывать исключение при ошибке JSON-парсинга, по умолчанию true
xjsonkit
: https://gitee.com/troyzhxu/bean-searcher/issues/I6F4LS
cn.zhxu.bs.param.Operator
-> cn.zhxu.bs.FieldOps
MapUtils.of(..)
для статического метода.JsonFieldConvertor
конвертер поля, совместимый с @DbField(type = DbType.JSON)
для автоматического преобразования JSON полей в объекты, требуется добавить зависимость JSON (одна из следующих зависимостей):
cn.zhxu:xjsonkit-fastjson:1.4.2
cn.zhxu:xjsonkit-fastjson2:1.4.2
cn.zhxu:xjsonkit-gson:1.4.2
cn.zhxu:xjsonkit-jackson:1.4.2
cn.zhxu:xjsonkit-snack3:1.4.2
ListFieldConvertor
конвертер поля, который поддерживает автоматическое преобразование строковых полей в простые объекты List.NumberFieldConvertor
, теперь поддерживает взаимное преобразование между BigDecimal
и Integer Long Float Double Short Byte
.DefaultDbMapping
, добавлен метод setAroundChar(String)
, который поддерживает настройку символов-оболочки для идентификаторов, чтобы отличать системные зарезервированные слова (работает только для автоматически отображаемых таблиц и полей).MapUtils
, добавлены 4 удобных метода для создания Map: of(k, v)
, of(k1, v1, k2, v2)
.slf4j-api
-> 2.0.6
springboot
-> 3.0.2
* Bean Searcher Boot Starterbean-searcher.sql.default-mapping.around-char
, который позволяет настроить символы-оболочки для идентификаторов (например, символ ` в MySQL).bean-searcher.field-convertor.use-json
, который указывает, следует ли автоматически добавлять JsonFieldConvertor
, по умолчанию true
.bean-searcher.field-convertor.use-list
, который указывает, следует ли автоматически добавлять ListFieldConvertor
, по умолчанию true
.bean-searcher.field-convertor.list-item-separator
, который используется для настройки разделителя для преобразования строки в поле List.bean-searcher.field-convertor.date-formats
, теперь поддерживает использование -
вместо :
(так как :
в ключах yml по умолчанию фильтруется).Удалены методы search(), searchFirst(), searchList() и searchAll() из интерфейса Searcher
Добавлены методы:
Bean Searcher
groupId
изменены -> cn.zhxu
com.ejlchina.searcher
-> cn.zhxu.bs
joinCond
аннотации @SearchBean
.
@SearchBean
добавляет свойство timeout
, для контроля максимального времени выполнения медленных SQL-запросовgroupBy
и логической группировки, если переданные параметры находятся внутри groupBy
, используется условие в виде where
: https://gitee.com/troyzhxu/bean-searcher/issues/I5V4ON
Bean Searcher Boot Starter
v3.8.1
: https://github.com/troyzhxu/bean-searcher/issues/62
Исправлено написание даты "2bk22-08-23" на "2022-08-23".* Bean Searcher
Новое: защита от глубокой пагинации, максимальное разрешенное смещение пагинации по умолчанию 20000
Улучшение: при слишком больших параметрах поиска (порог можно настроить), запрос не выполняется, возвращается пустой результат
Улучшение: при слишком сложных (порог можно настроить) или неправильных логических выражениях группировки, запрос не выполняется, возвращается пустой результат
Улучшение: при неправильных параметрах сортировки, запрос не выполняется, возвращается пустой результат
Улучшение: повышение производительности параметров построения и пометка метода Builder.toFieldName
как устаревшего, добавление инструментария FieldFns
Улучшение: параметры построения добавляют методы asc(boolean sure)
и desc(boolean sure)
Улучшение: параметры построения добавляют метод putAll(Map<String, ?> params)
Улучшение: при размере пагинации меньше или равном 0
, запрос списка не выполняется
Улучшение: стандартизация сообщений об ошибках, все сообщения на английском
Bean Searcher Boot Starter
bean-searcher.params.filter.max-para-map-size
, по умолчанию 150
bean-searcher.params.group.max-expr-length
, по умолчанию 50
bean-searcher.params.pagination.max-allowed-offset
, по умолчанию 20000
bean-searcher.params.pagination.default-size
не должно быть больше значения параметра bean-searcher.params.pagination.max-allowed-offset
params. pagination. max-allowed-size, и оба должны быть больше
0`@SearchBean
: добавлено свойство having
, которое позволяет указывать условия группировки@DbField
: добавлено свойство type
, которое позволяет пользователю вручную указывать тип поля базы данных, соответствующего данному свойствуParamResolver
: добавлен конвертер параметров Convertor
, который позволяет преобразовывать типы значений параметров поиска в типы полей базы данных для лучшей совместимости с базами данных Oracle, PostgreSQL и т. д.BoolParamConvertor
, NumberParamConvertor
, DateParamConvertor
, TimeParamConvertor
и DateTimeParamConvertor
NotLike
(nk): https://github.com/troyzhxu/bean-searcher/issues/50
FieldOp.OpPara
: добавлен метод getFieldSql(String field)
, который позволяет пользователю настраивать получение информации о других полях внутри оператораDefaultDbMapping
: если значение аннотации @SearchBean.tables
представляет собой одну таблицу, то свойства аннотации @DbField
автоматически отображаютсяsql(...)
, который позволяет использовать пользовательские SQL-условия: https://github.com/troyzhxu/bean-searcher/issues/51
$
, пользовательские группы параметров не могут содержать $
), по умолчанию используется корневой параметр * Переработка FieldConvertor
: девять реализующих классов были перемещены из пакета com.ejlchina.searcher.implement
в пакет com.ejlchina.searcher.convertor
DialectWrapper
: перемещены из пакета com.ejlchina.searcher.implement
в пакет com.ejlchina.searcher.dialect
@SearchBean
: добавлено свойство where
, заменяющее свойство joinCond
, а свойство joinCond
помечено как устаревшееDateValueCorrector
, заменено DateParamConvertor
и DateTimeParamConvertor
NullValueFilter
и BoolValueFilter
(заменены BoolParamConvertor
)@DbField
, если значение аннотации @SearchBean.tables
представляет собой одну таблицуBean Searcher Boot Starter
ParamResolver.Convertor
как Spring Bean для расширения возможностей преобразования значений параметровbean-searcher.sql.use-date-value-corrector
spring-boot
до версии v2.6.9
# v3.7.1 @ 2022-06-22## 🌻 УлучшенияBean Searcher
параметр_строитель
: добавлены методы orderBy(FieldFn<T, ?> fieldFn)
, orderBy(String fieldName)
, asc()
и desc()
параметр_строитель
: методы onlySelect(..)
и selectExclude(..)
теперь поддерживают передачу строковых параметров, разделённых запятыми, например age,name
Bean Searcher Boot Starter
parameter_builder
: added methods orderBy(FieldFn<T, ?> fieldFn)
, orderBy(String fieldName)
, asc()
and desc()
parameter_builder
: methods onlySelect(..)
and selectExclude(..)
now support passing string parameters separated by commas, for example age,name
* Добавлено реализация диалекта `SqlServerDialect`, поддерживающая SQL Server 2012+
* Добавлен оператор `OrLike`, см. https://github.com/troyzhxu/bean-searcher/issues/38
* Улучшено `SqlExecutor`: добавлен интерфейс `SlowListener`, позволяющий пользователям слушать медленные SQL-запросы в коде
* Улучшено `DefaultDbMapping`: добавлен атрибут `underlineCase`, позволяющий настроить преобразование стиля `camelCase` в `snake_case` при автоматической маппинге
* Улучшено `Dialect`: добавлен метод `hasILike()`, который позволяет использовать ключевое слово `ilike` базы данных для улучшения производительности запросов при игнорировании регистра
* Улучшено `EnumFieldConvertor`: поддержка преобразования целых чисел в перечисления (по номеру перечисления)
* Улучшено `EnumFieldConvertor`: добавлен атрибут `failOnError`, который позволяет настроить вывод ошибки при невозможности преобразования неправильных значений, по умолчанию `true`
* Улучшено `EnumFieldConvertor`: добавлен атрибут `ignoreCase`, который позволяет настроить игнорирование регистра при сравнении строковых значений с перечислениями, по умолчанию `false`
* Улучшено логирование SQL: обычные SQL-запросы отображают время выполнения, а логи медленных SQL-запросов уровня `WARN` включают связанные с ними сущности
* Улучшено `DefaultSqlExecutor`: при выполнении запроса `count` и получении результата `0`, запрос `list` не выполняется
* Улучшено поведение методов `page(...)` и `limit(...)`)` параметра конструктора: начальные номера страниц также подчиняются настройкам страниц (разрушительное обновление)
* Улучшено `Dialect`: добавлено стандартное реализование для `toUpperCase()`, при создании пользовательского диалекта необходимо реализовать только метод `forPaginate()`
* Улучшено `DefaultParamResolver`: по умолчанию используется параметр `page` для разделения страниц
* Улучшено поведение `count` и `sum` в поиске: при отсутствии записей для подсчета, возвращается `0` вместо `null`, и снова улучшена производительность поиска
* Переработан `FetchType#ALL`: переименован в `FetchType#DEFAULT`
Bean Searcher Boot Starter
bean-searcher.sql.slow-sql-threshold
, который позволяет настроить порог медленных SQL-запросов (в миллисекундах), по умолчанию 500
bean-searcher.sql.default-mapping.underline-case
, который позволяет настроить преобразование стиля camelCase
в snake_case
при автоматической маппинге, по умолчанию true
bean-searcher.field-convertor.enum-fail-on-error
, который позволяет настроить вывод ошибки при невозможности преобразования неправильных значений, по умолчанию true
bean-searcher.field-convertor.enum-ignore-case
, который позволяет настроить игнорирование регистра при сравнении строковых значений с перечислениями, по умолчанию false
SqlExecutor
SlowListener` для слушания медленных SQL-запросовbean-searcher.sql.диалект
(dialect) установлен как SqlServer
для использования диалекта SQL Serverspring-boot
-> v2.6.8
# v3.6.3 v3.5.5 @ 2022-05-11## 🐛 Исправления ошибокИсправлено возникновение ошибки NoSuchMethodError
при наличии поля типа LocalDate
в сущностях при использовании JDK8: https://github.com/troyzhxu/bean-searcher/issues/43
spring-boot -> Yöntem Bulunamadı
при наличии поля типа LocalDate
в сущностях при использовании JDK8: https://github.com/troyzhxu/bean-searcher/issues/43
spring-boot -> 2.6.7
spring-boot -> 2.6.7
@SearchBean
с указанием свойства groupBy
в сущностях, не поддерживалось суммирование полейpage(..)
и limit(..)
в MapUtils.builder(..)
не подчинялись ограничению конфигурации max-allowed-size
BoolNumFieldConvertor
: поддерживает конвертацию в направлении Boolean -> Number
SearcherBuilder
: добавлен метод addResultFilter(..)
bean-searcher.field-convertor.use-bool-num
, позволяющий автоматически настроить BoolNumFieldConvertor
, по умолчанию установлено значение true
page(..)
и limit(..)
в MapUtils.builder(..)
не подчинялись ограничению конфигурации max-allowed-size
page(..)
и limit(..)
в MapUtils.builder(..)
не подчинялись ограничению конфигурации max-allowed-size
Исправлены ошибки в тексте:
Yöntem Bulunamadı
переведено как NoSuchMethodError
@SearchBean
для сущностных классов поддерживают экранирование символа :
с помощью \\:
@SearchBean
для сущностных классов получила новое свойство orderBy
, которое позволяет указать по умолчанию поле для сортировки@SearchBean
для сущностных классов получила новое свойство sortType
, которое позволяет указать тип ограничений сортировки@SearchBean
для сущностных классов, когда указывается свойство groupBy
, поддерживает запросы на суммирование полейResultFilter
, которая позволяет пользователям выполнять дополнительную настройку результатов поискаPostgreSqlDialect
, который может использоваться для баз данных PostgreSQLSqlResult
, который теперь не связан с JDBC, что облегчает переписывание SqlExecutor
с использованием других ORMSqlInterceptor
, метод intercept(. . )
которого получил новое свойство FetchType
B2MFieldConvertor
, который позволяет BFieldConvertor
использовать MapSearcher
поисковикaddDataSource(. . )
из класса DefaultSqlExecutor
, который был помечен как устаревший в версии v3. 0. 0
addFormat(. . )
из класса DateFormatFieldConvertor
, который был помечен как устаревший в версии v3. 0. 1
* При использовании оператора in/Include
выводится предупреждение, рекомендующее использовать оператор ct/Contain
mv/MultiValue
выводится предупреждение, рекомендующее использовать оператор il/InList
bean-searcher.sql.default-mapping.inherit-type
, который позволяет указать тип наследования сущностных классов по умолчанию, по умолчанию ALL
bean-searcher.sql.default-mapping.sort-type
, который позволяет указать тип ограничений сортировки по умолчанию, по умолчанию ALLOW_PARAM
ResultFilter
для BeanSearcher
и MapSearcher
поисковиков с помощью Spring Bean
bean-searcher.sql.dialect
поддерживает указание PostgreSQL
или PgSQL
для использования диалекта PostgreSqlbean-searcher.field-convertor.use-b2-m
, который позволяет указать, следует ли использовать B2MFieldConvertor
, по умолчанию false
Boolean
, когда передается пустая строка в качестве параметра при поиске, BoolValueFilter
преобразует это в true
: https://github.com/troyzhxu/bean-searcher/issues/29
field(FieldFn<T, ?> fieldFn, Collection<?> values)
и field(String fieldName, Collection<?> values)
, которые позволяют передавать коллекции значений для полейДобавлены компоненты GroupResolver
, ExprParser
и другие, которые реализуют параметризацию групп, логические отношения, выражения, вычисления, упрощение и анализ
DefaultParamResolver
теперь поддерживает свойства gexprName
и groupSeparator
для указания формата имени групповых параметров
MapBuilder
(параметр-строитель) теперь поддерживает метод group(String group)
для создания групповых параметров
MapBuilder
теперь поддерживает метод groupExpr(String expr)
для указания логических отношений между группами параметров
Добавлен TimeFieldConvertor
, который поддерживает преобразование между java.sql.Time
и LocalTime
Аннотация @DbField
теперь поддерживает свойство alias
для ручного указания псевдонима поля (если не указано, то псевдоним генерируется автоматически)
Bean Searcher Boot Starter
bean-searcher.params.group.enable
, который позволяет указать использование групповых параметров в конфигурационном файле, по умолчанию true
bean-searcher.params.group.expr-name
, который позволяет указать имя группового выражения параметра, по умолчанию gexpr
bean-searcher.params.group.expr-cache-size
, который позволяет указать размер кэша для анализа групповых выражений, по умолчанию 50
bean-searcher.params.group.separator
, который позволяет указать разделитель групповых параметров, по умолчанию .
bean-searcher.field-convertor.
use-time, который указывает, следует ли автоматически добавлять
TimeFieldConvertor, по умолчанию
true`# v3. 4. 3 @ 2022-02-21## 🐛 Исправления ошибокИсправлен баг с неправильной работой оператора StartWith
(впервые появился в версии v3.4.2
)
java.sql.Date
в LocalDate / LocalDateTime
конвертером DateFieldConvertor
LocalDate / LocalDateTime
конвертером DateFieldConvertor
java.sql.Date / java.sql.Time
конвертером DateFormatFieldConvertor
@SearchBean
и его пустом значении, параметр не будет участвовать в подзапросе where
java.sql.Date
в LocalDate / LocalDateTime
конвертером DateFieldConvertor
LocalDate / LocalDateTime
конвертером DateFieldConvertor
java.sql.Date / java.sql.Time
конвертером DateFormatFieldConvertor
Bean Searcher
slf4j-api
с версии 1.7.32 до 1.7.35Bean Searcher Boot Starter
spring-boot
с версии 2.6.2 до 2.6.3Исправлен баг с невозможностью конвертации java.sql.Date
в LocalDate / LocalDateTime
конвертером DateFieldConvertor
Исправлен баг с смещением часовых поясов при конвертации LocalDate / LocalDateTime
конвертером DateFieldConvertor
Исправлен баг с невозможностью форматирования java.sql.Date / java.sql.Time
конвертером DateFormatFieldConvertor
java.sql.Date
в LocalDate / LocalDateTime
конвертером DateFieldConvertor
LocalDate / LocalDateTime
конвертером DateFieldConvertor
java.sql.Date / java.sql.Time
конвертером DateFormatFieldConvertor
BoolFieldConvertor
, теперь поддерживается конвертация Boolean -> boolean
DataSource
, теперь поддерживаются проекты Grailsjava.sql.Date
в LocalDate / LocalDateTime
конвертером DateFieldConvertor
LocalDate / LocalDateTime
конвертером DateFieldConvertor
java.sql.Date / java.sql.Time
конвертером DateFormatFieldConvertor
MapBuilder.orderBy(..)
, теперь поддерживает несколько вызовов для сортировки по нескольким полямorderBy
, который можно использовать в формате orderBy=age:asc,time:desc
для указания нескольких полей для сортировкиDefaultSqlResolver
, Dialect
, SqlSnippet
и другиеStringUtils.firstCharToUpperCase(..)
DefaultDbMapping
добавлен атрибут ignoreFields
, который позволяет настроить глобальное игнорирование полей@SearchBean
добавлен атрибут ignoreFields
, который позволяет настроить игнорирование полей для отдельного класса (можно игнорировать поля родительского класса)bean-searcher.sql.default-mapping.ignore-fields
, который позволяет указать глобальное игнорирование полей в конфигурационном файлеbean-searcher.params.order-by
, который позволяет указать имя параметра сортировки в конфигурационном файлеslf4j-api
с версии 1.7.32 до 1.7.35spring-boot
с версии 2.6.2 до 2.6.3BoolFieldConvertor
, теперь поддерживает конвертацию Boolean
-> boolean
# v3.2.3 @ 2022-01-30BoolFieldConvertor
, теперь поддерживает конвертацию Boolean
-> boolean
BeanSearcherAutoConfiguration
, теперь не требуется обязательное наличие DataSource
bean-searcher-boot-starter
в проектах GrailsMapBuilder
добавлен метод op(Class<? extends FieldOp> op)
DateValueCorrector
, теперь можно настроить поддерживаемые операторыbean-searcher.sql.use-date-value-corrector
, который позволяет настроить использование DateValueCorrector
bean-searcher-boot-starter
в проектах GrailsOperator
, теперь они могут быть использованы напрямую в @DbField.onlyOn
(совместимо с предыдущими версиями, что облегчает обновление)DataSource
new
для одного и того же поля приводило к увеличению размера FieldOpPool
DateValueCorrector
, чтобы она поддерживала поля типа LocalDateTime
DataSourceAutoConfiguration
, а конфигурировалась автоматически при наличии DataSource
FieldOp
, который пользователи могут использовать для расширения своих операторов полейFieldOpPool
, который пользователи могут использовать для создания собственных операторов полейNotIn
/ ni
и NotBetween
/ nb
MultiValue
/ mv
переименован в InList
/ il
(старые операторы по-прежнему доступны)DefaultDbMapping
добавлен атрибут redundantSuffixes
, который позволяет конфигурировать удаление избыточных суффиксов из названий таблиц для сущностей (например, VO, DTO и т.д.)Dialect
: удалены методы truncateToDateStr
, truncateToDateMinuteStr
и truncateToDateSecondStr
bean-searcher.sql.default-mapping.redundant-suffixes
, который позволяет конфигурировать несколько избыточных суффиксовFieldOp
для расширения нового оператора полейFieldOpPool
для создания нового набора операторов полей@DbIgnore
автоматически игнорируются статические и транзитные поля в сущностяхEmpty
и NotEmpty
для нестроковых полей: https://gitee.com/troyzhxu/bean-searcher/issues/I4N1MG# v3.1.3 @ 2021-12-14@DbIgnore
автоматически игнорируются статические поля в сущностяхSearcher
по умолчанию инжектируется MapSearcher
, что больше не вызывает ошибок@DbIgnore
автоматически игнорируются статические поля в сущностяхSearcher
по умолчанию инжектируется MapSearcher
, что больше не вызывает ошибокПереработка FieldConvertor
: удаление избыточного параметра targetType
Добавление EnumFieldConvertor
: для конвертации полей перечислений
Поддержка наследования в классе SearchBean (можно наследовать аннотацию @SearchBean и отображаемые поля)
Добавление свойства inheritType
в аннотацию @SearchBean
: для управления правилами наследования
Добавление свойства defaultInheritType
в класс DefaultDbMapping
: для конфигурации правил наследования по умолчанию для сущностей
Поддержка пропуска методов установки (setter) для отображаемых полей в классе SearchBean
Добавление оператора ct
(сокращение от Contain
): для замены оператора in
(сокращение от Include
), использование in
будет выдавать предупреждение
Bean Searcher Boot Starter
bean-searcher.field-convertor.use-enum
: указывает, следует ли автоматически добавлять EnumFieldConvertor
, значение по умолчанию true
bean-searcher.use-map-searcher
: указывает, следует ли автоматически создавать MapSearcher
, значение по умолчанию true
bean-searcher.use-bean-searcher
: указывает, следует ли автоматически создавать BeanSearcher
, значение по умолчанию true
## 🌻 УлучшенияBean Searcher Boot Starter
Searcher
для внедрения поискового механизма, по умолчанию внедряется MapSearcher
, больше не выдаёт ошибкуJDBC
, совместимость с sharding-jdbc
Operator.from(Object)
MapBuilder
, добавление проверки на пустотуDefaultSqlResolver
для удобства переиспользования в подклассахBFieldConvertor
и MFieldConvertor
конвертеров полей: для повышения производительности конвертации полей
DateFieldConvertor
: для поддержки конвертации между типами Date
и LocalDateTime
DateFormatFieldConvertor
: для поддержки форматирования объектов типа Temporal
и его подклассовDateFormatFieldConvertor
: добавление метода setZoneId(ZoneId)
: для конфигурации часового поясаDefaultSqlExecutor
: добавление метода setTransactionIsolation(int level)
: для конфигурации уровня изоляции транзакцийDbMapping
: для полного управления процессом разбора отображения данных и извлечения DefaultDbMapping
из внутреннего использования в DefaultMetaResolver
DefaultDbMapping
: для поддержки конфигурации префикса таблиц по умолчанию и включения/отключения отображения в верхнем регистре, то есть поддержка отображения таблиц и столбцов в верхнем регистре по умолчаниюNamedDataSource
для добавления нескольких именованных данных источниковspring-boot-starter-jdbc
NumberFieldConvertor
StrNumFieldConvertor
BoolFieldConvertor
DateFieldConvertor
* По умолчанию автоматическая конфигурация добавляет DateFormatFieldConvertor
searchCount
и searchSum
, получение SQL результата приводило к ошибкеDateFormatFieldConvertor
добавлен метод setFormat
joinCond
аннотации @SearchBean
, в SQL запросах с условиями отсутствовал один левый скобочный символ после where
Версия документа: markdown
Исходный язык: китайский
Финальный язык: русский#### Bean Searcher* Упрощение интерфейса Searcher, удаление ненужных методов (методы поиска с последним параметром prefix
были удалены)
SearchPlugin
и SpringSearcher
, так как использование Bean Searcher в версии v3.0 проще, чем использование этих вспомогательных классовSearcherStarter
)Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )