Skip to main content

Провайдеры данных

Стандартные провайдеры

Библиотека компонентов

http://n2oapp.net/framework/config/schema/data-provider-1.0

<sql>

Вызов SQL запросов.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
data-sourceСтрокаJndi имя jdbc источника данныхОсновной DataSource приложения
fileСтрокаПуть к файлу .sql в ресурсах проекта
row-mappermap indexСпособ получения значений из jdbc в запросах sqlmap
connection-urlСтрокаURL подключения к базе данных
usernameСтрокаИмя пользователя
passwordСтрокаПароль
driver-class-nameСтрокаJDBC драйвер

Тело

SQL запрос.

note

В запросе могут быть использованы плейсхолдеры через "двоеточие".

Пример

<sql>
UPDATE mytable SET :params WHERE id = :id;
</sql>
note

Плейсхолдер :params собирается по телу входящих параметров операции.

SQL запрос для <query>
<query>
<list>
<sql>
SELECT :select
FROM mytable :join
WHERE :filters
ORDER BY :sorting
OFFSET :offset
LIMIT :limit
</sql>
</list>
</query>
note

Плейсхолдеры :select, :filters, :sorting, :join, :limit, :offset собираются по критериям выборки.

<mongodb>

Вызов запросов к MongoDb.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчаниюОбязательность
connection-urlСтрокаАдрес подключения
database-nameСтрокаИмя базы данных
collection-nameСтрокаИмя коллекции документов!
operationfind insertOne updateOne deleteOne deleteMany countDocumentsОперация, выполняемая провайдером

Пример

Запрос к MongoDb для <query>
<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 запрос.

Пример

Запрос к GraphQl для <query> с использованием variables
<query>
<list>
<graphql>
query Persons($name: String, $age: Int, $addresses: [Address!]) {
persons(name: $name, age: $age, addresses: $addresses) {
id
name
age
}
}
<graphql/>
</list>
</query>
Запрос к GraphQl для <object> с использованием плейсхолдеров
<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>
note

В запросе могут быть использованы плейсхолдеры через использование указателя в виде: $$ (например: $$name).

Служебные плейсхолдеры

НаименованиеОписание
$$selectСобирает и объединяет тела полей запроса
$$filtersСобирает и объединяет тела фильтров запроса
$$sortingСобирает и объединяет тела сортировок запроса
$$limitКоличество элементов на странице
$$pageНомер страницы
$$offsetСмещение элементов страницы

Пример

Запрос к GraphQl с использованием различных плейсхолдеров
<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 запросов.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
methodget, post, put, deleteHttp метод запросаget
filters-separatorСтрокаРазделитель между фильтрами&
sorting-separatorСтрокаРазделитель между сортировками&
select-separatorСтрокаРазделитель между столбцами&
join-separatorСтрокаРазделитель между присоединёнными таблицами&
content-typeСтрокаТип контентаapplication/json
proxy-hostСтрокаАдрес прокси
proxy-portСтрокаПорт прокси
forwarded-headersСтрокаЗаголовки, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех)
forwarded-cookiesСтрокаCookie, которые должны быть скопированы из запроса клиента(через запятую или '*' для всех)

Тело

Запрос REST

note

В запросе могут быть использованы плейсхолдеры в фигурных скобках.

Пример

<rest method="put">
/myservice/myentity/{id}
</rest>
REST запрос для <query>
<query>
<list result-mapping="content" count-mapping="totalElements">
<rest method="get" filters-separator=";">
/myservice/myentity/findAll;{filters}?{sortings}&amp;offset={offset};&amp;limit={limit}
</rest>
</list>
</query>
Результат REST запроса для <query>
{
"content" : [{}, {}, ...],
"totalElements" : 100500
}
note

Плейсхолдеры {select}, {filters}, {sorting}, {join}, {limit}, {offset}, {page} собираются по критериям выборки.

<java>

Вызов java методов.

note

Если не указан 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>
Java класс с методом calcSum
package com.example;

