Generowanie klas implementacji z pomocą plików konfiguracyjnych XML

Podczas generowania implementacji interfejsu można wykorzystać plik XML w celu przesłonięcia adnotacji SQL w tym interfejsie. Plik XML może także przesłonić definicję odpowiedniego komponentu bean pureQuery. Środowisko robocze może wygenerować plik XML dla użytkownika, a następnie plik ten może być modyfikowany.

Aby wygenerować implementację interfejsu, środowisko robocze wywołuje generator kodu pureQuery. Generator umożliwia podanie pliku XML, w którym można przesłonić instrukcje SQL znajdujące się w adnotacjach metod, które deklaruje interfejs.

Typy, elementy i atrybuty, które generator rozpoznaje podczas przetwarzania plików konfiguracyjnych XML, są podzbiorem formalnej specyfikacji Java Persistence API (JPA).

Dla projektu dostępny jest tylko jeden plik konfiguracyjny XML. Po utworzeniu w projekcie pliku XML wszystkie kolejne przesłonięcia, które zostaną utworzone dla interfejsów lub komponentów bean w tym projekcie, są dodawane do tego pliku.

Procedura:

Aby wygenerować klasę implementacji z pomocą pliku konfiguracyjnego XML:

  1. Aby wygenerować plik XML, który można zmodyfikować w celu przesłonięcia instrukcji SQL znajdujących się w adnotacjach deklarowanych przez interfejs:
    1. Otwórz interfejs w edytorze Java.
    2. Kliknij prawym przyciskiem myszy i wybierz opcje Asysta pureQuery > Generuj XML.
      • Jeśli plik konfiguracyjny XML nie istnieje jeszcze w projekcie, zostanie otwarte okno Generowanie kodu XML dla klasy języka Java. Użytkownik może zaakceptować domyślną nazwę pliku lub ją zmienić.
      • Jeśli plik konfiguracyjny XML już istnieje w projekcie, kod XML jest dopisywany do tego pliku.
  2. Aby wygenerować plik XML, który można zmodyfikować w celu przesłonięcia definicji komponentu bean pureQuery odpowiadającego interfejsowi, należy wykonać następujące czynności:
    1. Otwórz komponent bean w edytorze Java.
    2. Kliknij prawym przyciskiem myszy i wybierz opcje Asysta pureQuery > Generuj XML.
      • Jeśli plik konfiguracyjny XML nie istnieje jeszcze w projekcie, zostanie otwarte okno Generowanie kodu XML dla klasy języka Java. Użytkownik może zaakceptować domyślną nazwę pliku lub ją zmienić.
      • Jeśli plik konfiguracyjny XML już istnieje w projekcie, kod XML jest dopisywany do tego pliku.
  3. Powtórz krok pierwszy i drugi dla każdego interfejsu lub komponentu bean pureQuery, który ma zostać przesłonięty.
  4. Zmodyfikuj plik konfiguracyjny XML.
  5. Usuń implementacje interfejsów, które mają zostać ponownie wygenerowane.
  6. Wybierz opcje Projekt > Wyczyść i określ czyszczenie projektu. Implementacje są ponownie generowane na podstawie opcji znajdujących się w pliku XML.
Plik konfiguracyjny XML dla projektu znajduje się w folderze meta-inf. Po wygenerowanie pliku XML lub dodaniu do niego danych można dwukrotnie go kliknąć, aby otworzyć go w edytorze XML.

Przykład

Użytkownik utworzył projekt Java i dodał do niego jeden komponent bean pureQuery, interfejs oraz implementację tego interfejsu, a wszystko w oparciu o tabelę ACT bazy danych SAMPLE dla produktu DB2 dla systemów Linux, UNIX i Windows. Implementacja została usunięta w celu jej ponownego wygenerowania po przesłonięciu interfejsu oraz komponentu bean za pomocą pliku konfiguracyjnego XML. Projekt wygląda następująco:

Zawartość projektu Java "MyProject"

Kliknij dwa razy interfejs ActData.java, aby go otworzyć w edytorze Java. Następnie kliknij prawym przyciskiem myszy w edytorze i wybierz opcje Asysta pureQuery > Generuj XML. Ponieważ w projekcie nie ma jeszcze pliku XML, należy nadać mu nazwę. W oknie Generowanie kodu XML dla klasy języka Java podaj nazwę MyProject.xml i kliknij przycisk Zakończ. Plik pojawi się w folderze meta-inf projektu.

Zawartość tego samego projektu Java, teraz z plikiem XML

Kliknij dwukrotnie plik XML, aby otworzyć go w edytorze XML. Z pominięciem informacji o przestrzeni nazw, zawartość tego pliku wygląda następująco:

<?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>

Plik zawiera instrukcje SQL w adnotacjach metod, które są definiowane przez interfejs.

Teraz kliknij dwukrotnie komponent bean pureQuery Act.java, aby otworzyć go w edytorze Java. Następnie kliknij prawym przyciskiem myszy w edytorze i wybierz opcje Asysta pureQuery > Generuj XML. Ponieważ plik już istnieje, okno Generowanie kodu XML dla klasy języka Java nie zostanie otwarte. Środowisko robocze po prostu doda kod XML do istniejącego pliku konfiguracyjnego XML.

Teraz plik konfiguracyjny XML wygląda następująco (z pominięciem informacji o przestrzeni nazw):

<?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>
Pojęcia pokrewne
Generowanie kodu pureQuery na podstawie obiektów bazy danych
Zadania pokrewne
Generowanie kodu pureQuery na podstawie komponentów bean
Generowanie komponentów bean pureQuery do przechowywania tabel wynikowych instrukcji SQL SELECT
Tworzenie szablonów JET (Java Emitter Templates) środowiska EMFT (Eclipse Modeling Framework Technologies) do generowania niestandardowego kodu
Tworzenie aplikacji pureQuery w środowisku roboczym
Informacje pokrewne
Używanie plików konfiguracyjnych XML z generatorem kodu pureQuery

Opinia