Создание высокопроизводительных Java-приложений для доступа к данным: Часть 1. Введение в программирование pureQuery

Как добиться максимальной безопасности и гибкости

purpureQuery – это высокопроизводительная Java™-платформа для доступа к данным, ориентированная на упрощение разработки приложений, которые обращаются к данным, и управления ими. Она состоит из инструментальных средств, интерфейсов прикладных программ (API) и среды исполнения. В данной статье описан стиль программирования на основе аннотированных методов – простой и гибкий стиль, основанный на парадигме именованных запросов, которая позволяет исполнять запросы SQL статически или динамически. В статье объясняется, почему разработчик для создания приложения pureQuery может предпочесть стиль на основе аннотированных методов, приводятся некоторые различия между стилями программирования на основе аннотированных методов и на основе встроенных методов pureQuery и содержится краткий обзор наиболее мощных функций стиля программирования на основе аннотированных методов pureQuery.

Хитер Лам, инженер-программист, IBM  

Heather LambХитер Лам (Heather Lamb) трудится в группе разработчиков среды исполнения pureQuery в лаборатории IBM Silicon Valley Lab.



Dave Manning, programmer, Terway.com

here is some bio text



24.09.2009

Обзор

pureQuery

Инструментарий pureQuery входит в состав IBM Data Studio, и его можно получить вместе с IBM Data Studio pureQuery Runtime или IBM Data Studio Developer.

В этой статье рассматриваются следующие темы, относящиеся к стилю программирования на основе аннотированных методов:

  • описание стиля программирования на основе аннотированных методов;
  • возможные причины выбора стиля программирования на основе аннотированных методов;
  • этапы разработки приложений pureQuery в стиле аннотированных методов (вы можете сразу перейти к этому разделу);
  • описание процесса генерации кода и примеры сгенерированного кода;
  • требования по определению аннотированных методов в интерфейсе pureQuery;
  • применение интерфейса pureQuery для исполнения SQL;
  • знакомство с некоторыми возможностями стиля программирования на основе аннотированных методов, такими как пакетная обработка, сгенерированные элементы RowHandler и ParameterHandler, сгенерированные ключи и использование файлов конфигурации XML для модификации выходных данных генератора кода.

Если вы уже готовы приступить к программированию, переходите к техническому разбору. Следующий краткий пример показывает, почему разработчики могут предпочесть создание приложения pureQuery с использованием стиля на основе аннотированных методов.


Что такое стиль программирования на основе аннотированных методов?

Чтобы понять, что такое стиль программирования на основе аннотированных методов, нужно знать основы каждого из двух стилей кодирования pureQuery.

Стиль программирования на основе встроенных (inline) методов был разработан в ответ на потребность заказчиков в таком стиле программирования, который было бы легко освоить разработчикам, знакомым с Java™ Database Connectivity (JDBC), и чтобы программировать стало легче и быстрее. Первоначально стиль программирования на основе встроенных методов предназначался для упрощения кодирования повторяющихся задач, знакомых программисту JDBC, а также для предоставления API, которые посредством инструментов могли бы легко использоваться для сопряжения разработки интерфейсов доступа к данным с Java-разработкой. Методы называются "встроенными" из-за способа определения операторов SQL в приложении. При использовании стиля программирования на основе встроенных методов операторы SQL объявляются или составляются во время исполнения программы и передаются как объекты String общим методам интерфейса Data. Стиль программирования на основе встроенных методов максимально повышает скорость кодирования и гибкость разработки и поддерживает динамическое исполнение. В следующей статье будет дан обзор общих API интерфейсов Data. Более подробные сведения о стиле программирования на основе встроенных методов можно найти в документации по pureQuery (см. раздел Ресурсы).

Данная статья сосредоточена на стиле программирования на основе аннотированных методов, который создавался с теми же целями, что и стиль программирования на основе встроенных методов, но с дополнительным расчетом на максимальную гибкость конфигурирования и обеспечение безопасности результирующего приложения pureQuery. Стиль на основе аннотированных методов специально предназначен для поддержки как динамического, так и статического доступа к базам данных. Он разработан в ответ на потребность заказчиков в интерфейсе программирования именованных запросов для доступа к данным, аналогичном Java Persistence API (JPA), только чтобы он был проще, позволял быстрее программировать и при необходимости мог поддерживать статическое исполнение.