public class MyService {
public static int calcSum(int a, int b) {
return a + b;
}
}
Вызов java метода для <query>
<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>
Java класс с методом getList
package com.example;

public class MyService {
public static List<MyEntity> getList(MyCriteria filters) {
...
}
}
note

Фильтры, сортировки, паджинация и другие параметры выборки устанавливаются в объект типа criteria. Поддерживаются интерфейсы org.springframework.data.domain.Pageable, org.springframework.data.domain.Sort, org.springframework.data.domain.Example, net.n2oapp.criteria.api.Criteria.

<arguments>

Аргументы метода.

note

Порядок следования XML элементов соответствует порядку следования аргументов метода.

<argument>

Аргумент метода.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
nameСтрокаНаименование аргумента метода
typeprimitive 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СтрокаИмя участка
statefulltrue 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>

Spring Data

Вызов Spring Data сервисов.

Подключение

<dependency>
<groupId>net.n2oapp.framework</groupId>
<artifactId>n2o-engine-spring</artifactId>
<version>${n2o.version}</version>
</dependency>

Библиотека компонентов

http://n2oapp.net/framework/config/schema/spring-data-1.0
note

Поддерживаются интерфейсы CrudRepository, PagingAndSortingRepository, JpaRepository, QueryByExampleExecutor, JpaSpecificationExecutor, QueryDslPredicateExecutor.

Пример

<find-all
service-class="com.example.MyService"
entity-class="com.example.MyEntity"
executor="specification"/>
Spring Data сервис
public interface MyService extends JpaRepository<MyEntity>, JpaSpecificationExecutor {
//метод findAll в JpaSpecificationExecutor
}

Базовые свойства

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
service-classСтрокаКласс сервисаИз атрибута service-class в объекте
entity-classСтрокаКласс целевой сущностиИз атрибута entity-class в объекте
beanСтрокаИдентификатор Spring бинаПоиск бина по классу.
executorexample specification querydslСпособ задания критериев запросаЕсли не задан, то поиск без критериев.
<arguments>

Аргументы метода. Аналогично аргументам java провайдера.

<find-one>

Поиск одного элемента по идентификатору или критериям.

Пример

<find-one
service-class="com.example.MyService"
entity-class="com.example.MyEntity"/>
Spring Data сервис
public interface MyService extends JpaRepository<MyEntity> {
//метод findOne в JpaRepository
}

<find-all>

Поиск списка (List, Slice, Page) элементов по критериям.

Пример

<find-all
service-class="com.example.MyService"
entity-class="com.example.MyEntity"
executor="example"/>
Spring Data сервис поиска по Example
public interface MyService extends JpaRepository<MyEntity>, QueryByExampleExecutor {
//метод findAll в QueryByExampleExecutor
}

<find-by>

Поиск списка (List, Slice, Page) элементов или одного элемента по не стандартным методам.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
methodСтрокаПолное название метода Spring Data сервиса

Пример

<find-by method="findByLastname"
service-class="com.example.PersonRepository"
entity-class="com.example.Person">
<arguments>
<argument name="lastname" type="primitive"/>
</arguments>
</find-by>
Spring Data сервис поиска по Lastname
public interface PersonRepository extends Repository<Person, Long> {
List<Person> findByLastname(String lastname);
}

<count>

Подсчёт количества записей по критериям.

<exists>

Определение существования записи по идентификатору или критериям.

<save>

Создание или изменение записи.

<delete>

Удаление одной записи по идентификатору или критериям.

<delete-all>

Удаление списка записей по критериям.

<invoke>

Вызов произвольного метода.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
methodСтрокаПолное название метода Spring Data сервиса

Пример

<invoke method="close"
service-class="com.example.MyService">
<arguments>
<argument name="id" type="primitive"/>
</arguments>
</invoke>
Spring Data сервис с методом close
public interface MyService extends Repository<MyEntity, Long> {
void close(Long id);
}