9. Cvičenie - Generovanie kódov III. (Úloha 6)

Ciele
  1. Upraviť generátor databázového skriptu tak, aby zohľadňoval vzťahy medzi entitami.
  2. Upraviť šablóny tried entít, CRUD rozhraní a CRUD implementácií tak, aby zohľadňovali vzťahy medzi entitami.
  3. Overiť funkčnosť podpory vzťahov medzi entitami vo vygenerovanej aplikácii.
Úvod
    V tomto module pridáme podporu vzťahov medzi entitami do generátora databázového skriptu a šablón pre generovanie tried entít, CRUD rozhraní a CRUD implementácií.
Postup
  1. V tomto kroku pridáme podporu referencií vo vygenerovanom SQL skripte.
    Úloha: Upravte generátor DatabaseScriptGenerator tak, aby generoval výstup s podporou referencií medzi entitami poďla nasledujúceho vzoru.


    Pošli
    
    CREATE TABLE Oddelenie (
      ident INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
      nazov VARCHAR(30) NOT NULL,
      kod VARCHAR(4) NOT NULL
    );
    
    CREATE TABLE Zamestnanec (
      ident INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
      ident_Oddelenie INTEGER,
      meno VARCHAR(30) NOT NULL,
      priezvisko VARCHAR(30) NOT NULL,
      vek INTEGER
    );
    
    ALTER TABLE Zamestnanec ADD CONSTRAINT Oddelenie_fkey FOREIGN KEY (ident_Oddelenie) REFERENCES Oddelenie(ident);     	
    
    Poznámka: Uvedený príklad zodpovedá zápisu pre Derby (Java DB).
  2. Pridanie podpory referencií v generovaných triedach entít. Referenciu pridajte ako členskú premennú typu Integer. Jej názvom nech je meno cieľovej entity. Časť šablóny zodpovedná za generovanie podpory refrencií by mohla vyzerať nasledovne:
    
    #foreach( $reference in $entity.outgoingReferences )
    #set( $pname = $reference.to.name )
    #set( $ptype = "Integer" )
    
        private $ptype $generator.toLCIdent($pname);
    
    #end        	
    
    Úloha: Úpravou šablóny pre generovanie tried entít pridajte podporu referencií vo vygenerovaných triedach.


    Pošli
    Poznámka: Nezabudnite generovať k referenciám aj get/set metódy
  3. Pridanie podpory referencií v implementácii CRUD rozhraní. Je potrebné zabezpečiť aby pri operáciách INSERT a UPDATE boli do databázy uložené aj identifikátory referovaných entít. Pri operácií SELECT je potrebné získať ID referovaných entít.
    Úloha: Upravte šablónu pre generovanie implementácie CRUD rozhraní, aby podporovala referencie medzi entitami (metódy: prepareInsertStatement, prepareUpdateStatement, prepareSelectStatement, prepareFindStatement, createFromResultSet)


    Pošli
    Vygenerovaná metóda prepareInsertStatement može vyzerať nasledovne:
    
    public class ZamestnanecDaoImpl extends CRUDDaoImpl<Zamestnanec> implements ZamestnanecDao {
        ...
        protected PreparedStatement prepareInsertStatement(Connection connection, Zamestnanec object) throws SQLException {
            String query = "INSERT INTO Zamestnanec (meno, priezvisko, vek, ident_Oddelenie) VALUES (?, ?, ?, ?)";
            PreparedStatement pstm = connection.prepareStatement(query);
            pstm.setString(1, object.getMeno());
            pstm.setString(2, object.getPriezvisko());
            pstm.setInt(3, object.getVek());
            pstm.setInt(4, object.getOddelenie());
            return pstm;
         }
         ...
    }
    
    Poznámka: Na vhodných miestach prejdite vždy v cykle všetky vychádzajúce referencie z entity.
  4. Otestujte funkčnosť podpory vzťahov medzi entitami vo vygenerovanom projekte so zvolenými entitami.
  5. Vymažte súbory z disku a zrušte všetky vami vytvorené nastavenia vo vývojovom prostredí!
Doplňujúce úlohy
    Úloha: Rozšírte generované triedy o podporu vyhľadávania entít podľa ľubovoľnej vlastnosti.
    UkončenáPoznámka


    Pošli
comments powered by Disqus