Провайдеры данных
Стандартные провайдеры
Библиотека компонентов
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.
<arguments>
Аргументы метода.
Порядок следования XML элементов соответствует порядку следования аргументов метода.
<argument>
Аргумент метода.
Атрибуты
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| name | Строка | Наименование аргумента метода | |
| type | primitive class entity criteria | Тип аргумента | |
| class | Строка | Полное имя java класса аргумента | Для type="primitive" определяется автоматически. Для type="entity" определяется по атрибуту entity-class объекта. |
| default-value | Строка | Значение по умолчанию |
<spring>
Вызов Spring бинов.
Атрибуты
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| bean | Строка | Идентификатор Spring бина | Если не задан bean, то будет поиск по class. |
Пример
<java method="calc">
<spring bean="calculator"/>
</java>
<ejb>
Вызов EJB бинов.
Подключение
<dependency>
<groupId>net.n2oapp.framework</groupId>
<artifactId>n2o-spring-boot-starter</artifactId>
<version>${n2o.version}</version>
</dependency>
Атрибуты
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| bean | Строка | Идентификатор EJB бина | |
| protocol | Строка | Протокол URI | |
| application | Строка | Имя ear приложения | |
| module | Строка | Имя ejb модуля | |
| distinct | Строка | Имя участка | |
| statefull | true false | С состоянием или без | false |
| uri | Строка | Адрес remote бина | Составляется из protocol, application, module, distinct, bean, statefull. |
Пример
<java class="com.example.MyClass" method="mycall">
<ejb
protocol="ejb"
application="myapp"
module="mymodule"
bean="mybean"/>
</java>