Как и стиль программирования на основе встроенных методов, стиль на основе аннотированных методов опирается на способ определения операторов SQL в приложении. При использовании стиля на основе аннотированных методов строка SQL определяется как элемент pureQuery Annotation Java 5.0. pureQuery определяет для этой цели следующие аннотации методов:@Select (аннотации SQL-запросов), @Update (аннотации операторов SQL DML) и @Call (аннотации операторов SQL CALL ). Аннотации размещаются в определяемых пользователем декларациях методов в определяемом пользователем интерфейсе. Генератор кода предварительно обрабатывает интерфейс, генерируя результирующий код для каждого из объявленных аннотированных методов. Сгенерированный результирующий код исполняет определенные в аннотации операторы SQL с применением среды исполнения pureQuery. А предварительно определенная строка SQL в элементе аннотации упрощает поддержку статического исполнения.

Поддержка стиля на основе аннотированных методов в наборе инструментов Data Studio включает генератор кода, который создает реализации написанных пользователем аннотированных методов. Результатом генерации кода служит второй класс реализации, скомпилированный и используемый для исполнения операторов SQL, объявленных в первоначальном интерфейсе. На рисунке 1 иллюстрируется взаимосвязь между определяемым пользователем интерфейсом на основе аннотированных методов, генератором кода и сгенерированным классом реализации.

Рисунок 1. Генерация кода аннотированных методов pureQuery
Генерация кода аннотированных методов pureQuery

Пример практического применения

В этом разделе приводится вымышленный пример: группа разработки средств доступа к данным растущей компании Silver Castle, которая продает разнообразные изделия из серебра. Компания разрабатывает новую Web-витрину для своего Web-сайта и решила использовать среду pureQuery для разработки уровня персистенции своего приложения доступа к данным. Выбор pureQuery стал для них легким решением после ознакомления с демонстрацией инструментов pureQuery и пособием по pureQuery. Они поняли, как легко и быстро можно разработать, проверить и развернуть персистентный уровень доступа к данным на основе Java, рассчитанный на разные платформы. Принимая во внимание некоторые дополнительные факторы, группа решает, когда применять стиль программирования на основе аннотированных методов, а когда — стиль программирования на основе встроенных методов. Один из разработчиков, Боб, решил стать специалистом по стилю программирования на основе аннотированных методов. Ниже следует описание тех знаний, которые он приобрел, чтобы помочь своей группе решать, в каких случаях использовать тот или иной стиль.

Решение об использовании аннотированных методов

Боб начал с оценки стиля программирования на основе аннотированных методов.

Парадигма:

  • Этот стиль напоминает стиль именованных запросов и нацелен на достижение или превышение возможностей существующих объектно-реляционных решений для отображения и персистенции данных.
  • Он способствует отделению операторов уровня персистенции (CRUD) от остального приложения внутри аннотированного интерфейса. В результате операторы SQL не разбросаны по всему приложению и их изменения не влияют на разработчиков, создающих другие уровни. Аннотированный интерфейс становится центральным пунктом управления операторами SQL для всего приложения.
  • Текст оператора SQL известен на этапе разработки. Его можно проанализировать заранее, что позволяет разработчикам обеспечить оптимизацию распределения выходных объектов.

Поддержка статического SQL:

  • Стиль программирования на основе аннотированных методов pureQuery переносит решение об исполнении в режиме статического SQL со стадии проектирования на стадию внедрения. Программы, написанные на основе аннотированных методов, можно развертывать динамически или с применением пакетов статического SQL на серверах базы данных IBM, не меняя ни одной строки кода.
  • Прозрачный переход к статическому исполнению с точки зрения интерфейсных приложений и разработчиков.
  • Решение о развертывании для статического исполнения позволяет использовать общие преимущества статического SQL: безопасность, производительность, мониторинг и возможность оптимизации до исполнения.

Генерация кода:

  • Минимальное количество ручного программирования: объявляются сигнатуры метода интерфейса и оператор SQL; затем генератор кода pureQuery создает реализацию кода доступа к данным.
  • Результаты выполнения запросов возвращаются предварительно обработанными средой исполнения pureQuery в разнообразные объекты, такие как итераторы заполненных компонентов pureQuery или списки отображений имен столбцов на значения столбцов.
  • Поведением сгенерированного кода можно управлять при помощи метода Hook для специализированной обработки до и после доступа к данным.
  • Использование файлов конфигурации XML для определения разных SQL-операторов для каждой целевой базы данных.

Разработка и применение аннотированных методов

