UINF/PAZ1c 5. prednáška

Podobné dokumenty
PowerPoint Presentation

PowerPoint Presentation

DediĊnosť

Identity Lifecycle Management

enum

Databázy (1) - Prednáška 04

História

Elmasri, Fundamentals of DBSs

Databázy (1) - Prednáška 03

midterm2019

Princípy tvorby softvéru Modelovanie domény

Princípy tvorby softvéru Programovacie paradigmy

PowerPoint Presentation

Funkcionálne programovanie Cvičenie 9 Funkcionálne programovanie v Jave Sergej Chodarev 22. november 2017 Technická Univerzita v Košiciach

Identity Lifecycle Management

Microsoft PowerPoint - OOP_prednaska_10.pptx

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Databázy (1) - Prednáška 10

iot business hub whitepaper isdd_em_New.pdf

Objektovo orientované programovanie

midterm2014_1

Identity Lifecycle Management

Konkurentné programovanie

Manuál pre nastavenie tlače z VRP tlačiarní bluetooth Bluetooth Manuál pre nastavenie tlače z VRP tlačiarní -1-

gis5 prifuk

STRUČNÝ NÁVOD KU IP-COACHU

Prístup a Nastavenie pre KOMPAKT HOSTING

Microsoft Word - 11_Distribuované spracovanie dát nad MapReduce architektúrou _Hadoop a Hive_

NSK Karta PDF

Architektúra a návrh Zdôvodnenie navrhnutej architektúry Systém si architektonicky môžeme rozdeliť na viacero vrstiev. Najpodstatnejšie je oddelenie z

User:Andrej Sedlacek

Microsoft Word Nextra_ADSLink.doc

Microsoft Word - prirucka_katedry_nova

Balíčkovanie FreeSWITCH-u pre Debian Autor: Zdenko Holeša, InžProjekt 1, KIS FRI ŽU Predkompilované balíčky Predkompilované balíčky existujú pre Debia

fm 2012 a predajňa.doc

Novinky v OpcDbGateway 5.0

Finančné riaditeľstvo Slovenskej republiky 10/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor Informácia

Microsoft PowerPoint - SLIDES_02DTD.ppt

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Dátové rozhranie pre externý subjekt FR SR Strana 1 z 11 Dátové rozhranie

Xesar Softvér Stručný návod

ŤAHÁK PRAKTICKÁ ČASŤ Prerekvizity: LINUX: WINDOWS: Inštalácia Oracle VirtualBoxu a vytvorenie virtuálneho stroja /návod nižšie/ Operačný system Window

Vývoj geografických aplikácií v GIS

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

Microsoft Word - zapis-predmetov-AiS

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií Tres Faciunt Collegium Posudok Študijný program: Počítačové

7/1/2015 Úvod do databáz, skúškový test, max 25 bodov, 90 min

Žiadosť o licenčnú zmluvu na podujatie Na adrese v sekcii hlavného menu kliknete na položku Používatelia. Zobrazí sa blokové menu,

Systunhbox group let unhbox hbox {eglobal mathchardef spacefactor }accent 19 eegroup spacefactor

2

MONTÁŽNY NÁVOD GABIONOVÝ PLOT 2,5 m VŠETKY OBRÁZKY SÚ LEN ILUSTRATÍVNE. VŠETKY PRÁVA VYHRADENÉ/ OBSAH KATALÓGU- MONTÁŽNEHO NÁVODU, PODLIEH

PowerPoint-Präsentation

Matej Kendera - PDF, word, lucene, java

Manuál pre nastavenie tlače z VRP elio m500 Elio m500 Manuál pre nastavenie tlače -1-

Resolution

SKPOS

Finančné riaditeľstvo Slovenskej republiky 9/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor/Technik Inf

Externé mediálne karty Používateľská príručka

IT NEWS

1

Relačné a logické bázy dát

Identity Lifecycle Management

Georeceive a Geoshopping

N desitka.indd

Microsoft Word - Priloha_1.docx

PAGER V3.0

Microsoft Word - Zaver.pisomka_januar2010.doc

s sol

Výnimky

