Генерирование классов реализации при помощи файлов конфигурации XML

Когда вы генерируете реализацию интерфейса, можно использовать файл XML для переопределения аннотаций SQL в этом интерфейсе. Этот файл XML может также переопределять определение соответствующей функции bean pureQuery. Инструментальная среда может генерировать файл XML, который вы затем можете редактировать.

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

Типы, элементы и атрибуты, распознаваемые генератором при проверке файла конфигурации XML, представляют собой поднабор из формальной спецификации для Java Persistence API (JPA).

В проекте может быть только один файл конфигурации XML. После создания файла XML в проекте все последующие созданные вами переопределения интерфейса или функций bean в этом проекте дописываются в этот файл.

Порядок действий:

Чтобы создать класс реализации при помощи файла конфигурации XML:

  1. Чтобы сгенерировать файл XML, который можно будет редактировать для переопределения операторов SQL в аннотациях, объявленных в интерфейсе:
    1. Откройте интерфейс в редакторе Java.
    2. Щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML.
      • Если файла конфигурации XML еще нет в проекте, откроется окно Генерировать XML для класса Java. Можно принять имя этого файла по умолчанию или изменить его.
      • Если файл конфигурации XML уже существует в проекте, XML добавляется к этому файлу.
  2. Чтобы сгенерировать файл XML, который можно будет редактировать для переопределения функций bean pureQuery, соответствующих интерфейсу, выполните следующие действия:
    1. Откройте эту функцию bean в редакторе Java.
    2. Щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML.
      • Если файла конфигурации XML еще нет в проекте, откроется окно Генерировать XML для класса Java. Можно принять имя этого файла по умолчанию или изменить его.
      • Если файл конфигурации XML уже существует в проекте, XML добавляется к этому файлу.
  3. Повторите первый и второй шаги для каждого интерфейса или функции bean pureQuery, которые вы хотите переопределить.
  4. Отредактируйте файл конфигурации XML.
  5. Удалите реализации интерфейсов, которые вы хотите перегенерировать.
  6. Выберите Проект > Очистить и задайте очистку проекта. Реализации будут перегенерированы из опций в файле XML.
Файл конфигурации XML для проекта находится в папке meta-inf. После того, как вы сгенерируете этот файл XML или допишете его, можно щелкнуть по нему дважды, чтобы открыть его в редакторе XML.

Пример

Предположим, что вы создали проект Java и добавили в него одну функцию bean pureQuery, интерфейс и реализацию этого интерфейса, основанные на таблице ACT базы данных SAMPLE из DB2 для Linux, UNIX и Windows. Вы удаляете эту реализацию, так как хотите перегенерировать ее после переопределения интерфейса и функции bean в файле конфигурации XML. Ваш проект выглядит так:

Содержимое проекта Java "MyProject"

Щелкните дважды по интерфейсу ActData.java, чтобы открыть его в редакторе Java. Затем щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML. Поскольку в проекте еще не было файла XML, вам надо задать имя этого файла. В окне Генерировать XML для класса Java назовите этот файл MyProject.xml и нажмите кнопку Готово. Этот файл появится в папке meta-inf в вашем проекте.

Содержимое того же проекта Java, теперь с файлом XML

Щелкните дважды по этому файлу XML, чтобы открыть в редакторе XML. Вот содержимое этого файла (информация о пространстве имен пропущена):

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings>
  <named-native-query name="MyPackage.ActData#getActs()">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#getAct(int)">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#getAct(Act)">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actno]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#createAct(int, String, String)">
    <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( ?, ?, ?)]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#createAct(Act)">
    <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( :actno, :actkwd, :actdesc)]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#updateAct(int, String, String, int)">
    <query><![CDATA[update ACT set ACTNO = ?, ACTKWD = ?, ACTDESC = ? where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#updateAct(Act)">
    <query><![CDATA[update ACT set ACTNO = :actno, ACTKWD = :actkwd, ACTDESC = :actdesc where ACTNO = :actno]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#deleteAct(int)">
    <query><![CDATA[delete from ACT where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#deleteAct(Act)">
    <query><![CDATA[delete from ACT where ACTNO = :actno]]></query>
  </named-native-query>
</entity-mappings>

Этот файл содержит операторы SQL в аннотациях методов, которые определяет интерфейс.

Теперь щелкните дважды по функции bean pureQuery Act.java, чтобы открыть ее в редакторе Java. Щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML. Поскольку теперь файл уже существует, окно Генерировать XML для класса Java не открывается. Инструментальная среда просто дописывает XML в существующий файл конфигурации XML.

Если вы снова посмотрите файл конфигурации XML он будет выглядеть так (информация о пространстве имен снова опущена):

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings>
  <named-native-query name="MyPackage.ActData#getActs()">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#getAct(int)">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#getAct(Act)">
    <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actno]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#createAct(int, String, String)">
    <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( ?, ?, ?)]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#createAct(Act)">
    <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( :actno, :actkwd, :actdesc)]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#updateAct(int, String, String, int)">
    <query><![CDATA[update ACT set ACTNO = ?, ACTKWD = ?, ACTDESC = ? where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#updateAct(Act)">
    <query><![CDATA[update ACT set ACTNO = :actno, ACTKWD = :actkwd, ACTDESC = :actdesc where ACTNO = :actno]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#deleteAct(int)">
    <query><![CDATA[delete from ACT where ACTNO = ?]]></query>
  </named-native-query>
  <named-native-query name="MyPackage.ActData#deleteAct(Act)">
    <query><![CDATA[delete from ACT where ACTNO = :actno]]></query>
  </named-native-query>
   <entity class="MyPackage.Act">
    <attributes>
     <id name="ACTNO">
      <column name="actno"/>
      <generated-value/>
     </id>
     <basic name="ACTNO">
      <column name="actno"/>
     </basic>
     <basic name="ACTDESC">
      <column name="actdesc"/>
     </basic>
     <basic name="ACTKWD">
      <column name="actkwd"/>
     </basic>
    </attributes>
  </entity>
<entity-mappings>
Понятия, связанные с данным
Генерирование кода pureQuery из объектов базы данных
Задачи, связанные с данной
Генерирование кода pureQuery из функций bean
Генерирование функций bean pureQuery для наборов результатов операторов SQL SELECT
Создание Java Emitter Templates (JET) Eclipse Modeling Framework Technologies (EMFT) для генерирования настроенного кода
Разработка программ pureQuery при помощи инструментальной среды
Информация, связанная с данной
Использование файлов конфигураций XML с генератором pureQuery

Отзыв