В листинге 1 приведена часть интерфейса pureQuery, который Боб написал, чтобы поупражняться в применении стиля на основе аннотированных методов. Он использует этот интерфейс для объяснения членам своей группы основ аннотированных методов. В основе этого стиля программирования лежит аннотированный интерфейс pureQuery, который представляет собой его основной конструктивный блок. Интерфейс pureQuery состоит из следующих компонентов:

  1. Java-определение интерфейса, в которое входят:
    1. одна или более деклараций метода;
    2. аннотация доступа к данным pureQuery для деклараций каждого метода: @Select, @Update или @Call; каждая аннотация содержит элемент SQL с оператором SQL, исполняемым при вызове данного метода (опционально оператор SQL может быть предоставлен не в элементе аннотации, а отдельно, в файле конфигурации);
    3. возвращаемый тип Java для декларации каждого метода, где указывается нужный формат объекта, в котором при исполнении запроса pureQuery результаты доступа к данным будут возвращаться вызывающей процедуре;
    4. типы параметров Java для каждой сигнатуры метода, включая параметры, указывающие тип объекта параметров, используемых для исполнения оператора SQL.

Файл определения интерфейса не содержит никаких деклараций или определений методов, кроме описанных выше. После того как интерфейс pureQuery определен, другие уровни приложения могут концептуально рассматривать этот интерфейс как базу данных, к которой легко обращаться из Java, просто вызывая объявленные методы Java для доступа к данным. Когда другой уровень приложения вызывает один из аннотированных методов, он получает результат исполнения соответствующего оператора SQL в удобно отформатированном объекте Java. Для разработки других уровней приложения никакого знания SQL не требуется.

Листинг 1. Интерфейс, написанный в стиле программирования на основе аннотированных методов pureQuery
package com.ibm.db2.pureQuery; 

import java.util.Iterator;
import com.ibm.pdq.annotation.Select; 

