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:
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:
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.
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>