Jak správně na Hibernate. Martin Hlavatý
|
|
- Jiří Němec
- před 9 lety
- Počet zobrazení:
Transkript
1 Jak správně na Hibernate Martin Hlavatý
2 Úvod Co je Hibernate? Hibernate je ORM!
3 Agenda 18:00 18:10 ORM základní koncepty, historie, vymezení 18:10 18:25 Plain Old JDBC 18:25 18:50 Základy Hibernate 18:50 19:05 Hibernate klasicky (webové aplikace) 19:05 19:15 Použití Hibernate v desktop aplikacích 19:15 19:30 ibatis jako konkurence Hibernate 19:30 Závěr, diskuse
4 Úvod ORM = objektově relační mapování Konverze mezi relačním a objektovým světem Specifikuje se pomocí metadat (XML, anotace, ) Efekt virtuální objektové databáze
5 ORM - Motivace Odstranění duplikace kódu při práci s databází Vyšší produktivita vývojářů Méně kódu = méně chyb Udrţovatelnost - snazší provádění změn Doménový a datový model jsou svázány pomocí metadat Nezávislost na konkrétním RDBMS Bohuţel v praxi je to nereálné
6 Trocha historie CORBA Component Model Součást CORBA 3.0 (rok 2002) Kategorie entity komponent Enterprise Java Beans Entity beans (Container Managed Persistence) První verze ( ) prakticky nepouţitelné Od verze 2.x (rok 2001) pouţitelné ale neobratné Od verze 3.0 (rok 2006) zrušeny a nahrazeny JPA
7 EJB vs. JPA vs. Hibernate JPA = Java Persistence API JPA 1.0 součástí standardu EJB 3.0 Hibernate implementuje JPA JPA vzniklo z Hibernate (a dalších)
8 Impedanční neshoda Rozdíl v paradigmatech relačního a objektového světa Problém granularity Kompozice objektů => sloţitější objekty. U relací nelze. Dědičnost Relační teorie tento pojem nezná Problém identity V Javě equals a ==, u relací primární klíč Problém asociací Cizí klíče jsou jednosměrné.
9 Příklad Osoba Adresa FyzickaOsoba PravnickaOsoba V databázi můţe být uloţeno ve dvou, třech či čtyřech tabulkách. V případě tří tabulek je problém s vazbou adresy Nelze pouţít cizí klíč (neexistuje tabulka reprezentující předka).
10 JDBC
11 JDBC Standardní způsob práce s DB v Javě Prakticky všechny ORM jej pouţívají Výhody Jednoduché Plná kontrola nad SQL Dobrá podpora uloţených procedur Nevýhody Checked výjimky Mnoho opakujícího se kódu
12 JDBC - příklad Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { } finally { con.close(); }
13 JDBC - příklad Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { } finally { con.close(); }
14 JDBC - příklad Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { } finally { con.close(); }
15 JDBC - příklad Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { } finally { con.close(); }
16 Vylepšení Template method Získání Connection Ošetření výjimek RowMapper ResultSet -> doménový objekt
17 JDBC a Spring JdbcTemplate Konverze výjimek na unchecked Správa Connections Podpora deklarativních transakcí RowMappers Výhody Jednoduché K dispozici plná síla JDBC Nevýhody Stále poměrně pracné
18 Příklad public Collection getosoby() { return getjdbctemplate().query( "select jmeno, prijmeni from osoby", new OsobaMapper()); } class OsobaMapper implements RowMapper { public Object maprow(resultset rs, int rownum) throws SQLException { } } Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni( rs.getstring("prijmeni") ); return osoba;
19 Hibernate
20 Proč Hibernate?
21 Vyspělá technologie
22 Velká komunita
23 Dostatečná dokumentace
24 Dobrá architektura
25 Proč Hibernate? Mnoho přidruţených projektů Validace Hibernate Validator Fulltextové vyhledávání Hibernate Search Horizontální partitioning Hibernate Shards Moţnost kdykoliv změnit pouţitou databázi U větších projektů je tato moţnost spíše teoretická Podpora velkého mnoţství databázových serverů
26 Proč Hibernate? Pracuje s POJOs API pro základní CRUD operace Není třeba psát SQL (ani jiný QL) Masivní podpora cachování Primární, sekundární cache Podpora pro synchronizaci databázového schématu a doménového modelu hbm2ddl
27 Čistá doba Hibernate vs. JDBC (pracnost) Náročnost implementace jednotlivých funkčností 21:36 19:12 16:48 14:24 12:00 9:36 JDBC Hibernate 7:12 4:48 2:24 0:00 Jeden objekt Řětěz Graf bez cyklů Graf s cykly Kolekce SCO Kolekce FCO Dedičnost jedna tab, Dědičnost všechny tab, Dědičnost konkrétní tab, Kolekce dědičnosti Zdroj: Michal Pravda, Diplomová práce na MFF UK, 2007
28 Nevýhody Přechod na Hibernate bolí Vyţaduje jiný způsob myšlení Kdyţ chci smazat záznam, musím jej nejdříve načíst Naprosto nefunguje intuitivní přístup Plochá learning curve Minimálně 2 dny na základní seznámení Omezení designu datového či doménového modelu Aby bylo pouţití ekonomické
29 Základní principy Vše se točí okolo Session Obaluje připojení k databázi Primární cache obsahuje všechny načítané a ukládané objekty Metody pro CRUD Zpravidla přístup Session per transaction
30 Dotazovací jazyk - HQL Podobá se SQL Pracuje s třídami místo s tabulkami Polymorfní dotazy FROM java.lang.object Vrátí všechna data z databáze Dobrým zvykem je pouţívat Named Queries: Pojmenovaný HQL dotaz HQL je na jednom místě Buď u entity tříd, nebo v zadaném balíčku Rychlejší Hibernate provede parsing jen jednou
31 Dotazovací jazyk - Criteria API Alternativa k HQL dotaz se skládá z Java objektů (ţádné HQL, SQL, OQL, ) Efektivnější IDE nám můţe napovídat Typické pouţití vyhledávání podle kritérií Klasické řešení - poskládat z vyhledávacích kritérií SQL (HQL) String. Velmi náchylné k chybám (kompilátor nám nepomůţe) Svádí k trikům typu WHERE 1=1
32 Konfigurace a metadata Konfigurace: XML hibernate.cfg.xml Java Spring Mapování mezi doménovým modelem a DB: XML Starší, lepší podpora Niţší produktivita Anotace Standard JPA
33 Lazy vs. Eager fetching Není rozumné vţdy načítat celý objektový graf Moţnost inicializovat asociace aţ při prvním přístupu => Lazy Fetching Implemenovatáno pomocí: Instrumentace byte codu dynamických proxy. Pozor na správnou implementaci metod equals a hashcode. LazyInitializationException
34 Kdyţ je Hibernate příliš horlivý select souhrnnyli0_.id as id9_62_, souhrnnyli0_.datum_pocatku_platnosti as datum2_9_62_, souhrnnyli0_.datum_storna as datum3_9_62_, souhrnnyli0_.id_limitu as id4_9_62_, souhrnnyli0_.nazev as nazev9_62_, souhrnnyli0_.smlouva as smlouva9_62_, nazevlimit1_.klic as klic23_0_, nazevlimit1_.hodnota as hodnota23_0_, pojisteni2_.souhrnny_limit as souhrnny8_64_, pojisteni2_.id as id64_, pojisteni2_.id as id4_1_, pojisteni2_.cislo_dodatku_storna as cislo2_4_1_, pojisteni2_.datum_storna as datum3_4_1_, pojisteni2_.platnost_od as platnost4_4_1_, pojisteni2_.id_pojisteni as id5_4_1_, pojisteni2_.max_pojistne_plneni as max6_4_1_, pojisteni2_.nazev_id as nazev14_4_1_, pojisteni2_.predmet_id as predmet11_4_1_, pojisteni2_.sazebnik_id as sazebnik13_4_1_, pojisteni2_.sleva as sleva4_1_, pojisteni2_.smlouva_id as smlouva10_4_1_, pojisteni2_.souhrnny_limit as souhrnny8_4_1_, pojisteni2_.spoluucast_id as spoluucast12_4_1_, pojisteni2_.typ as typ4_1_, nazevpojis3_.klic as klic25_2_, nazevpojis3_.hodnota as hodnota25_2_, policka4_.pojisteni_id as pojisteni1_65_, policko5_.id as policko2_65_, policko5_.id as id6_3_, policko5_.ciselna_hodnota as ciselna2_6_3_, policko5_.policko as policko6_3_, policko5_.textova_hodnota as textova3_6_3_, policko5_.vyctova_hodnota as vyctova4_6_3_, cpolicko6_.id as id48_4_, cpolicko6_.typ as typ48_4_, hodnoty7_.policko as policko66_, hodnoty7_.klic as klic66_, hodnoty7_.klic as klic43_5_, hodnoty7_.hodnota as hodnota43_5_, hodnoty7_.policko as policko43_5_, chodnotapo8_.klic as klic43_6_, chodnotapo8_.hodnota as hodnota43_6_, chodnotapo8_.policko as policko43_6_, predmet9_.id as id7_7_, predmet9_.cislo_dodatku_storna as cislo2_7_7_, predmet9_.datum_storna as datum3_7_7_, predmet9_.platnost_od as platnost4_7_7_, predmet9_.predmet_id as predmet5_7_7_, predmet9_.misto_id as misto9_7_7_, predmet9_.nazev_predmetu as nazev11_7_7_, predmet9_.sazebnik as sazebnik7_7_, predmet9_.smlouva_id as smlouva7_7_7_, predmet9_.specifikace_predmetu as specifik6_7_7_, predmet9_.typ_pojistne_hodnoty as typ10_7_7_, predmet9_.typ_predmetu as typ8_7_7_, predmet9_.vlastnictvi_predmetu as vlastni12_7_7_, mistopojis10_.id as id1_8_, mistopojis10_.cislo_dodatku_storna as cislo2_1_8_, mistopojis10_.datum_storna as datum3_1_8_, mistopojis10_.platnost_od as platnost4_1_8_, mistopojis10_.misto_id as misto5_1_8_, mistopojis10_.cinnost_id as cinnost9_1_8_, mistopojis10_.popis as popis1_8_, mistopojis10_.zona_id as zona7_1_8_, mistopojis10_.smlouva_id as smlouva8_1_8_, adresy11_.misto_pojisteni as misto6_67_, adresy11_.id as id67_, adresy11_.id as id0_9_, adresy11_.psc as psc0_9_, adresy11_.ulice as ulice0_9_, adresy11_.adresa_id as adresa5_0_9_, adresy11_.misto_pojisteni as misto6_0_9_, podnikatel12_.klic as klic21_10_, podnikatel12_.nazev_cinnosti as nazev2_21_10_, podnikatel12_.odvetvi as odvetvi21_10_, podnikatel13_.klic as klic22_11_, podnikatel13_.nazev_odvetvi as nazev2_22_11_, rizikovapo14_.klic as klic26_12_, rizikovapo14_.hodnota as hodnota26_12_, rizikovapo14_.platnost_do as platnost3_26_12_, rizikovapo14_.platnost_od as platnost4_26_12_, pojistnasm15_.id as id5_13_, pojistnasm15_.cetnost_placeni as cetnost14_5_13_, pojistnasm15_.cislo_dodatku as cislo2_5_13_, pojistnasm15_.cislo_navrhu as cislo3_5_13_, pojistnasm15_.cislo_ps as cislo4_5_13_, pojistnasm15_.konec_platnosti as konec5_5_13_, pojistnasm15_.pocatek_platnosti as pocatek6_5_13_, pojistnasm15_.datum_uzavreni as datum7_5_13_, pojistnasm15_.korespondence as korespo18_5_13_, pojistnasm15_.pobocka_produkce as pobocka16_5_13_, pojistnasm15_.popis as popis5_13_, pojistnasm15_.sleva as sleva5_13_, pojistnasm15_.stav as stav5_13_, pojistnasm15_.typ_pojistneho as typ17_5_13_, pojistnasm15_.cislo_uctu_pojistnika as cislo10_5_13_, pojistnasm15_.kod_banky as kod15_5_13_, pojistnasm15_.predcisli_uctu_pojistnika as predcisli11_5_13_, pojistnasm15_.specificky_symbol_uctu_pojistnika as specificky12_5_13_, pojistnasm15_.vysledna_pml as vysledna13_5_13_, cetnostpla16_.klic as klic15_14_, cetnostpla16_.hodnota as hodnota15_14_, koresponde17_.klic as klic20_15_, koresponde17_.hodnota as hodnota20_15_, osoby18_.smlouva_id as smlouva11_68_, osoby18_.id as id68_, osoby18_.id as id3_16_, osoby18_.adresa_id as adresa10_3_16_, osoby18_.koresp_adresa_id as koresp14_3_16_, osoby18_.cislo_pasu as cislo2_3_16_, osoby18_.evidencni_vypis as evidencni3_3_16_, osoby18_.funkce as funkce3_16_, osoby18_.ico as ico3_16_, osoby18_.jmeno as jmeno3_16_, osoby18_.nazev_firmy as nazev7_3_16_, osoby18_.prijmeni as prijmeni3_16_, osoby18_.rodne_cislo as rodne9_3_16_, osoby18_.role as role3_16_, osoby18_.smlouva_id as smlouva11_3_16_, osoby18_.statni_prislusnost as statni15_3_16_, osoby18_.titul_id as titul13_3_16_, osoby18_.typ as typ3_16_, adresa19_.id as id0_17_, adresa19_.psc as psc0_17_, adresa19_.ulice as ulice0_17_, adresa19_.adresa_id as adresa5_0_17_, adresa19_.misto_pojisteni as misto6_0_17_, adresa19_.typ as typ0_17_, adresa20_.id as id0_18_, adresa20_.psc as psc0_18_, adresa20_.ulice as ulice0_18_, adresa20_.adresa_id as adresa5_0_18_, adresa20_.misto_pojisteni as misto6_0_18_, adresa20_.typ as typ0_18_, roleosoby21_.klic as klic27_19_, roleosoby21_.hodnota as hodnota27_19_, statnipris22_.klic as klic29_20_, statnipris22_.hodnota as hodnota29_20_, titul23_.klic as klic31_21_, titul23_.hodnota as hodnota31_21_, typosoby24_.klic as klic33_22_, typosoby24_.hodnota as hodnota33_22_, cislopoboc25_.klic as klic16_23_, cislopoboc25_.hodnota as hodnota16_23_, pojisteni26_.smlouva_id as smlouva10_69_, pojisteni26_.id as id69_, pojisteni26_.id as id4_24_, pojisteni26_.cislo_dodatku_storna as cislo2_4_24_, pojisteni26_.datum_storna as datum3_4_24_, pojisteni26_.platnost_od as platnost4_4_24_, pojisteni26_.id_pojisteni as id5_4_24_, pojisteni26_.max_pojistne_plneni as max6_4_24_, pojisteni26_.nazev_id as nazev14_4_24_, pojisteni26_.predmet_id as predmet11_4_24_, pojisteni26_.sazebnik_id as sazebnik13_4_24_, pojisteni26_.sleva as sleva4_24_, pojisteni26_.smlouva_id as smlouva10_4_24_, pojisteni26_.souhrnny_limit as souhrnny8_4_24_, pojisteni26_.spoluucast_id as spoluucast12_4_24_, pojisteni26_.typ as typ4_24_, csazebnik27_.id as id50_25_, csazebnik27_.nazev as nazev50_25_, csazebnik27_.platnost_do as platnost3_50_25_, csazebnik27_.platnost_od as platnost4_50_25_, predmetyap28_.sazebnik as sazebnik70_, predmetyap28_.platnost_do as platnost2_70_, predmetyap28_.platnost_od as platnost3_70_, predmetyap28_.pojisteni as pojisteni70_, predmetyap28_.predmet as predmet70_, cpojisteni29_.id as id47_26_, cpojisteni29_.nazev as nazev47_26_, konverze30_.pojisteni_id as pojisteni5_71_, konverze30_.id as id71_, konverze30_.id as id44_27_, konverze30_.id_oj as id2_44_27_, konverze30_.platnost_do as platnost3_44_27_, konverze30_.platnost_od as platnost4_44_27_, konverze30_.pojisteni_id as pojisteni5_44_27_, okamzikyaa31_.pojisteni_id as pojisteni1_72_, okamzikyaa31_.akce_id as akce2_72_, okamzikyaa31_.okamzik_id as okamzik3_72_, okamzikyaa31_.poradi as poradi72_, okamzikyaa31_.platnost_do as platnost5_72_, okamzikyaa31_.platnost_od as platnost6_72_, cakce32_.id as id41_28_, cakce32_.java_program as java2_41_28_, cokamzik33_.id as id45_29_, cokamzik33_.nazev as nazev45_29_, policka34_.pojisteni_id as pojisteni1_73_, policka34_.platnost_do as platnost2_73_, policka34_.platnost_od as platnost3_73_, policka34_.policko_id as policko4_73_, cpolicko35_.id as id48_30_, cpolicko35_.typ as typ48_30_, souhrnneli36_.pojisteni_id as pojisteni1_74_, csouhrnnyl37_.id as souhrnne2_74_, csouhrnnyl37_.id as id51_31_, csouhrnnyl37_.nazev as nazev51_31_, cpredmet38_.id as id49_32_, cpredmet38_.misto_poj_povinne as misto2_49_32_, cpredmet38_.nazev as nazev49_32_, cpredmet38_.typ as typ49_32_, typpredmet39_.klic as klic37_33_, typpredmet39_.hodnota as hodnota37_33_, spoluucast40_.klic as klic28_34_, spoluucast40_.hodnota as hodnota28_34_, ctyppojist41_.klic as klic34_35_, ctyppojist41_.hodnota as hodnota34_35_, otazky42_.pojisteni_id as pojisteni1_75_, otazky42_.otazka_id as otazka2_75_, otazky42_.platnost_do as platnost3_75_, otazky42_.platnost_od as platnost4_75_, cotazka43_.id as id46_36_, cotazka43_.poradi as poradi46_36_, cotazka43_.typ as typ46_36_, zavisina44_.pojisteni_id as pojisteni1_76_, zavisina44_.master_id as master2_76_, zavisina44_.pozadovany_vysledek as pozadovany3_76_, cotazka45_.id as id46_37_, cotazka45_.poradi as poradi46_37_, cotazka45_.typ as typ46_37_, predmety46_.smlouva_id as smlouva7_77_, predmety46_.id as id77_, predmety46_.id as id7_38_, predmety46_.cislo_dodatku_storna as cislo2_7_38_, predmety46_.datum_storna as datum3_7_38_, predmety46_.platnost_od as platnost4_7_38_, predmety46_.predmet_id as predmet5_7_38_, predmety46_.misto_id as misto9_7_38_, predmety46_.nazev_predmetu as nazev11_7_38_, predmety46_.sazebnik as sazebnik7_38_, predmety46_.smlouva_id as smlouva7_7_38_, predmety46_.specifikace_predmetu as specifik6_7_38_, predmety46_.typ_pojistne_hodnoty as typ10_7_38_, predmety46_.typ_predmetu as typ8_7_38_, predmety46_.vlastnictvi_predmetu as vlastni12_7_38_, nazevpredm47_.klic as klic24_39_, nazevpredm47_.hodnota as hodnota24_39_, nemovitost48_.predmet as predmet78_, nemovitost48_.id as id78_, nemovitost48_.id as id2_40_, nemovitost48_.cena as cena2_40_, nemovitost48_.index as index2_40_, nemovitost48_.predmet as predmet2_40_, nemovitost48_.psc as psc2_40_, nemovitost48_.ulice as ulice2_40_, nemovitost48_.specifikace as specifik7_2_40_, policka49_.predmet_id as predmet1_79_, policko50_.id as policko2_79_, policko50_.id as id6_41_, policko50_.ciselna_hodnota as ciselna2_6_41_, policko50_.policko as policko6_41_, policko50_.textova_hodnota as textova3_6_41_, policko50_.vyctova_hodnota as vyctova4_6_41_, csazebnik51_.id as id50_42_, csazebnik51_.nazev as nazev50_42_, csazebnik51_.platnost_do as platnost3_50_42_, csazebnik51_.platnost_od as platnost4_50_42_, typpojistn52_.klic as klic36_43_, typpojistn52_.hodnota as hodnota36_43_, typpredmet53_.klic as klic37_44_, typpredmet53_.hodnota as hodnota37_44_, vlastnictv54_.klic as klic39_45_, vlastnictv54_.hodnota as hodnota39_45_, vozidla55_.predmet as predmet80_, vozidla55_.vozidlo_id as vozidlo1_80_, vozidla55_.vozidlo_id as vozidlo1_12_46_, vozidla55_.cena as cena12_46_, vozidla55_.index as index12_46_, vozidla55_.predmet as predmet12_46_, vozidla55_.cena_nova as cena4_12_46_, vozidla55_.cislo_karoserie as cislo5_12_46_, vozidla55_.druh as druh12_46_, vozidla55_.registracni_znacka as registra6_12_46_, vozidla55_.rok_vyroby as rok7_12_46_, vozidla55_.typ_provedeni as typ9_12_46_, vozidla55_.znacka as znacka12_46_, druhvozidl56_.klic as klic18_47_, druhvozidl56_.hodnota as hodnota18_47_, typprovede57_.klic as klic38_48_, typprovede57_.hodnota as hodnota38_48_, znackavozi58_.klic as klic40_49_, znackavozi58_.hodnota as hodnota40_49_, zarizeni59_.predmet as predmet81_, zarizeni59_.zarizeni_id as zarizeni1_81_, zarizeni59_.zarizeni_id as zarizeni1_13_50_, zarizeni59_.cena as cena13_50_, zarizeni59_.index as index13_50_, zarizeni59_.predmet as predmet13_50_, zarizeni59_.rok_vyroby as rok4_13_50_, zarizeni59_.specifikace as specifik5_13_50_, zarizeni59_.typ as typ13_50_, zarizeni59_.vyrobni_cislo as vyrobni7_13_50_, prilohy60_.smlouva_id as smlouva4_82_, prilohy60_.id as id82_, prilohy60_.id as id8_51_, prilohy60_.druh as druh8_51_, prilohy60_.id_prilohy as id2_8_51_, prilohy60_.pocet_stran as pocet3_8_51_, prilohy60_.smlouva_id as smlouva4_8_51_, druhpriloh61_.klic as klic17_52_, druhpriloh61_.hodnota as hodnota17_52_, souhrnneli62_.smlouva as smlouva83_, souhrnneli62_.id as id83_, souhrnneli62_.id as id9_53_, souhrnneli62_.datum_pocatku_platnosti as datum2_9_53_, souhrnneli62_.datum_storna as datum3_9_53_, souhrnneli62_.id_limitu as id4_9_53_, souhrnneli62_.nazev as nazev9_53_, souhrnneli62_.smlouva as smlouva9_53_, specialniu63_.smlouva_id as smlouva3_84_, specialniu63_.id as id84_, specialniu63_.id as id10_54_, specialniu63_.smlouva_id as smlouva3_10_54_, specialniu63_.text as text10_54_, spravci64_.smlouva_id as smlouva1_85_, spravce65_.id as spravce2_85_, spravce65_.id as id11_55_, spravce65_.cislo_pobocky as cislo8_11_55_, spravce65_.cislo_spravce as cislo2_11_55_, spravce65_. as 11_55_, spravce65_.jmeno as jmeno11_55_, spravce65_.osobni_cislo as osobni5_11_55_, spravce65_.prijmeni as prijmeni11_55_, spravce65_.telefon as telefon11_55_, cislopoboc66_.klic as klic16_56_, cislopoboc66_.hodnota as hodnota16_56_, stavsmlouv67_.klic as klic30_57_, stavsmlouv67_.hodnota as hodnota30_57_, typpojistn68_.klic as klic35_58_, typpojistn68_.hodnota as hodnota35_58_, kodbanky69_.klic as klic19_59_, kodbanky69_.kod_banky as kod2_19_59_, kodbanky69_.nazev_banky as nazev3_19_59_, ziskatele70_.smlouva_id as smlouva10_86_, ziskatele70_.id as id86_, ziskatele70_.id as id14_60_, ziskatele70_.cislo_pobocky as cislo9_14_60_, ziskatele70_.cislo_ziskatele as cislo2_14_60_, ziskatele70_.jmeno as jmeno14_60_, ziskatele70_.nazev as nazev14_60_, ziskatele70_.osobni_cislo as osobni5_14_60_, ziskatele70_.podil_produkce as podil6_14_60_, ziskatele70_.podil_provize as podil7_14_60_, ziskatele70_.prijmeni as prijmeni14_60_, ziskatele70_.smlouva_id as smlouva10_14_60_, cislopoboc71_.klic as klic16_61_, cislopoboc71_.hodnota as hodnota16_61_ from d_souhrnny_limit_ppr souhrnnyli0_ left outer join c_nazev_limitu_ppr nazevlimit1_ on souhrnnyli0_.nazev=nazevlimit1_.klic left outer join d_pojisteni_ppr pojisteni2_ on souhrnnyli0_.id=pojisteni2_.souhrnny_limit left outer join c_nazev_pojisteni_ppr nazevpojis3_ on pojisteni2_.nazev_id=nazevpojis3_.klic left outer join d_pojisteni_policko_ppr policka4_ on pojisteni2_.id=policka4_.pojisteni_id left outer join d_policko_ppr policko5_ on policka4_.policko_id=policko5_.id left outer join c_policko_ppr cpolicko6_ on policko5_.policko=cpolicko6_.id left outer join c_policko_hodnota_ppr hodnoty7_ on cpolicko6_.id=hodnoty7_.policko left outer join c_policko_hodnota_ppr chodnotapo8_ on policko5_.vyctova_hodnota=chodnotapo8_.klic left outer join d_predmet_ppr predmet9_ on pojisteni2_.predmet_id=predmet9_.id left outer join d_misto_pojisteni_ppr mistopojis10_ on predmet9_.misto_id=mistopojis10_.id left outer join d_adresa_ppr adresy11_ on mistopojis10_.id=adresy11_.misto_pojisteni left outer join c_podnikatelska_cinnost_ppr podnikatel12_ on mistopojis10_.cinnost_id=podnikatel12_.klic left outer join c_podnikatelske_odvetvi_ppr podnikatel13_ on podnikatel12_.odvetvi=podnikatel13_.klic left outer join c_rizikova_povodnova_zona_ppr rizikovapo14_ on mistopojis10_.zona_id=rizikovapo14_.klic left outer join d_pojistna_smlouva_ppr pojistnasm15_ on mistopojis10_.smlouva_id=pojistnasm15_.id left outer join c_cetnost_placeni_ppr cetnostpla16_ on pojistnasm15_.cetnost_placeni=cetnostpla16_.klic left outer join c_korespondence_ppr koresponde17_ on pojistnasm15_.korespondence=koresponde17_.klic left outer join d_osoba_ppr osoby18_ on pojistnasm15_.id=osoby18_.smlouva_id left outer join d_adresa_ppr adresa19_ on osoby18_.adresa_id=adresa19_.id left outer join d_adresa_ppr adresa20_ on osoby18_.koresp_adresa_id=adresa20_.id left outer join c_role_osoby_ppr roleosoby21_ on osoby18_.role=roleosoby21_.klic left outer join c_statni_prislusnost_ppr statnipris22_ on osoby18_.statni_prislusnost=statnipris22_.klic left outer join c_titul_ppr titul23_ on osoby18_.titul_id=titul23_.klic left outer join c_typ_osoby_ppr typosoby24_ on osoby18_.typ=typosoby24_.klic left outer join c_cislo_pobocky_ppr cislopoboc25_ on pojistnasm15_.pobocka_produkce=cislopoboc25_.klic left outer join d_pojisteni_ppr pojisteni26_ on pojistnasm15_.id=pojisteni26_.smlouva_id left outer join c_sazebnik_ppr csazebnik27_ on pojisteni26_.sazebnik_id=csazebnik27_.id left outer join c_sazebnik_predmet_pojisteni_ppr predmetyap28_ on csazebnik27_.id=predmetyap28_.sazebnik left outer join c_pojisteni_ppr cpojisteni29_ on predmetyap28_.pojisteni=cpojisteni29_.id left outer join c_konverze_ppr konverze30_ on cpojisteni29_.id=konverze30_.pojisteni_id left outer join c_pojisteni_okamzik_akce_ppr okamzikyaa31_ on cpojisteni29_.id=okamzikyaa31_.pojisteni_id left outer join c_akce_ppr cakce32_ on okamzikyaa31_.akce_id=cakce32_.id left outer join c_okamzik_ppr cokamzik33_ on okamzikyaa31_.okamzik_id=cokamzik33_.id left outer join c_pojisteni_policko_ppr policka34_ on cpojisteni29_.id=policka34_.pojisteni_id left outer join c_policko_ppr cpolicko35_ on policka34_.policko_id=cpolicko35_.id left outer join c_pojisteni_souhrnnylimit_ppr souhrnneli36_ on cpojisteni29_.id=souhrnneli36_.pojisteni_id left outer join c_souhrnny_limit_ppr csouhrnnyl37_ on souhrnneli36_.souhrnnelimity_id=csouhrnnyl37_.id left outer join c_predmet_ppr cpredmet38_ on predmetyap28_.predmet=cpredmet38_.id left outer join c_typ_predmetu_ppr typpredmet39_ on cpredmet38_.typ=typpredmet39_.klic left outer join c_spoluucast_ppr spoluucast40_ on pojisteni26_.spoluucast_id=spoluucast40_.klic left outer join c_typ_pojisteni_ppr ctyppojist41_ on pojisteni26_.typ=ctyppojist41_.klic left outer join c_typpojisteni_otazka_ppr otazky42_ on ctyppojist41_.klic=otazky42_.pojisteni_id left outer join c_otazka_ppr cotazka43_ on otazky42_.otazka_id=cotazka43_.id left outer join c_otazka_zavislost_ppr zavisina44_ on cotazka43_.id=zavisina44_.pojisteni_id left outer join c_otazka_ppr cotazka45_ on zavisina44_.master_id=cotazka45_.id left outer join d_predmet_ppr predmety46_ on pojistnasm15_.id=predmety46_.smlouva_id left outer join c_nazev_predmetu_ppr nazevpredm47_ on predmety46_.nazev_predmetu=nazevpredm47_.klic left outer join d_nemovitost_ppr nemovitost48_ on predmety46_.id=nemovitost48_.predmet left outer join d_predmet_policko_ppr policka49_ on predmety46_.id=policka49_.predmet_id left outer join d_policko_ppr policko50_ on policka49_.policko_id=policko50_.id left outer join c_sazebnik_ppr csazebnik51_ on predmety46_.sazebnik=csazebnik51_.id left outer join c_typ_pojistne_hodnoty_ppr typpojistn52_ on predmety46_.typ_pojistne_hodnoty=typpojistn52_.klic left outer join c_typ_predmetu_ppr typpredmet53_ on predmety46_.typ_predmetu=typpredmet53_.klic left outer join c_vlastnictvi_predmetu_ppr vlastnictv54_ on predmety46_.vlastnictvi_predmetu=vlastnictv54_.klic left outer join d_vozidlo_ppr vozidla55_ on predmety46_.id=vozidla55_.predmet left outer join c_druh_vozidla_ppr druhvozidl56_ on vozidla55_.druh=druhvozidl56_.klic left outer join c_typ_provedeni_vozidla_ppr typprovede57_ on vozidla55_.typ_provedeni=typprovede57_.klic left outer join c_znacka_vozidla_ppr znackavozi58_ on vozidla55_.znacka=znackavozi58_.klic left outer join d_zarizeni_ppr zarizeni59_ on predmety46_.id=zarizeni59_.predmet left outer join d_priloha_ppr prilohy60_ on pojistnasm15_.id=prilohy60_.smlouva_id left outer join c_druh_prilohy_ppr druhpriloh61_ on prilohy60_.druh=druhpriloh61_.klic left outer join d_souhrnny_limit_ppr souhrnneli62_ on pojistnasm15_.id=souhrnneli62_.smlouva left outer join d_specialni_ujednani_ppr specialniu63_ on pojistnasm15_.id=specialniu63_.smlouva_id left outer join d_smlouva_spravce_ppr spravci64_ on pojistnasm15_.id=spravci64_.smlouva_id left outer join d_spravce_ppr spravce65_ on spravci64_.spravce_id=spravce65_.id left outer join c_cislo_pobocky_ppr cislopoboc66_ on spravce65_.cislo_pobocky=cislopoboc66_.klic left outer join c_stav_smlouvy_ppr stavsmlouv67_ on pojistnasm15_.stav=stavsmlouv67_.klic left outer join c_typ_pojistneho_ppr typpojistn68_ on pojistnasm15_.typ_pojistneho=typpojistn68_.klic left outer join c_kod_banky_ppr kodbanky69_ on pojistnasm15_.kod_banky=kodbanky69_.klic left outer join d_ziskatel_ppr ziskatele70_ on pojistnasm15_.id=ziskatele70_.smlouva_id left outer join c_cislo_pobocky_ppr cislopoboc71_ on ziskatele70_.cislo_pobocky=cislopoboc71_.klic where souhrnnyli0_.id=?
35 Pár slov o metodě equals Při pouţití lazy fetchingu pozor na implementaci equals, hashcode a compareto Hibernate vytváří proxy Pouţívat instanceof namísto equals na Class this.getclass().equals(o.getclass()) je špatně! Zaplatíme ztrátou symetrie (potomek předek). Pouţívat gettery namísto přímého přístupu k atributům Proxy mají tyto atributy null Při pouţití generovaných primárních klíčů pouţívat v equals business klíč
36 Příklad pouţití { // nebezime v transakci => Session per operation Zakaznik z = session.get(zakaznik.class, 1); z.setjmeno( Daneslav ); session.update(z); }
37 = objednavka ) public class Objednavka implements Serializable = private Long = objednavka ) private Set<Polozka> zbozi; } // gettery a settery, equals a hashcode
38 parameters = "platnost", type = parameters = "platnost", type = parameters = "platnost", type = parameters = "platnost", type = "date")) = "c_pojisteni") public class CPojisteni extends Konfigurace { = FetchType.LAZY, mappedby = = = = "CPojisteni_policka", condition = = CacheConcurrencyStrategy.READ_ONLY) private SortedSet<CPojisteniPolicko> policka;
39 Dědičnost
40 Mapování dědičnosti Tři strategie: Table per Class (subclass) Single Table per Class Hierarchy Joined Subclass Falešná dědičnost Zdědění atributů a mapování nevytváří se persistentní hierarchie. Lze pouţít kdekoliv v hierarchii
41 Table per Class Pro kaţdého potomka samostatná tabulka Implementována pomocí UNIONů Potíţe s referenční integritou Asociace na předka nelze omezit cizím klíčem Příklad: Osoba FyzickaOsoba, PrávnickaOsoba (dvě tabulky fyzicka_osoba a pravnicka_osoba).
42 Single Table per Class Hierarchy Všechny třídy v jedné tabulce Nevýhoda - spousta NULL hodnot Jak poznat, o který typ se jedná: Default: nový sloupec (discriminator column) SQL Case vracející hodnotu virtuálního discriminator sloupce Nejpouţívanější způsob reprezentace dědičnosti
43 Joined Subclass Tabulka pro předka + pro kaţdého potomka Výhodné, pokud je třeba často získat instance předka Potomci mohou pouţívat stejný primární klíč jako předek nebo definovat vlastní. Nevýhoda hodně joinů Osoba Adresa FyzickaOsoba PravnickaOsoba
44 Integrace Spring Velmi dobrá podpora HibernateTemplate EJB Velmi dobrá podpora JPA Přímá integrace s některými webovými frameworky JSF Tapestry Dokonce i GWT!
45 Další zajímavé funkce Sekundární cache Existují různé implementace (např. EHCache) Široce konfigurovatelné Filtry Umoţňují přidat vlastní SQL podmínky při inicializaci kolekcí či seznamu entit. Moţno pouţívat parametry Nutno explicitně zapnout Custom SQL Pro jednotlivé CRUD operace Podpora triggerů, uloţených procedur, serializace do XML
46 Kdy pouţít Hibernate Máme pod kontrolou doménový nebo datový model Ideálně oba Uložené procedury se pouţívají jen v malé míře nebo vůbec Pouţíváme podporovanou databázi Podporu lze dopsat (Hibernate dialect) Máme dostatek lidí se znalostí Hibernate Hibernate je sloţitý (řeší sloţitý problém) Poţadovaná hloubka znalostí dle velikosti projektu
47 Testování
48 Testování Základem integrační testy Ověření mapování Kontrola správnosti dotazů Vyšší vrstvy ověření, ţe nedochází k LazyInitializationException GenericDaoTest ověření funkčnosti základních metod Unit testy - pro ORM prakticky nemají smysl Mockování DAO vrstvy kvůli rychlosti
49 Testování Frameworky: TestNG, JUnit téměř nezbytnost DbUnit uvedení databáze do předem známého stavu EasyMock mockování (simulace chování) Unitils integrace výše uvedených do jednoho celku
50 Hibernate a web
51 domain Spring framework Architektura webové aplikace web web services business services data - access O/R mapping integration Database other services
52 domain Spring framework Persistentní vrstva web web services business services data - access O/R mapping integration Database other services
53 Persistentní vrstva (I.) Zdroj dat JDBC connection DataSource (Spring bean, JNDI) SessionFactory (Spring bean, JNDI) Transakce JDBC API TransactionManager
54 Persistentní vrstva (II.)
55 Design perzistentní vrstvy Návrhový vzor GenericDAO Oddělení kódu pracujícího s databází (prostřednictvím ORM) do samostatné vrstvy Pro kaţdý doménový objekt jeden interface a jeho implementace
56 GenericDAO GenericDAO Implementace základních metod IGenericDAO Metody společné pro všechny DAO Typicky obsahuje CRUD operace Ideální pokud máme k dispozici generické typy (Java 1.5)
57 domain Spring framework Business vrstva web web services business services data - access O/R mapping integration Database other services
58 Business vrstva (I.) Volání DAO Řízení transakcí Programově (BMT) x deklarativně (CMT)
59 Business vrstva (II.) Příklad volání persistentní vrstvy
60 domain Spring framework Prezentační vrstva web web services business services data - access O/R mapping integration Database other services
61 Prezentační vrstva (I.) Volání business vrstvy Pracujeme s objekty doménového modelu
62 Jdeme na věc!
63 Má ještě něco v záloze?
64 Vyplývá z toho něco? Na platnosti Session záleţí!
65 Co s tím? Eager místo Lazy Inicializovat potřebné asociace Prodlouţit dobu platnosti Session OpenSessionInView pattern
66 Shrnutí Web je ideální oblastí nasazení Integrace do aplikace není sloţitá Příliš nezasahuje do návrhu aplikace Nutné dodrţovat zásady správného chování
67 Hibernate v desktopových aplikacích
68 Hibernate v desktopových aplikacích Hibernate navrţen pro web Request response Request zpracováván v rámci jednoho vlákna Desktopové aplikace Zpravidla řízené událostmi Práce ve více vláknech Základní problémy Předpoklad krátké ţivotnosti Session Session není thread safe
69 Základní přístupy Detached objects (viz. dále) Stále otevřená Session Problém s primární cache Není thread safe Ţádný lazy fetching ve view vrstvě Simulace chování webu Pracné
70 Referenční aplikace Slouţí pro sjednávání pojistných smluv Rozsah ~ 1000 MD Technologie: Eclipse RCP Spring Hibernate Apache Derby (emedded reţim)
71 Detached objects Načte se celý objektový graf Jedno volání metody V našem případě cca 60 tříd Není to pomalé? Načítání a ukládání smlouvy trvá řádově sekundy Pak uţ je práce s aplikací rychlá
72 Zvolené řešení Jeden kořenový objekt (pojistná smlouva) Jediný, který se načítá a ukládá explicitně Ostatní kaskády Všechny vazby obousměrné Výjimkou číselníky BankAccount DealersProduction Dealer 0..* * 1..1 InsuranceAgreem ent 1..1 Eager fetching 1..1 AggregateLim it * * 0..* 0..* * Location Item Insurance * 0..* * Product * 0..* 0..* Dynam icfield
73 Problémy Správná definice kaskád Vraţdění sirotků all-delete-orphans 2-souvislost části objektového grafu K objektu A se lze dostat z objektu B dvěma cestami Vadí kaskádám Správné nastavení eager fetchingu Nelze pouţít joiny! InsuranceAgreement ALL ALL AggregateLimit DELETE_ORPHAN Insurance
74 Proč nešlo pouţít joiny? select souhrnnyli0_.id as id9_62_, souhrnnyli0_.datum_pocatku_platnosti as datum2_9_62_, souhrnnyli0_.datum_storna as datum3_9_62_, souhrnnyli0_.id_limitu as id4_9_62_, souhrnnyli0_.nazev as nazev9_62_, souhrnnyli0_.smlouva as smlouva9_62_, nazevlimit1_.klic as klic23_0_, nazevlimit1_.hodnota as hodnota23_0_, pojisteni2_.souhrnny_limit as souhrnny8_64_, pojisteni2_.id as id64_, pojisteni2_.id as id4_1_, pojisteni2_.cislo_dodatku_storna as cislo2_4_1_, pojisteni2_.datum_storna as datum3_4_1_, pojisteni2_.platnost_od as platnost4_4_1_, pojisteni2_.id_pojisteni as id5_4_1_, pojisteni2_.max_pojistne_plneni as max6_4_1_, pojisteni2_.nazev_id as nazev14_4_1_, pojisteni2_.predmet_id as predmet11_4_1_, pojisteni2_.sazebnik_id as sazebnik13_4_1_, pojisteni2_.sleva as sleva4_1_, pojisteni2_.smlouva_id as smlouva10_4_1_, pojisteni2_.souhrnny_limit as souhrnny8_4_1_, pojisteni2_.spoluucast_id as spoluucast12_4_1_, pojisteni2_.typ as typ4_1_, nazevpojis3_.klic as klic25_2_, nazevpojis3_.hodnota as hodnota25_2_, policka4_.pojisteni_id as pojisteni1_65_, policko5_.id as policko2_65_, policko5_.id as id6_3_, policko5_.ciselna_hodnota as ciselna2_6_3_, policko5_.policko as policko6_3_, policko5_.textova_hodnota as textova3_6_3_, policko5_.vyctova_hodnota as vyctova4_6_3_, cpolicko6_.id as id48_4_, cpolicko6_.typ as typ48_4_, hodnoty7_.policko as policko66_, hodnoty7_.klic as klic66_, hodnoty7_.klic as klic43_5_, hodnoty7_.hodnota as hodnota43_5_, hodnoty7_.policko as policko43_5_, chodnotapo8_.klic as klic43_6_, chodnotapo8_.hodnota as hodnota43_6_, chodnotapo8_.policko as policko43_6_, predmet9_.id as id7_7_, predmet9_.cislo_dodatku_storna as cislo2_7_7_, predmet9_.datum_storna as datum3_7_7_, predmet9_.platnost_od as platnost4_7_7_, predmet9_.predmet_id as predmet5_7_7_, predmet9_.misto_id as misto9_7_7_, predmet9_.nazev_predmetu as nazev11_7_7_, predmet9_.sazebnik as sazebnik7_7_, predmet9_.smlouva_id as smlouva7_7_7_, predmet9_.specifikace_predmetu as specifik6_7_7_, predmet9_.typ_pojistne_hodnoty as typ10_7_7_, predmet9_.typ_predmetu as typ8_7_7_, predmet9_.vlastnictvi_predmetu as vlastni12_7_7_, mistopojis10_.id as id1_8_, mistopojis10_.cislo_dodatku_storna as cislo2_1_8_, mistopojis10_.datum_storna as datum3_1_8_, mistopojis10_.platnost_od as platnost4_1_8_, mistopojis10_.misto_id as misto5_1_8_, mistopojis10_.cinnost_id as cinnost9_1_8_, mistopojis10_.popis as popis1_8_, mistopojis10_.zona_id as zona7_1_8_, mistopojis10_.smlouva_id as smlouva8_1_8_, adresy11_.misto_pojisteni as misto6_67_, adresy11_.id as id67_, adresy11_.id as id0_9_, adresy11_.psc as psc0_9_, adresy11_.ulice as ulice0_9_, adresy11_.adresa_id as adresa5_0_9_, adresy11_.misto_pojisteni as misto6_0_9_, podnikatel12_.klic as klic21_10_, podnikatel12_.nazev_cinnosti as nazev2_21_10_, podnikatel12_.odvetvi as odvetvi21_10_, podnikatel13_.klic as klic22_11_, podnikatel13_.nazev_odvetvi as nazev2_22_11_, rizikovapo14_.klic as klic26_12_, rizikovapo14_.hodnota as hodnota26_12_, rizikovapo14_.platnost_do as platnost3_26_12_, rizikovapo14_.platnost_od as platnost4_26_12_, pojistnasm15_.id as id5_13_, pojistnasm15_.cetnost_placeni as cetnost14_5_13_, pojistnasm15_.cislo_dodatku as cislo2_5_13_, pojistnasm15_.cislo_navrhu as cislo3_5_13_, pojistnasm15_.cislo_ps as cislo4_5_13_, pojistnasm15_.konec_platnosti as konec5_5_13_, pojistnasm15_.pocatek_platnosti as pocatek6_5_13_, pojistnasm15_.datum_uzavreni as datum7_5_13_, pojistnasm15_.korespondence as korespo18_5_13_, pojistnasm15_.pobocka_produkce as pobocka16_5_13_, pojistnasm15_.popis as popis5_13_, pojistnasm15_.sleva as sleva5_13_, pojistnasm15_.stav as stav5_13_, pojistnasm15_.typ_pojistneho as typ17_5_13_, pojistnasm15_.cislo_uctu_pojistnika as cislo10_5_13_, pojistnasm15_.kod_banky as kod15_5_13_, pojistnasm15_.predcisli_uctu_pojistnika as predcisli11_5_13_, pojistnasm15_.specificky_symbol_uctu_pojistnika as specificky12_5_13_, pojistnasm15_.vysledna_pml as vysledna13_5_13_, cetnostpla16_.klic as klic15_14_, cetnostpla16_.hodnota as hodnota15_14_, koresponde17_.klic as klic20_15_, koresponde17_.hodnota as hodnota20_15_, osoby18_.smlouva_id as smlouva11_68_, osoby18_.id as id68_, osoby18_.id as id3_16_, osoby18_.adresa_id as adresa10_3_16_, osoby18_.koresp_adresa_id as koresp14_3_16_, osoby18_.cislo_pasu as cislo2_3_16_, osoby18_.evidencni_vypis as evidencni3_3_16_, osoby18_.funkce as funkce3_16_, osoby18_.ico as ico3_16_, osoby18_.jmeno as jmeno3_16_, osoby18_.nazev_firmy as nazev7_3_16_, osoby18_.prijmeni as prijmeni3_16_, osoby18_.rodne_cislo as rodne9_3_16_, osoby18_.role as role3_16_, osoby18_.smlouva_id as smlouva11_3_16_, osoby18_.statni_prislusnost as statni15_3_16_, osoby18_.titul_id as titul13_3_16_, osoby18_.typ as typ3_16_, adresa19_.id as id0_17_, adresa19_.psc as psc0_17_, adresa19_.ulice as ulice0_17_, adresa19_.adresa_id as adresa5_0_17_, adresa19_.misto_pojisteni as misto6_0_17_, adresa19_.typ as typ0_17_, adresa20_.id as id0_18_, adresa20_.psc as psc0_18_, adresa20_.ulice as ulice0_18_, adresa20_.adresa_id as adresa5_0_18_, adresa20_.misto_pojisteni as misto6_0_18_, adresa20_.typ as typ0_18_, roleosoby21_.klic as klic27_19_, roleosoby21_.hodnota as hodnota27_19_, statnipris22_.klic as klic29_20_, statnipris22_.hodnota as hodnota29_20_, titul23_.klic as klic31_21_, titul23_.hodnota as hodnota31_21_, typosoby24_.klic as klic33_22_, typosoby24_.hodnota as hodnota33_22_, cislopoboc25_.klic as klic16_23_, cislopoboc25_.hodnota as hodnota16_23_, pojisteni26_.smlouva_id as smlouva10_69_, pojisteni26_.id as id69_, pojisteni26_.id as id4_24_, pojisteni26_.cislo_dodatku_storna as cislo2_4_24_, pojisteni26_.datum_storna as datum3_4_24_, pojisteni26_.platnost_od as platnost4_4_24_, pojisteni26_.id_pojisteni as id5_4_24_, pojisteni26_.max_pojistne_plneni as max6_4_24_, pojisteni26_.nazev_id as nazev14_4_24_, pojisteni26_.predmet_id as predmet11_4_24_, pojisteni26_.sazebnik_id as sazebnik13_4_24_, pojisteni26_.sleva as sleva4_24_, pojisteni26_.smlouva_id as smlouva10_4_24_, pojisteni26_.souhrnny_limit as souhrnny8_4_24_, pojisteni26_.spoluucast_id as spoluucast12_4_24_, pojisteni26_.typ as typ4_24_, csazebnik27_.id as id50_25_, csazebnik27_.nazev as nazev50_25_, csazebnik27_.platnost_do as platnost3_50_25_, csazebnik27_.platnost_od as platnost4_50_25_, predmetyap28_.sazebnik as sazebnik70_, predmetyap28_.platnost_do as platnost2_70_, predmetyap28_.platnost_od as platnost3_70_, predmetyap28_.pojisteni as pojisteni70_, predmetyap28_.predmet as predmet70_, cpojisteni29_.id as id47_26_, cpojisteni29_.nazev as nazev47_26_, konverze30_.pojisteni_id as pojisteni5_71_, konverze30_.id as id71_, konverze30_.id as id44_27_, konverze30_.id_oj as id2_44_27_, konverze30_.platnost_do as platnost3_44_27_, konverze30_.platnost_od as platnost4_44_27_, konverze30_.pojisteni_id as pojisteni5_44_27_, okamzikyaa31_.pojisteni_id as pojisteni1_72_, okamzikyaa31_.akce_id as akce2_72_, okamzikyaa31_.okamzik_id as okamzik3_72_, okamzikyaa31_.poradi as poradi72_, okamzikyaa31_.platnost_do as platnost5_72_, okamzikyaa31_.platnost_od as platnost6_72_, cakce32_.id as id41_28_, cakce32_.java_program as java2_41_28_, cokamzik33_.id as id45_29_, cokamzik33_.nazev as nazev45_29_, policka34_.pojisteni_id as pojisteni1_73_, policka34_.platnost_do as platnost2_73_, policka34_.platnost_od as platnost3_73_, policka34_.policko_id as policko4_73_, cpolicko35_.id as id48_30_, cpolicko35_.typ as typ48_30_, souhrnneli36_.pojisteni_id as pojisteni1_74_, csouhrnnyl37_.id as souhrnne2_74_, csouhrnnyl37_.id as id51_31_, csouhrnnyl37_.nazev as nazev51_31_, cpredmet38_.id as id49_32_, cpredmet38_.misto_poj_povinne as misto2_49_32_, cpredmet38_.nazev as nazev49_32_, cpredmet38_.typ as typ49_32_, typpredmet39_.klic as klic37_33_, typpredmet39_.hodnota as hodnota37_33_, spoluucast40_.klic as klic28_34_, spoluucast40_.hodnota as hodnota28_34_, ctyppojist41_.klic as klic34_35_, ctyppojist41_.hodnota as hodnota34_35_, otazky42_.pojisteni_id as pojisteni1_75_, otazky42_.otazka_id as otazka2_75_, otazky42_.platnost_do as platnost3_75_, otazky42_.platnost_od as platnost4_75_, cotazka43_.id as id46_36_, cotazka43_.poradi as poradi46_36_, cotazka43_.typ as typ46_36_, zavisina44_.pojisteni_id as pojisteni1_76_, zavisina44_.master_id as master2_76_, zavisina44_.pozadovany_vysledek as pozadovany3_76_, cotazka45_.id as id46_37_, cotazka45_.poradi as poradi46_37_, cotazka45_.typ as typ46_37_, predmety46_.smlouva_id as smlouva7_77_, predmety46_.id as id77_, predmety46_.id as id7_38_, predmety46_.cislo_dodatku_storna as cislo2_7_38_, predmety46_.datum_storna as datum3_7_38_, predmety46_.platnost_od as platnost4_7_38_, predmety46_.predmet_id as predmet5_7_38_, predmety46_.misto_id as misto9_7_38_, predmety46_.nazev_predmetu as nazev11_7_38_, predmety46_.sazebnik as sazebnik7_38_, predmety46_.smlouva_id as smlouva7_7_38_, predmety46_.specifikace_predmetu as specifik6_7_38_, predmety46_.typ_pojistne_hodnoty as typ10_7_38_, predmety46_.typ_predmetu as typ8_7_38_, predmety46_.vlastnictvi_predmetu as vlastni12_7_38_, nazevpredm47_.klic as klic24_39_, nazevpredm47_.hodnota as hodnota24_39_, nemovitost48_.predmet as predmet78_, nemovitost48_.id as id78_, nemovitost48_.id as id2_40_, nemovitost48_.cena as cena2_40_, nemovitost48_.index as index2_40_, nemovitost48_.predmet as predmet2_40_, nemovitost48_.psc as psc2_40_, nemovitost48_.ulice as ulice2_40_, nemovitost48_.specifikace as specifik7_2_40_, policka49_.predmet_id as predmet1_79_, policko50_.id as policko2_79_, policko50_.id as id6_41_, policko50_.ciselna_hodnota as ciselna2_6_41_, policko50_.policko as policko6_41_, policko50_.textova_hodnota as textova3_6_41_, policko50_.vyctova_hodnota as vyctova4_6_41_, csazebnik51_.id as id50_42_, csazebnik51_.nazev as nazev50_42_, csazebnik51_.platnost_do as platnost3_50_42_, csazebnik51_.platnost_od as platnost4_50_42_, typpojistn52_.klic as klic36_43_, typpojistn52_.hodnota as hodnota36_43_, typpredmet53_.klic as klic37_44_, typpredmet53_.hodnota as hodnota37_44_, vlastnictv54_.klic as klic39_45_, vlastnictv54_.hodnota as hodnota39_45_, vozidla55_.predmet as predmet80_, vozidla55_.vozidlo_id as vozidlo1_80_, vozidla55_.vozidlo_id as vozidlo1_12_46_, vozidla55_.cena as cena12_46_, vozidla55_.index as index12_46_, vozidla55_.predmet as predmet12_46_, vozidla55_.cena_nova as cena4_12_46_, vozidla55_.cislo_karoserie as cislo5_12_46_, vozidla55_.druh as druh12_46_, vozidla55_.registracni_znacka as registra6_12_46_, vozidla55_.rok_vyroby as rok7_12_46_, vozidla55_.typ_provedeni as typ9_12_46_, vozidla55_.znacka as znacka12_46_, druhvozidl56_.klic as klic18_47_, druhvozidl56_.hodnota as hodnota18_47_, typprovede57_.klic as klic38_48_, typprovede57_.hodnota as hodnota38_48_, znackavozi58_.klic as klic40_49_, znackavozi58_.hodnota as hodnota40_49_, zarizeni59_.predmet as predmet81_, zarizeni59_.zarizeni_id as zarizeni1_81_, zarizeni59_.zarizeni_id as zarizeni1_13_50_, zarizeni59_.cena as cena13_50_, zarizeni59_.index as index13_50_, zarizeni59_.predmet as predmet13_50_, zarizeni59_.rok_vyroby as rok4_13_50_, zarizeni59_.specifikace as specifik5_13_50_, zarizeni59_.typ as typ13_50_, zarizeni59_.vyrobni_cislo as vyrobni7_13_50_, prilohy60_.smlouva_id as smlouva4_82_, prilohy60_.id as id82_, prilohy60_.id as id8_51_, prilohy60_.druh as druh8_51_, prilohy60_.id_prilohy as id2_8_51_, prilohy60_.pocet_stran as pocet3_8_51_, prilohy60_.smlouva_id as smlouva4_8_51_, druhpriloh61_.klic as klic17_52_, druhpriloh61_.hodnota as hodnota17_52_, souhrnneli62_.smlouva as smlouva83_, souhrnneli62_.id as id83_, souhrnneli62_.id as id9_53_, souhrnneli62_.datum_pocatku_platnosti as datum2_9_53_, souhrnneli62_.datum_storna as datum3_9_53_, souhrnneli62_.id_limitu as id4_9_53_, souhrnneli62_.nazev as nazev9_53_, souhrnneli62_.smlouva as smlouva9_53_, specialniu63_.smlouva_id as smlouva3_84_, specialniu63_.id as id84_, specialniu63_.id as id10_54_, specialniu63_.smlouva_id as smlouva3_10_54_, specialniu63_.text as text10_54_, spravci64_.smlouva_id as smlouva1_85_, spravce65_.id as spravce2_85_, spravce65_.id as id11_55_, spravce65_.cislo_pobocky as cislo8_11_55_, spravce65_.cislo_spravce as cislo2_11_55_, spravce65_. as 11_55_, spravce65_.jmeno as jmeno11_55_, spravce65_.osobni_cislo as osobni5_11_55_, spravce65_.prijmeni as prijmeni11_55_, spravce65_.telefon as telefon11_55_, cislopoboc66_.klic as klic16_56_, cislopoboc66_.hodnota as hodnota16_56_, stavsmlouv67_.klic as klic30_57_, stavsmlouv67_.hodnota as hodnota30_57_, typpojistn68_.klic as klic35_58_, typpojistn68_.hodnota as hodnota35_58_, kodbanky69_.klic as klic19_59_, kodbanky69_.kod_banky as kod2_19_59_, kodbanky69_.nazev_banky as nazev3_19_59_, ziskatele70_.smlouva_id as smlouva10_86_, ziskatele70_.id as id86_, ziskatele70_.id as id14_60_, ziskatele70_.cislo_pobocky as cislo9_14_60_, ziskatele70_.cislo_ziskatele as cislo2_14_60_, ziskatele70_.jmeno as jmeno14_60_, ziskatele70_.nazev as nazev14_60_, ziskatele70_.osobni_cislo as osobni5_14_60_, ziskatele70_.podil_produkce as podil6_14_60_, ziskatele70_.podil_provize as podil7_14_60_, ziskatele70_.prijmeni as prijmeni14_60_, ziskatele70_.smlouva_id as smlouva10_14_60_, cislopoboc71_.klic as klic16_61_, cislopoboc71_.hodnota as hodnota16_61_ from d_souhrnny_limit_ppr souhrnnyli0_ left outer join c_nazev_limitu_ppr nazevlimit1_ on souhrnnyli0_.nazev=nazevlimit1_.klic left outer join d_pojisteni_ppr pojisteni2_ on souhrnnyli0_.id=pojisteni2_.souhrnny_limit left outer join c_nazev_pojisteni_ppr nazevpojis3_ on pojisteni2_.nazev_id=nazevpojis3_.klic left outer join d_pojisteni_policko_ppr policka4_ on pojisteni2_.id=policka4_.pojisteni_id left outer join d_policko_ppr policko5_ on policka4_.policko_id=policko5_.id left outer join c_policko_ppr cpolicko6_ on policko5_.policko=cpolicko6_.id left outer join c_policko_hodnota_ppr hodnoty7_ on cpolicko6_.id=hodnoty7_.policko left outer join c_policko_hodnota_ppr chodnotapo8_ on policko5_.vyctova_hodnota=chodnotapo8_.klic left outer join d_predmet_ppr predmet9_ on pojisteni2_.predmet_id=predmet9_.id left outer join d_misto_pojisteni_ppr mistopojis10_ on predmet9_.misto_id=mistopojis10_.id left outer join d_adresa_ppr adresy11_ on mistopojis10_.id=adresy11_.misto_pojisteni left outer join c_podnikatelska_cinnost_ppr podnikatel12_ on mistopojis10_.cinnost_id=podnikatel12_.klic left outer join c_podnikatelske_odvetvi_ppr podnikatel13_ on podnikatel12_.odvetvi=podnikatel13_.klic left outer join c_rizikova_povodnova_zona_ppr rizikovapo14_ on mistopojis10_.zona_id=rizikovapo14_.klic left outer join d_pojistna_smlouva_ppr pojistnasm15_ on mistopojis10_.smlouva_id=pojistnasm15_.id left outer join c_cetnost_placeni_ppr cetnostpla16_ on pojistnasm15_.cetnost_placeni=cetnostpla16_.klic left outer join c_korespondence_ppr koresponde17_ on pojistnasm15_.korespondence=koresponde17_.klic left outer join d_osoba_ppr osoby18_ on pojistnasm15_.id=osoby18_.smlouva_id left outer join d_adresa_ppr adresa19_ on osoby18_.adresa_id=adresa19_.id left outer join d_adresa_ppr adresa20_ on osoby18_.koresp_adresa_id=adresa20_.id left outer join c_role_osoby_ppr roleosoby21_ on osoby18_.role=roleosoby21_.klic left outer join c_statni_prislusnost_ppr statnipris22_ on osoby18_.statni_prislusnost=statnipris22_.klic left outer join c_titul_ppr titul23_ on osoby18_.titul_id=titul23_.klic left outer join c_typ_osoby_ppr typosoby24_ on osoby18_.typ=typosoby24_.klic left outer join c_cislo_pobocky_ppr cislopoboc25_ on pojistnasm15_.pobocka_produkce=cislopoboc25_.klic left outer join d_pojisteni_ppr pojisteni26_ on pojistnasm15_.id=pojisteni26_.smlouva_id left outer join c_sazebnik_ppr csazebnik27_ on pojisteni26_.sazebnik_id=csazebnik27_.id left outer join c_sazebnik_predmet_pojisteni_ppr predmetyap28_ on csazebnik27_.id=predmetyap28_.sazebnik left outer join c_pojisteni_ppr cpojisteni29_ on predmetyap28_.pojisteni=cpojisteni29_.id left outer join c_konverze_ppr konverze30_ on cpojisteni29_.id=konverze30_.pojisteni_id left outer join c_pojisteni_okamzik_akce_ppr okamzikyaa31_ on cpojisteni29_.id=okamzikyaa31_.pojisteni_id left outer join c_akce_ppr cakce32_ on okamzikyaa31_.akce_id=cakce32_.id left outer join c_okamzik_ppr cokamzik33_ on okamzikyaa31_.okamzik_id=cokamzik33_.id left outer join c_pojisteni_policko_ppr policka34_ on cpojisteni29_.id=policka34_.pojisteni_id left outer join c_policko_ppr cpolicko35_ on policka34_.policko_id=cpolicko35_.id left outer join c_pojisteni_souhrnnylimit_ppr souhrnneli36_ on cpojisteni29_.id=souhrnneli36_.pojisteni_id left outer join c_souhrnny_limit_ppr csouhrnnyl37_ on souhrnneli36_.souhrnnelimity_id=csouhrnnyl37_.id left outer join c_predmet_ppr cpredmet38_ on predmetyap28_.predmet=cpredmet38_.id left outer join c_typ_predmetu_ppr typpredmet39_ on cpredmet38_.typ=typpredmet39_.klic left outer join c_spoluucast_ppr spoluucast40_ on pojisteni26_.spoluucast_id=spoluucast40_.klic left outer join c_typ_pojisteni_ppr ctyppojist41_ on pojisteni26_.typ=ctyppojist41_.klic left outer join c_typpojisteni_otazka_ppr otazky42_ on ctyppojist41_.klic=otazky42_.pojisteni_id left outer join c_otazka_ppr cotazka43_ on otazky42_.otazka_id=cotazka43_.id left outer join c_otazka_zavislost_ppr zavisina44_ on cotazka43_.id=zavisina44_.pojisteni_id left outer join c_otazka_ppr cotazka45_ on zavisina44_.master_id=cotazka45_.id left outer join d_predmet_ppr predmety46_ on pojistnasm15_.id=predmety46_.smlouva_id left outer join c_nazev_predmetu_ppr nazevpredm47_ on predmety46_.nazev_predmetu=nazevpredm47_.klic left outer join d_nemovitost_ppr nemovitost48_ on predmety46_.id=nemovitost48_.predmet left outer join d_predmet_policko_ppr policka49_ on predmety46_.id=policka49_.predmet_id left outer join d_policko_ppr policko50_ on policka49_.policko_id=policko50_.id left outer join c_sazebnik_ppr csazebnik51_ on predmety46_.sazebnik=csazebnik51_.id left outer join c_typ_pojistne_hodnoty_ppr typpojistn52_ on predmety46_.typ_pojistne_hodnoty=typpojistn52_.klic left outer join c_typ_predmetu_ppr typpredmet53_ on predmety46_.typ_predmetu=typpredmet53_.klic left outer join c_vlastnictvi_predmetu_ppr vlastnictv54_ on predmety46_.vlastnictvi_predmetu=vlastnictv54_.klic left outer join d_vozidlo_ppr vozidla55_ on predmety46_.id=vozidla55_.predmet left outer join c_druh_vozidla_ppr druhvozidl56_ on vozidla55_.druh=druhvozidl56_.klic left outer join c_typ_provedeni_vozidla_ppr typprovede57_ on vozidla55_.typ_provedeni=typprovede57_.klic left outer join c_znacka_vozidla_ppr znackavozi58_ on vozidla55_.znacka=znackavozi58_.klic left outer join d_zarizeni_ppr zarizeni59_ on predmety46_.id=zarizeni59_.predmet left outer join d_priloha_ppr prilohy60_ on pojistnasm15_.id=prilohy60_.smlouva_id left outer join c_druh_prilohy_ppr druhpriloh61_ on prilohy60_.druh=druhpriloh61_.klic left outer join d_souhrnny_limit_ppr souhrnneli62_ on pojistnasm15_.id=souhrnneli62_.smlouva left outer join d_specialni_ujednani_ppr specialniu63_ on pojistnasm15_.id=specialniu63_.smlouva_id left outer join d_smlouva_spravce_ppr spravci64_ on pojistnasm15_.id=spravci64_.smlouva_id left outer join d_spravce_ppr spravce65_ on spravci64_.spravce_id=spravce65_.id left outer join c_cislo_pobocky_ppr cislopoboc66_ on spravce65_.cislo_pobocky=cislopoboc66_.klic left outer join c_stav_smlouvy_ppr stavsmlouv67_ on pojistnasm15_.stav=stavsmlouv67_.klic left outer join c_typ_pojistneho_ppr typpojistn68_ on pojistnasm15_.typ_pojistneho=typpojistn68_.klic left outer join c_kod_banky_ppr kodbanky69_ on pojistnasm15_.kod_banky=kodbanky69_.klic left outer join d_ziskatel_ppr ziskatele70_ on pojistnasm15_.id=ziskatele70_.smlouva_id left outer join c_cislo_pobocky_ppr cislopoboc71_ on ziskatele70_.cislo_pobocky=cislopoboc71_.klic where souhrnnyli0_.id=?
Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15
Platforma Java Objektově relační mapování II Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, 2016 1 / 15 Dotazování vyhledání objektu podle
Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/
Nástroje a frameworky pro automatizovaný vývoj Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/ Proces vývoje webové aplikace Předepsaná adresářová struktura. Kompilace zdrojových kódů.
Dnešní program. Architektura, Design. Když zbude čas. Architektura webové aplikace Design patterns IoC, AOP. Kuchařky, dočasná řešení
Architektura, design, konstrukce Dnešní program Architektura, Design Architektura webové aplikace Design patterns IoC, AOP Konstrukce Kuchařky, dočasná řešení Když zbude čas Integrace a integrační ní styly
KIV/PIA 2013 Jan Tichava
KIV/PIA 2013 Jan Tichava Java EE JSF, PrimeFaces Spring JPA, EclipseLink Java Platform, Enterprise Edition Persistence Zobrazovací vrstva Interakce aplikací Deployment Java Persistence API Enterprise
Spring framework 2.0. Roman Pichlík http://sweb.cz/pichlik/ CZJUG http://java.cz/jug
Spring framework 2.0 Spring framework 2.0 Roman Pichlík http://sweb.cz/pichlik/ Nejdůležitejší slide http://springframework.org/ http://www.springframework.org/documen Historie 2002 - Rod Johnson kniha
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());
Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového
Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký
Anotace a Hibernate Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace v Javě novinka Javy 5 umožňují k Java kódu přidávat dodatečné informace (podobně jako JavaDoc) za předchůdce anotací je možné považovat
Architektura, design, konstrukce
Architektura, design, konstrukce Dnešní program Úvod Upřesnění z minula Připomenutí poslat téma zápočtové práce. Změna pořadí cvičení Architektura Design Konstrukce Integrace Architektura vs. design Zjednodušeně:
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java
STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ
STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ Technologie Jalapeño od InterSystems Andreas Dieckow, Principal Product Manager, Strategic Planning InterSystems Corporation Úvod Programovací jazyk Java má díky
PA165: Úvod do Java EE. Petr Adámek
PA165: Úvod do Java EE Petr Adámek Obsah přednášky Organizace předmětu Formy výuky Hodnocení Osnova Java EE aplikace Architektury Java EE aplikací Technologie Java EE Základní koncepty PA165: Úvod do Java
Databáze v Java aplikacích, JPA Handout
Databáze v Java aplikacích, JPA Handout Martin Ledvinka martin.ledvinka@fel.cvut.cz 11. listopadu 2015 1 Přístup k databázím v Javě Jednou z mnoha výhod (a občas nevýhodou) platformy Java je její zaměření
Databázové a informační systémy
Databázové a informační systémy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Jak ukládat a efektivně zpracovávat
Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging
Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging 1. Vhodnost nasazení jednotlivých webových architektur - toto je podle Klímy
IOPC2. Petr Čermák Vedoucí RNDr. Michal Kopecky, Ph.D.
IOPC2 Petr Čermák Vedoucí RNDr. Michal Kopecky, Ph.D. Obsah Cíle práce Vývoj knihovny Design a implementace Porovnání s předchozími verzemi Shrnutí a další vývoj Cíle práce Návrh a implementace knihovny
Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework
Web Jaroslav Nečas Obsah přednášky Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework Co to je web HTTP protokol bezstavový GET POST HEAD Cookies Session HTTPS
Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer
Jalapeño: pekelně ostrá Java persistence v Caché Daniel Kutáč Senior Sales Engineer Co je Jalapeño Pár slov ředitele vývoje software Klikni! Tak tedy, o čem dnes budeme mluvit Architektura Instalace Anotace
(Enterprise) JavaBeans. Lekce 7
(Enterprise) JavaBeans Lekce 7 JavaBeans vs. Enterprise JavaBeans (EJB) JavaBeans technologie: jedná se o tzv. komponentní architekturu určenou pro JSE platformu určená pro tvorbu JSE GUI programů pomocí
Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links
Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links links Apache Struts Article with examples JSTL a EL (into JSP) MVC, webové aplikace, JSP Bezpečnost ve webových
Enterprise Java Beans 3.0
Enterprise Java Beans 3.0 Lukáš Zapletal liberix.cz EJB 3.0 a JPA 1.0 JavaBean - vysvětlení pojmu Java třída s get/is a set metodami má tedy vlastnosti žádné další podmínky nejsou kladeny JavaBean je tedy
Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška
Databázové systémy Datová integrita + základy relační algebry 4.přednáška Datová integrita Datová integrita = popisuje pravidla, pomocí nichž hotový db. systém zajistí, že skutečná fyzická data v něm uložená
Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
Design Patterns Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz Základní návrhové vzory Kategorie Creational Patterns starají se o vytváření instancí Structural Patterns struktura komponent v
8.2 Používání a tvorba databází
8.2 Používání a tvorba databází Slide 1 8.2.1 Základní pojmy z oblasti relačních databází Slide 2 Databáze ~ Evidence lidí peněz věcí... výběry, výpisy, početní úkony Slide 3 Pojmy tabulka, pole, záznam
Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18
Spring Framework Pavel Mička Pavel Mička Spring Framework 1/18 Obsah Úvod 1 Úvod 2 Service locator Dependency injection Rozsah platnosti bean 3 4 Pavel Mička Spring Framework 2/18 Co je to Spring framework
NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze
NOVINKY V JEE EJB 3.1 Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze PROGRAM Seznámení s Java Enterprise Edition (JEE) Enterprise Java Beans (EJB) Novinky v EJB 3.1 2 JAVA EDITIONS Java
Semináˇr Java X J2EE Semináˇr Java X p.1/23
Seminář Java X J2EE Seminář Java X p.1/23 J2EE Složitost obchodních aplikací robusní, distribuované, spolehlivé aplikace s transakcemi na straně serveru, klientské aplikace co nejjednodušší Snaha : Návrh,
MBI - technologická realizace modelu
MBI - technologická realizace modelu 22.1.2015 MBI, Management byznys informatiky Snímek 1 Agenda Technická realizace portálu MBI. Cíle a principy technického řešení. 1.Obsah portálu - objekty v hierarchiích,
Použití databází na Webu
4IZ228 tvorba webových stránek a aplikací Jirka Kosek Poslední modifikace: $Date: 2010/11/18 11:33:52 $ Obsah Co nás čeká... 3 Architektura webových databázových aplikací... 4 K čemu se používají databázové
Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat
QA & Dokumentace Agenda Docházka Návrat k minulému praktickému cvičení Zápočtové práce QA opakování Dokumentace Co, jak a proč dokumentovat Dotazy, přání, stížnosti Kde je chyba? public static StringBuilder
Použití PostgreSQL v. P2D Martin Swiech
Použití PostgreSQL v P2D2 15.2.2018 Martin Swiech martin.swiech@zonky.cz Kdo jsme? Peer-to-peer landing platforma (lidé půjčují lidem) 15.000 aktivních půjček 16.000 investorů 1.500.000 investic BE: Java8
DPKOM_06 Dědičnost entit a zpětná volání posluchači
DPKOM_06 Dědičnost entit a zpětná volání posluchači 1 Obsah přednášky Jedna tabulka pro hierarchii tříd Tabulka pro konkrétní třídu Tabulka pro podtřídu Neentitní základní třídy Události zpětného volání
Java a Caché IV: Manipulace s objekty
1 z 6 11.1.2007 11:13 přihlašovací jméno heslo Registrace Přihlásit články odkazy aktuality CZJUG konference o portálu přidejte se o nás Vyhledávání Text: najdi Oborový filtr J2ME J2SE J2EE Enterprise
Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU 8.6.2011
Technologie Java Enterprise Edition Přemek Brada, KIV ZČU 8.6.2011 Přehled tématu Motivace a úvod Infrastruktura pro velké Java aplikace (Java základní přehled) Části třívrstvé struktury servlety, JSP
Využití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
Úvod do Entity Frameworku
PV178 Úvod do Entity Frameworku Mgr. David Gešvindr MVP MSP MCSD: Windows Store MCSE: Data Platform gesvindr@mail.muni.cz Osnova 1. Úvod do Entity Frameworku 2. Návrh databáze s využitím Entity Framework
WWW dotazovací služby pro prostorová data URM. Jiří Čtyroký Útvar rozvoje hl. m. Prahy
WWW dotazovací služby pro prostorová data URM Jiří Čtyroký Útvar rozvoje hl. m. Prahy Zpřístupnění geodat hl. m. Prahy 1. Mapové aplikace Zpřístupnění geodat hl. m. Prahy 1. Mapové aplikace 2. Geoportál
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
O Apache Derby detailněji. Hynek Mlnařík
O Apache Derby detailněji Hynek Mlnařík Agenda Historie Vlastnosti Architektura Budoucnost Historie 1997 Cloudscape Inc. - JBMS 1999 Informix Software, Inc. odkoupila Cloudscape, Inc. 2001 IBM odkoupila
Testovací metoda. Testovací metoda. public class SimpleTest {
Testování TestNG public class SimpleTest { @BeforeClass public void setup() { // code that will be invoked // when this test is instantiated @Test public void afasttest() { System.out.println("Fast test");
PA165: Persistence Layer. Petr Adámek
PA165: Persistence Layer Petr Adámek Content: Persistence I. Introduction to data persistence Where to store data How to work with data (Persistence technologies in Java EE) Architecture of data persistence
DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný
DJ2 rekurze v SQL slajdy k přednášce NDBI001 Jaroslav Pokorný 1 Obsah 1. Úvod 2. Tvorba rekurzívních dotazů 3. Počítaní v rekurzi 4. Rekurzívní vyhledávání 5. Logické hierarchie 6. Zastavení rekurze 7.
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních
Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem
Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem 1 Ondřej Berger, Pavel Janečka, 2 Lukáš Černovský 1 Univerzita Hradec Králové Fakulta informatiky a managementu KIKM Hradecká 1249/6,
Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML
Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
Databázové systémy trocha teorie
Databázové systémy trocha teorie Základní pojmy Historie vývoje zpracování dat: 50. Léta vše v programu nevýhody poměrně jasné Aplikace1 alg.1 Aplikace2 alg.2 typy1 data1 typy2 data2 vytvoření systémů
Návrhové vzory Tvorba objektů
Objektové modelování, AD7B36OMO Návrhové vzory Tvorba objektů ČÁST B Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze https://edux.feld.cvut.cz/courses/ad7b36omo Přednáška
Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)
Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB) Michal Papež Spring & EJB Program: K čemu je to dobré, historie, odlišnosti Spring 2.5 EJB 3.0 K čemu jsou? 1 Vývoj velkých podnikových
Databáze II. 1. přednáška. Helena Palovská palovska@vse.cz
Databáze II 1. přednáška Helena Palovská palovska@vse.cz Program přednášky Úvod Třívrstvá architektura a O-R mapování Zabezpečení dat Role a přístupová práva Úvod Co je databáze Mnoho dat Organizovaných
Softwarové komponenty a Internet
Softwarové komponenty a Internet Doc. Dr. Ing. Miroslav Beneš Katedra informatiky FEI VŠB-TU Ostrava Miroslav.Benes@vsb.cz Obsah přednášky Motivace Vývoj přístupů k tvorbě programů Definice komponenty
Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.
Základy programování 4 - C# 7. cvičení Radek Janoštík Univerzita Palackého v Olomouci 26.3.2017 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2017 1 / 14 Reakce na úkoly
Programování a implementace Microsoft SQL Server 2014 databází
M20464 Programování a implementace Microsoft SQL Server 2014 databází Popis: Pětidenní kurz určený všem databázovým specialistům, kteří jsou odpovědni za implementaci databázových objektů a programování
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20
Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................
Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice
základní seznámení s frameworkem Lukáš Koĺısko lkolisko@gmail.com 26.11.2007 Cíle prezentace Cíle prezentace To DI, or not to DI Varianty řešení DI Výhody a nevýhody Cílem prezentace je ukázat, že... v
Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek
5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené
Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)
Marketingová komunikace Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph) 2. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Minulé soustředění úvod
A5M33IZS Informační a znalostní systémy. O čem předmět bude? Úvod do problematiky databázových systémů
A5M33IZS Informační a znalostní systémy O čem předmět bude? Úvod do problematiky databázových systémů Co se dozvíte? Návrh datových struktur (modelování relačních dat) Relační modelování úlohy z oblasti
Web frameworks v praxi
Web frameworks v praxi Tomáš Krátký tomas.kratky@profinit.eu http://www.profinit.eu/cz/podpora-univerzit/univerzitni-vyuka O čem to dnes určitě nebude Uţ víte, co je framework Uţ víte, proč jsou frameworks
Architektura softwarových systémů
Architektura softwarových systémů Ing. Jiří Mlejnek Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jiří Mlejnek, 2011 jiri.mlejnek@fit.cvut.cz Softwarové
4. lekce Přístup k databázi z vyššího programovacího jazyka
4. lekce Přístup k databázi z vyššího programovacího jazyka Studijní cíl Tento blok popisuje základní principy přístupu k databázi z vyššího programovacího jazyka. Doba nutná k nastudování 2-3 hodiny Průvodce
Návrhové vzory pro J2EE. Miroslav Beneš
Návrhové vzory pro J2EE Miroslav Beneš Obsah přednášky Význam návrhových vzorů Klasické návrhové vzory GoF Návrh prezentační vrstvy Business vrstva Vzory pro práci s daty Příklady dalších vzorů Záporné
Programování v jazyku C# II. 5.kapitola
Programování v jazyku C# II. 5.kapitola Obsah O ADO.NET Spojení s DB Příkazy Jednoduché čtení DataSet 2/28 ADO.NET ADO - ActiveX Data Object Orientováno na webové aplikace neexistence stavu v HTTP Obecný
COMPARISON OF OBJECT-RELATIONAL MAPPING WITH OBJECT-ORIENTED APPROACH. Jaroslav Ševčík
SROVNÁNÍ OBJEKTOVĚ RELAČNÍHO MAPOVÁNÍ S OBJEKTOVĚ ORIENTOVANÝM PŘÍSTUPEM COMPARISON OF OBJECT-RELATIONAL MAPPING WITH OBJECT-ORIENTED APPROACH Jaroslav Ševčík Mgr. Jaroslav Ševčík, Katedra informatiky
Business Intelligence
Business Intelligence Josef Mlnařík ISSS Hradec Králové 7.4.2008 Obsah Co je Oracle Business Intelligence? Definice, Od dat k informacím, Nástroj pro operativní řízení, Integrace informací, Jednotná platforma
Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)
Obsah přednášky Technologie Miroslav Beneš Popis technologie EJB J2EE aplikace Typy komponent Entity Beans Session Beans Message-Driven Beans Java Messaging Service (JMS) Závěr 2 (EJB) EJB kontejner Specifikace
Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.
Úvod Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne. Organizace předmětu Materiály k předmětu -Web stránky: http://cw.felk.cvut.cz/doku.php/courses/x33eja/start
Návrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
Object-relational mapping (JPA, Hibernate)
Vysoká škola báňská - technická univerzita Ostrava 17. března 2010 Obsah 1 2 3 4 namapovat chování objektového světa do relačních struktur a naopak, tak aby spolu mohli jednoduše komunikovat většina moderních
Vývoj informačních systémů. Přehled témat a úkolů
Vývoj informačních systémů Přehled témat a úkolů Organizace výuky doc. Mgr. Miloš Kudělka, Ph.D. EA 439, +420 597 325 877 homel.vsb.cz/~kud007 milos.kudelka@vsb.cz Přednáška Teorie Praxe Cvičení Diskuze
Úvod do Groovy pro Java experty
Úvod do Groovy pro Java experty Václav Pech Senior Software Developer JetBrains, Inc. Něco o mně Václav Pech Programátor Nadšenec do Groovy JetBrains Dodavatel Vašich oblíbených nástrojů IntelliJ IDEA,
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Návrhové vzory pro J2EE
Návrhové vzory pro J2EE Miroslav Beneš Obsah přednášky Význam návrhových vzorů Klasické návrhové vzory GoF Návrh prezentační vrstvy Business vrstva Vzory pro práci s daty Příklady dalších vzorů Záporné
Analýza a modelování dat. Přednáška 5
Analýza a modelování dat Přednáška 5 Objektově orientované databáze Relační databáze data uložena v logicky provázaných tabulkách přes cizí klíče výhoda jednoduchost, intuitivnost, naplnění myšlenky oddělení
Úvod do databázových systémů
Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 8 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Entita Entitní typ
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.
X33EJA Web Services Martin Ptáček, KOMIX s.r.o. ptacek@komix.cz Copyright 2007 KOMIX Copyright s.r.o. 2007 KOMIX s.r.o. 1. Obsah Historie Co jsou Web Services? Co je to SOA? JAX-WS (Java API for XML Web
Semináˇr Java X JDBC Semináˇr Java X p.1/25
Seminář Java X JDBC Seminář Java X p.1/25 Úvod JDBC API poskytuje základní rozhraní pro unifikovaný přístup k databázím Programátor je odstíněn od specifického API databáze Jednotné rozhraní JDBC pro všechny
Platforma průmyslové spolupráce
Platforma průmyslové spolupráce CZ.1.07/2.4.00/17.0041 Název JBoss Teiid konektor pro NoSQL databázi Apache Cassandra Popis a využití demonstrace převodu z NoSQL do SQL světa výuka: pokročilá Java Jazyk
Tvorba informačních systémů
9. Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2006-2008 Michal Krátký, Miroslav Beneš Tvorba
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java
Oracle XML DB. Tomáš Nykodým
Oracle XML DB Tomáš Nykodým xnykodym@fi.muni.cz Osnova Oracle XML DB Architektura Oracle XML DB Hlavní rysy Oracle XML DB Hlavní rysy Oracle XML DB - pokračování XMLType XML Repository Využívání databázových
Michal Krátký, Miroslav Beneš
Tvorba informačních systémů 1/20 Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009 Tvorba informačních
Datová vrstva informačního systému. Miroslav Beneš
Datová vrstva informačního systému Miroslav Beneš Obsah přednášky JDBC architektura ovladače použití ODBC architektura ovladače a zdroje dat použití PHP & MySQL Datová vrstva informačního systému 2 Java
Databázové systémy. Doc.Ing.Miloš Koch,CSc. koch@fbm.vutbr.cz
Databázové systémy Doc.Ing.Miloš Koch,CSc. koch@fbm.vutbr.cz Vývoj databázových systémů Ukládání dat Aktualizace dat Vyhledávání dat Třídění dat Výpočty a agregace 60.-70. léta Program Komunikace Výpočty
George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu
A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,
FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz> 13. 2. 2008 http://www.nic.cz/ http://fred.nic.cz
FRED & PostgreSQL CZ.NIC, z.s.p.o. Jaromír Talíř 13. 2. 2008 http://www.nic.cz/ http://fred.nic.cz 1 Obsah FRED co to je? Architektura systému, datový model, transakční model Komunikace
Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu
Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní
Pokročilé techniky tvorby sestav v Caché. ZENové Reporty
Pokročilé techniky tvorby sestav v Caché ZENové Reporty Úvodem Jednoduché sestavy Pokročilé sestavy Ladění Historie ZEN reporty sdílejí podobný princip definování obsahu jako ZENové stránky Byly uvedeny
DATABÁZOVÉ SYSTÉMY. Metodický list č. 1
Metodický list č. 1 Cíl: Cílem předmětu je získat přehled o možnostech a principech databázového zpracování, získat v tomto směru znalosti potřebné pro informačního manažera. Databázové systémy, databázové
InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou
MySQL Typy tabulek Storage Engines MyISAM defaultní, neumí transakce, umí fulltext InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) MEMORY (HEAP) v paměti; neumí transakce ARCHIVE velké množství
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.
Základy programování 4 - C# - 9. cvičení Radek Janoštík Univerzita Palackého v Olomouci 10.4.2017 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.2017 1 / 13 Reakce na
Michal Krátký, Miroslav Beneš
Databázové a informační systémy Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava 5.12.2005 2005 Michal Krátký, Miroslav Beneš Databázové a informační systémy 1/24 Obsah
Agenda. Smysl teoretických cvičení Klasifikace Obecná pravidla Bugzilla Klasické problémy Poznámky k jednotlivým pojmům Antipatterns Testování testů
Testování a QA Agenda Smysl teoretických cvičení Klasifikace Obecná pravidla Bugzilla Klasické problémy Poznámky k jednotlivým pojmům Antipatterns Testování testů Klasifikace Kategorie black box grey box
RELAČNÍ DATABÁZOVÉ SYSTÉMY
RELAČNÍ DATABÁZOVÉ SYSTÉMY VÝPIS KONTROLNÍCH OTÁZEK S ODPOVĚDMI: Základní pojmy databázové technologie: 1. Uveďte základní aspekty pro vymezení jednotlivých přístupů ke zpracování hromadných dat: Pro vymezení
Kód, který se nebude často měnit
Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new
Vývoj informačních systémů. Přehled témat a úkolů
Vývoj informačních systémů Přehled témat a úkolů Organizace výuky doc. Mgr. Miloš Kudělka, Ph.D. EA 439, +420 597 325 877 homel.vsb.cz/~kud007 milos.kudelka@vsb.cz Přednáška Znalosti Schopnosti Cvičení