Pravidelné úlohy verzia ku dňu SEAL IT Services, s.r.o. Kontakt: SEAL IT Services, s.r.o., Topoľová 4, Bratislava 1, tel.:

Všeobecná zdravotná poisťovňa

Sprievodca rýchlym nastavením bluesound.com

Počítačové siete DOCSIS

PowerPoint Presentation

Microsoft Word - Argumentation_presentation.doc

Manuál pre nastavenie tlače z VRP Bluetooth, USB tlačiarne Bluetooth, USB tlačiarne Manuál pre nastavenie tlače -1-

Dobývanie znalostí

User:tomas.melicher

Sablona prispevky MSI

Ponuka Štart

Microsoft Word - popis.docx

Microsoft Word - Manazment_projektov_tim24_tema12_2017.docx

Microsoft Word - Manažment_tagov_tim24_tema12_2017.docx

Príloha č. 1 k USM_UGKK SR_6/2019

Rozdeľovanie IT zákaziek UX Peter Kulich

SK01-KA O1 Analýza potrieb Zhrnutie BCIME tím Vyhlásenie: "Podpora Európskej komisie pre výrobu tejto publikácie nepredstavuje súhlas

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

Návod na vytvorenie kvalifikovaného elektronického podpisu prostredníctvom občianskeho preukazu s čipom Dátum zverejnenia: Verzia: 1 Dátu

Technická dokumentácia Logger modulu Verzia Tabuľka 1. Autori Autor Tomáš Donko Rola

Komplexné služby výpočtovej a kancelárskej techniky Vývoj a distribúcia podnikového a ekonomického software Otvorenie nového roku a prechod medzi rokm

0022-vub-mobilne-tokeny-200x200-v03.indd

Prezentácia programu PowerPoint

Microsoft Word - prechod_euro_prolca.doc

Používateľská príručka Obsah Používateľská príručka... 1 Administrácia servera... 2 FTP... 2 Remote Desktop... 3 Administrácia databáze:... 3 Spusteni

Prepis:

UINF/PAZ1c 5. prednáška

Zmena dát cez JDBCTemplate String sql = INSERT INTO user (chip_id, name, active) VALUES (?,?,?) ; jdbctemplate.update(sql, user.getchipid(), user.getname(), user.getactive()); Konverziu necháme na Spring Escapovanie stringov, null sa nevloží ako null, Žiadne SQL injection

Zmena dát cez JDBCTemplate String sql = INSERT INTO user (chip_id, name, active) VALUES (?,?,?) ; jdbctemplate.update(sql, user.getchipid(), user.getname(), user.getactive()); Naplnenie id necháme na AUTOINCREMENT Žiadne SELECT max(id) FROM user a potom INSERT id+1

Ak chceme vedieť aké ID bolo pridelené riadku SimpleJdbcInsert simplejdbcinsert = new SimpleJdbcInsert(jdbcTemplate); simplejdbcinsert.withtablename("user"); simplejdbcinsert.usinggeneratedkeycolumns("id"); simplejdbcinsert.usingcolumns("chip_id", "name", "active"); Map<String, Object> values = new HashMap<>(); values.put("chip_id", user.getchipid()); values.put("name", user.getname()); values.put("active", user.isactive()); long id = simplejdbcinsert.executeandreturnkey(values).longvalue(); user.setid(id);

