Провайдеры данных
Стандартные провайдеры
Библиотека компонентов
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 | Строка | Разделитель между присоединёнными таблицами | & |
content-type | Строка | Тип контента | application/json |
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>
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
Поддерживаются интерфейсы CrudRepository, PagingAndSortingRepository, JpaRepository, QueryByExampleExecutor, JpaSpecificationExecutor, QueryDslPredicateExecutor.
Пример
<find-all
service-class="com.example.MyService"
entity-class="com.example.MyEntity"
executor="specification"/>
public interface MyService extends JpaRepository<MyEntity>, JpaSpecificationExecutor {
//метод findAll в JpaSpecificationExecutor
}
Базовые свойства
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
service-class | Строка | Класс сервиса | Из атрибута service-class в объекте |
entity-class | Строка | Класс целевой сущности | Из атрибута entity-class в объекте |
bean | Строка | Идентификатор Spring бина | Поиск бина по классу. |
executor | example specification querydsl | Способ задания критериев запроса | Если не задан, то поиск без критериев. |
<arguments>
Аргументы метода. Аналогично аргументам java провайдера.
<find-one>
Поиск одного элемента по идентификатору или критериям.
Пример
<find-one
service-class="com.example.MyService"
entity-class="com.example.MyEntity"/>
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"/>
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>
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>
public interface MyService extends Repository<MyEntity, Long> {
void close(Long id);
}