public interface CustomerData {
   // Select all PDQ_SC.CUSTOMERs and populate Customer beans with results
   @Select(sql="select CID, NAME, COUNTRY, STREET, CITY, PROVINCE, ZIP, PHONE,
                      INFO from PDQ_SC.CUSTOMER")
   Iterator<Customer> getCustomers();

   // Select PDQ_SC.CUSTOMER by parameters and populate Customer bean with results
   @Select(sql="select CID, NAME, COUNTRY, STREET, CITY, PROVINCE, ZIP, PHONE, 
                      INFO from PDQ_SC.CUSTOMER where CID = ?") 
   Customer getCustomer(int cid); 
  ...
}

Генерация реализации

Когда интерфейс определен, он автоматически передается в генератор кода pureQuery инструментарием управления проектом pureQuery в составе Data Studio. Генератор кода pureQuery создает реализацию интерфейса в файле с именем CustomerDataImpl.java. Сгенерированный файл приведен в листинге 2. Примечание: сгенерированный файл не содержит ни одной строки кода, написанной вручную.

Разбирать сгенерированный код не обязательно. Если вам интересно, как приложение Silver Castle использует описанный выше интерфейс, переходите к следующему шагу. Продолжая читать, вы узнаете подробнее о сгенерированном коде.

Генератор кода и сгенерированный код

Генератор кода принимает на вход определенный пользователем интерфейс pureQuery вроде того простого примера CustomerData, который составили разработчики Silver Castle. Он генерирует код, необходимый для исполнения каждого оператора SQL, аннотированного для каждого метода интерфейса. Кроме того, он генерирует код для обработки результатов и их преобразования в объявленные типы результатов. Для выполнения необходимой обработки для каждого метода сгенерированный код вызывает среду исполнения pureQuery.

Несколько важных замечаний по поводу сгенерированного кода:

  • Сгенерированные элементы: для каждого объявленного метода сгенерированные элементы содержат определение метода, внутренний StatementDescriptor pureQuery и, при необходимости, сгенерированный элемент RowHandler или ResultHandler, а также внутренний ParameterHandler pureQuery.
  • Имя класса реализации: имя сгенерированного файла реализации основано на имени оригинального определенного пользователем интерфейса с добавлением суффикса “Impl”. В данном примере разработчики написали интерфейс CustomerData, а генератор кода создал класс CustomerDataImpl. Сгенерированный класс реализует интерфейс CustomerData. Имя реализации класса никогда не используется другими уровнями приложения доступа к данным; они обращаются только к определенному пользователем интерфейсу. Однако имя файла реализации полезно знать на тот случай, если понадобится проверить сгенерированный код.
  • Суперкласс реализации: кроме реализации определенного пользователем интерфейса, сгенерированный класс реализации расширяет внутренний класс pureQuery BaseData, который в свою очередь реализует внешний интерфейс Data. Этот суперкласс является частью среды исполнения pureQuery и управляет повторяющимися операциями, необходимыми для доступа к базе данных и обработки результатов.
  • Пусть вид сгенерированного кода вас не смущает. Разработчикам незачем смотреть на него, разве что ради любопытства.

Применение аннотированных методов

Итак, проект создан, инструментарий Data Studio pureQuery запустил генератор кода pureQuery, и реализация интерфейса сгенерирована и скомпилирована. Разработчики уже могут обращаться к данным из других уровней приложения, вызывая аннотированные методы, объявленные в аннотированном интерфейсе pureQuery. Это простой процесс. Приложение обращается к экземпляру класса интерфейса pureQuery (по сути, к базе данных) с запросом DataFactory. Затем оно вызывает методы доступа к данным (листинг 3)

Листинг 3. Обращение к аннотированным методам
...
java.sql.Connection con = ...;

// использует DataFactory для создания экземпляра интерфейса CustomerData
CustomerData cd = DataFactory.getData(CustomerData.class, con);

// выполняет SQL for getCustomers() и вводит результаты в модули Customer
Iterator<Customer> cust = cd.getCustomers();

// теперь приложение может использовать Iterator для модулей Customer
...

При помощи нескольких строк кода производится обращение к базе данных, исполнение нужного оператора SQL и обработка с записью готовых к употреблению приложением результатов в удобные компоненты данных Iterator класса Customer. Еще больше впечатляет то, что даже для реализации метода персистентного уровня разработчикам ничего не надо делать, кроме объявления вызываемого метода. Остальное берут на себя генератор кода и среда исполнения pureQuery.


Разбор стиля программирования на основе аннотированных методов

В этом разделе пример, приведенный ранее, разбирается на компоненты, представляющие собой важные элементы стиля программирования на основе аннотированных методов. Документация pureQuery содержит полное описание этих и других концепций программирования pureQuery (см. раздел Ресурсы).

Интерфейс pureQuery

В приведенном выше примере определенный пользователем интерфейс pureQuery называется CustomerData. Полезно присвоить интерфейсу имя, отражающее источник данных, к которому он обращается, как это сделано в примере Silver Castle. Например, методы CustomerData извлекают и обновляют информацию о клиентах компании.

Как сказано выше, интерфейс pureQuery содержит лишь определения аннотированных методов.

Декларации аннотированных методов

Декларация каждого метода интерфейса pureQuery содержит следующие необходимые элементы:

  • одну из трех аннотаций pureQuery: @Select, @Update или @Call;
  • один элемент типа sql=<string> для каждой аннотации, в котором строка содержит оператор SQL, подлежащий выполнению при обращении к методу (вместо этого оператор SQL может передаваться в файле конфигурации XML);
  • стандартную декларацию метода Java;

Объявленные возвращаемые типы

Возвращаемый тип в декларации метода указывает, в объекте какого формата будут возвращаться результаты исполнения оператора SQL. Поддерживаемые возвращаемые типы зависят от используемой аннотации. Например, запросы возвращают разнообразные сложные и простые типы. Имеются стандартные форматы для обновлений. И в числе прочих есть тип возвращаемых данных StoredProcedureResult, который удобно инкапсулирует результаты вызова хранимой процедуры.

Механизм pureQuery может помещать результаты обработки в набор определяемых пользователем компонентов pureQuery. В нашем примере разработчики объявили, что должен возвращаться Iterator, состоящий из компонентов класса Customer. pureQuery использует набор соглашений и требований для отображения результатов запросов к базе данных непосредственно в определяемом пользователем классе компонентов. Аннотации в компонентах pureQuery могут отменять способ отображения по умолчанию. Кроме того, можно выполнить ручное отображение результатов в компоненты путем предложенного пользователем элемента RowHandler. Иначе сгенерированный элемент RowHandler автоматически применяет отображение по умолчанию к определенному пользователем классу компонентов, после чего результаты возвращаются инициатору запроса.

Объявленные типы параметров

Типы параметров в декларации аннотированных методов определяют то, как pureQuery получает значения параметров операторов SQL при их исполнении. Может иметь место, хотя это и не обязательно, взаимно-однозначное соответствие маркеров параметров оператора SQL и параметров, объявленных в аннотированном методе. pureQuery соблюдает правила синтаксиса для маркеров параметров, определяющие, как параметры оператора SQL отображаются из объявленных параметров в список параметров аннотированного метода.

В pureQuery параметрам легче использовать широкое разнообразие типов, чем в любых других API доступа к данным. Например, один объявленный параметр компонента pureQuery потенциально может обеспечить значения времени исполнения для нескольких маркеров параметров оператора SQL. Для аннотированных методов поддерживаются типы компонентов pureQuery и коллекций Java. Полный список возможных типов объявленных параметров содержится в правилах синтаксиса аннотированных методов. Типы объявленных параметров для аннотированного метода могут значительно различаться по способу исполнения оператора SQL. Например, при помощи определенных типов параметров в аннотированном методе @Update могут инициироваться пакетные изменения. При пакетных обновлениях параметр коллекции используется вертикально для многократного исполнения оператора SQL с разными значениями параметра.

Параметры аннотированного метода могут применяться простым, прямолинейным способом, или же они могут назначаться так, чтобы использовать преимущества механизма pureQuery. Одним из примеров применения возможностей механизма pureQuery для автоматической оптимизации кода и облегчения задачи разработчика служит пакетная обработка изменений. Специализированная обработка параметров компонентов данных механизмом pureQuery тоже экономит время и усилия разработчиков. Например, аннотация компонента pureQuery @GeneratedKey позволяет механизму pureQuery автоматически обновлять поле параметра компонента взятым из базы данных значением после операции вставки или редактирования.

Ловушки

Вначале некоторые программисты из группы pureQuery не понимали, почему большая часть кода генерируется с применением стиля аннотированных методов. Боб объяснил, что метод Hook обеспечивает простой способ применения специализированной обработки при исполнении сгенерированного кода. Вместо того чтобы кодировать вручную вызовы методов для переадресации каждого обращения приложения к аннотированным методам интерфейса, можно определить метод Hook (ловушку) для регистрации в аннотированном интерфейсе. Ловушка вызывается средой исполнения pureQuery на входе и выходе каждого аннотированного метода. Это обеспечивает механизм обратного вызова для специализированной обработки в обход сгенерированного кода доступа к данным. Ловушка определяет необходимый метод pre(), который, когда метод Hook зарегистрирован, вызывается сразу после входа в аннотированный метод. Ловушка определяет также метод post(), который, когда метод Hook зарегистрирован, будет вызываться непосредственно перед возвратом управления из аннотированного метода.

Методы-ловушки обеспечивают контекстную информацию для обработки обратного вызова в момент исполнения, если это требуется определяемой пользователем реализацией методов pre() и post(). Эта информация содержится в параметрах вызова методов pre() и post(). В зависимости от значений этих параметров специализированная обработка может выполняться по-разному. Например, на характер обработки может влиять имя метода интерфейса, вызывавшего метод Hook, значения параметров среды исполнения, переданные в этот метод или тип оператора SQL, который исполняет метод. Имеется также идентификатор интерфейса pureQuery, с которым был зарегистрирован метод Hook, в форме параметра Data. Каждое из этих значений можно проверить и изменить при помощи реализации метода Hook. В дополнение к этому возвращаемое значение доступно в реализации post() до того, как оно будет возвращено инициатору запроса. Вот пример кода обработки ловушки, который составил Боб для демонстрации группе Silver Castle (листин 4)

Листинг 4. Ловушки для специализированной обработки
public static class TrackingHook implements Hook {

   public void pre(String methodName, Data objectInstance,
                    SqlStatementType sqlStatementType, Object... parameters)  {
      System.out.println(methodName + "**Customer data has been accessed**"); 
   }

   public void post(String methodName, Data objectInstance,
                    Object returnValue, SqlStatementType sqlStatementType,
                    Object... parameters) {
     // ничего не делает
  }
}

После определения метода специализированной обработки с применением ловушки разработчики гарантируют его исполнение путем регистрации экземпляра своего метода Hook в обрабатываемом интерфейсе. В листинге 5 показано, как зарегистрировать метод Hook

Листинг 5. Регистрация метода Hook
... 
Connection con = ...;

// использует DataFactory создания экземпляра интерфейса и
// регистрации экземпляра Hook с этим экземпляром
   
CustomerData cd = DataFactory.getData(CustomerData.class, con, new TrackingHook());

// выполняет SQL для getCustomers() и получает результаты,
// методы pre() и post() вызываются автоматически
Iterator<Customer> cust = cd.getCustomers();

// теперь приложение использует Iterator модулей Customer
...

Это очень простой пример специализированной обработки при помощи метода Hook. Пример более сложной обработки типа Hook можно найти в примере ловушки из документации pureQuery.

Разработка для разных баз данных

Последняя особенность аннотируемых методов, о которой Боб рассказал своей группе, это применение файла конфигурации XML для полного отделения операторов SQL от реализации кода Java их приложения. Это позволяет избежать повторного программирования приложения Java при его развертывании с базой данных, которая требует других операторов SQL. Например, если группа хочет использовать то же самое приложение для унаследованного источника данных с несколько отличающейся схемой, им не придется перекодировать свой аннотированный интерфейс или компонент pureQuery.

В листинге 6 приведен оператор SQL для оригинальной схемы.

Листинг 6. Оператор SQL для оригинальной схемы
select CID, NAME, COUNTRY, STREET, CITY, PROVINCE, ZIP, PHONE, INFO
     from PDQ_SC.CUSTOMER

В листинге 7 приведен оператор SQL для унаследованной схемы.

Листинг 7. Оператор SQL для унаследованной схемы
select CUSTID, NAME, COUNTRY, STREET, CITY, PROV, ZIP, PHONE, INFO
     from PDQ_SC.CUSTOMER

Обратите внимание на то, что в листинге 7 имена столбцов CID и PROVINCE изменились на CUSTID и PROV. Это приводит к изменению оператора SQL, который должен содержаться в запросе, и к изменению отображения по умолчанию результатов на компонент данных Customer.

В листинге 8 показан компонент данных pureQuery Customer.

Листинг 8. Компонент pureQuery Customer
package com.ibm.db2.pureQuery;

public class Customer  {

     // Class variables
     protected int cid;
     protected String name;
     protected String country;
     protected String street;
     protected String city;
     protected String province;
     protected String zip;
     protected String phone;
     protected String info;
...

Вместо того чтобы писать новый аннотированный интерфейс или класс компонентов Customer для поддержки унаследованной схемы, группа передает генератору дополнительные входные данные при помощи файла конфигурации XML. В листинге 9 приведен фрагмент файла конфигурации XML, который показывает, как заменяется одна из строк SQL и определяемое пользователем отображение класса компонентов. Чтобы приготовиться к развертыванию своего приложения на унаследованной системе, группа передает генератору первоначальное определение аннотированного интерфейса вместе с приведенным ниже файлом XML. Генератор выдает правильно сгенерированный код, готовый к применению с унаследованной базой данных.

Листинг 9. Файл конфигурации XML для генерации альтернативного кода
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm">

<named-native-query name=" com.ibm.db2.pureQuery.CustomerData#getCustomers()">
  <query><![CDATA[select CUSTID, NAME, COUNTRY, STREET, CITY, PROV, ZIP, PHONE, INFO 
                     from PDQ_SC.CUSTOMER]]>
  </query>
</named-native-query>
...
<entity class="com com.ibm.db2.pureQuery.Customer">
        <attributes>    
                    <basic name="cid">
                      <column name="CUSTID" />
                    </basic>
                    ...                
                    <basic name="province">
                       <column name="PROV" />
                    </basic> 
                    ...           
        </attributes>
        </entity> 
</entity>
</entity-mappings>

За более подробными сведениями о передаче генератору файлов конфигурации XML с целью создания альтернативных операторов SQL и/или отображений объектов для интерфейсов pureQuery обращайтесь к онлайновой документации pureQuery.


Заключение

Эта статья содержит общее введение в стиль программирования на основе аннотированных методов pureQuery, а также перечень вероятных причин, по которым группа разработчиков может выбрать подход с применением аннотированных методов pureQuery. Здесь перечислены также основные шаги, необходимые для разработки приложений в стиле аннотированных методов, и представлены основные особенности этого стиля.

Если вы заинтересовались и хотите узнать больше о приложениях, написанных в стиле аннотированных методов pureQuery, следуйте по ссылкам на документацию, дополнительные статьи и полезные руководства, приведенным в этой статье и в разделе «Ресурсы».

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management, Технология Java
ArticleID=430685
ArticleTitle=Создание высокопроизводительных Java-приложений для доступа к данным: Часть 1. Введение в программирование pureQuery
publish-date=09242009