Ak chceme vedieť aké ID bolo pridelené riadku SimpleJdbcInsert simplejdbcinsert = new SimpleJdbcInsert(jdbcTemplate); simplejdbcinsert.withtablename("user"); simplejdbcinsert.usinggeneratedkeycolumns("id"); simplejdbcinsert.usingcolumns("chip_id", datasource.seturl("jdbc:mysql://localhost/users_management? "name", "active"); servertimezone=europe/bratislava&nullnamepatternmatchesall=true"); Map<String, Object> values lebo stackoverflow.com = new HashMap<>(); values.put("chip_id", Ak nájdete user.getchipid()); niečo krajšie, dajte vedieť. values.put("name", user.getname()); values.put("active", user.isactive()); long id = simplejdbcinsert.executeandreturnkey(values).longvalue(); user.setid(id);

Vzťahy tried a entít Veľa druhov vzťahov má vlastnosť, potrebuje, dedí (rozširuje), obsahuje / je časťou, súvisí,... Veľa spôsobov modelovania (kreslenia) UML, ontológie,... Reprezentácia v rôznych jazykoch OOP, SQL, OWL,...

Vzťah má vlastnosť / má stav Pes MÁ meno (typ String) Pes MÁ farbu (typ Color) class Farba { int red int green int blue Pes meno: String farba: Farba String Farba red: int green: int blue: int class Pes { String meno Color farba class String {

Vzťah závisí na (dependency) typické pre moduly nie pre entity trieda potrebuje pre svoje fungovanie inú triedu typicky: metóda objektu nebude fungovať, ak nemá k dispozícii príslušný objekt príklad: kontrolér pre ukladanie objektu v používateľskom rozhraní potrebuje objekt DAO pre prístup k databáze kontrolér DAO

Vzťah závisí na (dependency) realizácia = mám referenciu na závislosť typicky v inštančnej premennej získanie referencie aktívne objekt si vytvorí závislosť - vytvorí potrebný objekt opýta si závislosť od továrne pasívne dostane závislosť cez konštruktor dostane závislosť cez setter (dependency injection) kontrolér DAO

Factory Dependency injection trieda závisí na inštancii továrne po vytvorení inštancie sa trieda hneď dá používať pre používateľa je trieda samostatnejšia vytvoríme inštanciu a používame trieda nezávisí na ničom po vytvorení inštancie je trieda v medzistave existuje, ale nemá závislosti pre vývojára je trieda flexibilnejšia môžeme meniť závislosti zvonku Oba prístupy sa dajú kombinovať

Vzťah je časťou" (agregácia) v UML: agregácia a.k.a. zdieľaná kompozícia objekt je súčasťou iného objektu dokáže však fungovať samostatne a nezávisle môže byť súčasťou viacerých objektov naraz public class Projekt { private List<Výskumník> riešitelia = new ArrayList<>();... public void pridajriešiteľa(výskumník výskumník) {

Kompozícia kompozícia a.k.a. silná agregácia objekty majú spriahnuté životné cykly ak sa vymaže adresár, majú sa vymazať aj podsúbory súbor musí byť v nejakom adresári

Kompozícia 1:1 public class Minister {... public class Ministerstvo { private Minister minister; public void zrušiť() {... minister.odvolaj(); Ak sa rozpustí ministerstvo, minister sa zruší tiež.

Kompozícia 1:M public class Uzol { private List<Uzol> uzly = new ArrayList<Uzol>(); public void zrušiť() { for(uzol dieťa : uzly) { dieťa.zrušiť(); Ak sa zruší uzol v strome, zrušia sa aj jeho potomkovia.

Agregácia alebo kompozícia? vec aplikačnej domény rozdiel iba v integritných obmedzeniach v databáze môžeme kompozíciu čiastočne ustrážiť cez NOT NULL cudzie kľúče výrobok musí mať odkaz na svojho výrobcu nevieme: výrobca musí mať aspoň 1 výrobok v kóde si všetko musíme ustrážiť sami v metódach oba typy vzťahov reprezentované rovnako zdroják: cez inštančné premenné databáza: cez cudzie kľúče spoločný názov: asociácie (vzťahy)

V kóde: asociácia 1:1 public class Dekan { private Fakulta fakulta; /*...*/ public class Fakulta { private Dekan dekan; /*...*/

V databáze: asociácia 1:1 CREATE TABLE dekan ( `id` INT NOT NULL AUTO_INCREMENT, `id_fakulta` INT, `meno` VARCHAR(80) NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `fk_dekan_fakulta` FOREIGN KEY (`id_fakulta`) REFERENCES fakulta (id) )

Asociácia 1:M public class Výrobok { private Výrobca výrobca; /*...*/ public class Výrobca { private List<Výrobok> výrobky; /*...*/

Asociácia M:N public class Výrobok { private List< Dodávateľ > dodávatelia; /*...*/ public class Dodávateľ { private List<Výrobok> výrobky; /*...*/

Asociácia M:N s dodatočnými údajmi public class Výrobok { private List< Dodávateľ > dodávatelia; private Map< Dodávateľ,Integer > dodávateliapočty; /*...*/ public class Dodávateľ { private List<Výrobok> výrobky; private Map<Výrobok,Integer> výrobkypočty; /*...*/

Prístupy v celej budove (niekde áno, niekde nie) Administrátor pridáva, odoberá, (de)aktivuje používateľov mení používateľom karty pridáva, odoberá miesta s čítačkami - dvere prideľuje používateľom práva na vstup do konkrétnych dverí CRUD CRUD

Používatelia vs. dvere Môžu jedny dvere pustiť viac ako jedného používateľa Zjavne áno Môže jeden používateľ vojsť do viacerých dverí? Ak nie Máme vzťah 1:N Používateľovi napíšeme ďalší parameter: dvere, do ktorých môže vojsť Ak áno Máme vzťah M:N Reálnejšie (zvolíme radšej aj vtedy, keď zákazník tvrdí prvé)

Modelujme

CardReader je entita zaslúži si vlastné CardReaderDao vlastnú obrazovku na realizáciu CRUD operácií vlastnú továreň? UserDaoFactory, CardReaderDaoFactory,... koľko DAO toľko tovární? Čo keď ich bude 20? veľa tovární = veľa miest, kde sa konfiguruje Ak chcem prejsť v celom projekte na inú prezistentnú vrstvu, musím meniť všetky továrne

CardReader je entita zaslúži si vlastné CardReaderDao vlastnú obrazovku na realizáciu CRUD operácií vlastnú továreň? UserDaoFactory, CardReaderDaoFactory,... koľko DAO toľko tovární? Čo keď ich bude 20? veľa tovární = veľa miest, kde sa konfiguruje Ak chcem prejsť v celom projekte na inú prezistentnú vrstvu, musím meniť všetky továrne DaoFactory

Jedna továreň na viac vecí public enum DaoFactory { INSTANCE; public UserDao getuserdao() {... public CardReaderDao getcardreaderdao() {

Do akých dverí môže vstúpiť používateľ? Asi častá otázka Naťahujem rovno s každým používateľom z DB SELECT user.id AS idu, user.name, user.chipid, user.active, user_card_reader.id_card_reader AS idcr FROM user JOIN user_card_reader ON user.id = user_card_reader.id_user idu name chipid active idcr 1 Jano cc1f86ab86 0 2 2 Fero fe265d741a 1 1 2 Fero fe265d741a 1 2 čítačky sa často opakujú, dotiahneme ďalším selektom

ResultSetExtractor idu name chipid active idcr 1 Jano cc1f86ab86 0 2 2 Fero fe265d741a 1 1 2 Fero fe265d741a 1 2 RowMapper by vrátil pre každý riadok nového používateľa ResultSetExtractor vráti jeden objekt pre celý výsledok selektu

ResultSetExtractor jdbctemplate.query(sql, new ResultSetExtractor<List<User>>() { public List<User> extractdata(resultset rs) { List<User> users = new ArrayList<>(); while(rs.next()) { /*spracovanie 1 riadku*/ return users; );

Akých používateľov má pridelená čítačka? Potrebujeme to zakaždým vedieť? Čo ak je používateľov niekoľko tisíc? Chceme to zakaždým držať v pamäti? Lazy prístup: zistím, až keď to niekto bude chcieť Urobím to cez getter čítačky, alebo popýtam priamo CardReaderDao? Dobrá rada: Nikdy si nepamätajme inštanciu Dao v objektoch entít Entity by mali byť ľahko serializovateľné

Serializovateľnosť entít Entity sa obvykle posielajú hore dole medzi službami, do extrerných GUI,... Entita má mať v inštančných premenných iba svoje atribúty a asociácie s inými entitami nikdy nie objekty business logiky, objekty perzistentnej vrstvy, komponenty, ani modely Pozor na zacyklenie napr. používateľ si pamätá svoje čítačky, čítačky svojich používateľov mnohé automatické serializácie zlyhávajú, je potrebné ich štelovať, alebo to robiť ručne