Провайдеры данных
Стандартные провайдеры
Библ иотека компонентов
http://n2oapp.net/framework/config/schema/data-provider-1.0
<sql>
Вызов SQL запросов.
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
data-source | Строка | Jndi имя jdbc источника данных | Основной DataSource приложения |
file | Строка | Путь к файлу .sql в ресурсах проекта | |
row-mapper | map index | Способ получения значений из jdbc в запросах sql | map |
connection-url | Строка | URL подключения к базе данных | |
username | Строка | Имя пользователя | |
password | Строка | Пароль | |
driver-class-name | Строка | JDBC драйвер |
Тело
SQL запрос.
В запросе могут быть использованы плейсхолдеры через "двоеточие".
Пример
<sql>
UPDATE mytable SET :params WHERE id = :id;
</sql>
Плейсхолдер :params собирается по телу входящих параметров операции.
<query>
<list>
<sql>
SELECT :select
FROM mytable :join
WHERE :filters
ORDER BY :sorting
OFFSET :offset
LIMIT :limit
</sql>
</list>
</query>
Плейсхолдеры :select, :filters, :sorting, :join, :limit, :offset собираются по критериям выборки.
<mongodb>
Вызов запросов к MongoDb.
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
connection-url | Строка | Адрес подключения | ||
database-name | Строка | Имя базы данных | ||
collection-name | Строка | Имя коллекции документов | ! | |
operation | find insertOne updateOne deleteOne deleteMany countDocuments | Операция, выполняемая провайдером |
Пример
<query>
<list>
<mongodb connection-url="mongodb:/testurl"
database-name="dbName"
collection-name="user"
operation="find"/>
</list>
</query>
<graphql>
Вызов GraphQl запросов.
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
endpoint | Строка | URL точки подключения | |
access-token | Строка | Токен доступа | |
page-mapping | Строка | Маппинг поля страницы выборки в запросе | |
size-mapping | Строка | Маппинг поля размера выборки в запросе | |
filter-separator | Строка | Разделитель фильтров | and |
filter-prefix | Строка | Префикс фильтра | |
filter-suffix | Строка | Суффикс фильтра | |
sorting-separator | Строка | Разделитель сортировок | , |
sorting-prefix | Строка | Префикс сортировки | |
sorting-suffix | Строка | Суффикс сортировки | |
forwarded-headers | Строка | Заголовки, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех) | |
forwarded-cookies | Строка | Cookie, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех) | |
enums | Строка | Список плейсхолдеров, которые имеют тип перечислений |
Тело
GraphQl запрос.
Пример
<query>
<list>
<graphql>
query Persons($name: String, $age: Int, $addresses: [Address!]) {
persons(name: $name, age: $age, addresses: $addresses) {
id
name
age
}
}
<graphql/>
</list>
</query>
<object>
<operation id="create">
<invocation>
<graphql>
mutation {
createPerson(name: $$name, age: $$age, addresses: $$addresses) {
id
name
age
address: {
street
}
}
}
</graphql>
</invocation>
<in>
<field id="name"/>
<field id="age"/>
<list id="addresses">
<field id="street"/>
</list>
</in>
</operation>
</object>
В запросе могут быть использованы плейсхолдеры через использование указателя в виде: $$
(например: $$name
).
Служебные плейсхолдеры
Наименование | Описание |
---|---|
$$select | Собирает и объединяет тела полей запроса |
$$filters | Собирает и объединяет тела фильтров запроса |
$$sorting | Собирает и объединяет тела сортировок запроса |
$$limit | Количество элементов на странице |
$$page | Номер страницы |
$$offset | Смещение элементов страницы |
Пример
<query>
<list>
<graphql>
query persons(filters: { $$filters }, page: $$page, size: $$limit, sort: { $$sorting }) {
$$select
}
<graphql/>
</list>
<fields>
<field id="id">
<select>id</select>
</field>
<field id="name">
<!-- при указании тела в select оно будет добавлено в $$select плейсхолдер -->
<select>name</select>
<!-- при указании тела в фильтре оно будет добавлено в $$filters плейсхолдер -->
<filters>
<eq filter-id="name">{ name: {eq: $$name } }</eq>
</filters>
<!-- при указании тела в sorting оно будет добавлено в $$sorting плейсхолдер -->
<sorting mapping="['nameDir']">{ name: $$nameDir }</sorting>
</field>
<field id="age">
<select>age</select>
<filters>
<eq filter-id="age">{ age: {ge: $$age } }</eq>
</filters>
<sorting mapping="['ageDir']">{ age: $$ageDir }</sorting>
</field>
</fields>
</query>
<rest>
Вызов REST запросов.
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
method | get, post, put, delete | Http метод запроса | get |
filters-separator | Строка | Разделитель между фильтрами | & |
sorting-separator | Строка | Разделитель между сортировками | & |
select-separator | Строка | Разделитель между столбцами | & |
join-separator | Строка | Разделитель между присоединёнными таблицами | & |
proxy-host | Строка | Адрес прокси | |
proxy-port | Строка | Порт прокси | |
forwarded-headers | Строка | Заголовки, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех) | |
forwarded-cookies | Строка | Cookie, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех) |
Тело
Запрос REST
В запросе могут быть использованы плейсхолдеры в фигурных скобках.
Пример
<rest method="put">
/myservice/myentity/{id}
</rest>
<query>
<list result-mapping="content" count-mapping="totalElements">
<rest method="get" filters-separator=";">
/myservice/myentity/findAll;{filters}?{sortings}&offset={offset};&limit={limit}
</rest>
</list>
</query>
{
"content" : [{}, {}, ...],
"totalElements" : 100500
}
Плейсхолдеры {select}, {filters}, {sorting}, {join}, {limit}, {offset}, {page} собираются по критериям выборки.
<java>
Вызов java методов.
Если не указан IoC контейнер (Spring, EJB), то будет вызов static метода.
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
class | Строка | Полное имя java класса | Из атрибута service-class в объекте | |
method | Строка | Имя java метода | ! |
Тело
<arguments> - Аргументы метода
<spring> - Вызов Spring бинов
<ejb> - Вызов EJB бинов
Пример
<java
class="com.example.MyService"
method="calcSum">
<arguments>
<argument name="a" type="primitive"/>
<argument name="b" type="primitive"/>
</arguments>
<spring/>
</java>
package com.example;
public class MyService {
public static int calcSum(int a, int b) {
return a + b;
}
}
<query>
<list count-mapping="count" result-mapping="list">
<java
class="com.example.MyService"
method="getList">
<arguments>
<argument
type="criteria"
class="com.example.MyCriteria"/>
</arguments>
</java>
</list>
</query>
package com.example;
public class MyService {
public static List<MyEntity> getList(MyCriteria filters) {
...
}
}
Фильтры, сортировки, паджинация и другие параметры выборки устанавливаются в объект типа criteria. Поддерживаются интерфейсы org.springframework.data.domain.Pageable, org.springframework.data.domain.Sort, org.springframework.data.domain.Example, net.n2oapp.criteria.api.Criteria.