Object-relational mapping (JPA, Hibernate)

Podobné dokumenty
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

KIV/PIA 2013 Jan Tichava

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Tvorba informačních systémů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

DPKOM_7 Dotazy a EJB QL

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Verzování a publikace dat na webu za pomoci PostgreSQL

Tabulka fotbalové ligy

Enterprise Java Beans 3.0

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Michal Krátký, Miroslav Beneš

Typický prvek kolekce pro české řazení

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

UJO Framework. revoluční architektura beans. verze

Úvod do programovacích jazyků (Java)

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Databázové a informační systémy Jana Šarmanová

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Programování v Javě I. Únor 2009

Semestrální práce z DAS2 a WWW

Tvorba informačních systémů

Databáze I. Přednáška 7

Prvni. Obsah. Strana číslo: {00}

Programování v Javě I. Leden 2008

Databázové systémy I

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Algoritmizace a programování

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Teoretické minimum z PJV

Abstraktní datové typy: zásobník

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Jazyk C# - přístup k datům

JPA Java Persistence API. Petr Aubrecht CA

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Java a XML. 10/26/09 1/7 Java a XML

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

PG 9.5 novinky ve vývoji aplikací

Použití databází na Webu

20. Projekt Domácí mediotéka

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Ukládání a vyhledávání XML dat

Seminář Java IV p.1/38

Jazyk C# - přístup k datům

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Přizpůsobení JSTL pro Google App Engine Datastore

Jazyk SQL databáze SQLite. připravil ing. petr polách

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Úvod do databázových systémů

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

typová konverze typová inference

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Java - řazení objektů

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Seminář Java II p.1/43

Přehled probírané látky

Abstraktní datové typy Objektový přístup v Oracle

Jazyk C# (seminář 3)

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Databázové a informační systémy

MySQL sežere vaše data

Prostorová data v SQL

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Návrh softwarových systém. Návrh softwarových systémů

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Technologie JavaBeans

Geis Point SOAP WebServices Interface

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Kapitola 6: Omezení integrity. Omezení domény

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

SQL. Pohledy, ochrana dat,... Pavel Tyl

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Jazyk C# - přístup k datům

Transkript:

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 aplikací již s databázemi pracuje rozdílná rozhraní databází vedla k vytvoření JDBC JDBC je však stále relační jazyk oproti tomu, Java je objektově orientovaná ORM se snaží vyřešit neshody mezi těmito přístupy

dědičnost public class User{ private String Name; public class Student extends User{ private double credits; public class Teacher extends User{ private int salary;

nespojitost public class User{ private String Name; private Address address; public class Address{ private String city; private String country; Table USER: NAME CITY COUNTRY

asociace public class User{ private Address address; public class Address{ private string city; private string country; Table ADDRESS ADDRESS_ID CITY COUNTRY Table USER USER_ID NAME ADDRESS_ID (Fk)

ostatní identita a rovnost (identity and equality) datové typy

Java Persistence API (JPA)

mapování tříd @Entity public class Student { @Entity(name="anotherStudent") public class Student { @Entity @Table(name="t_student") public class Student {

mapování identit private Long id; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="STUDENT_ID") public Long getid() { return id; student = new Student(); Long studentid = (Long)session.save(student);

mapování vlastností @Entity @Table(name = "t_student") public class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String firstname; @Column(nullable = false, length = 30) private String lastname; @Column(length = 15) private String telephone; @Column(name = "e_mail") private String email; private Integer age;

mapování vlastností @PrePersist @PreUpdate private void validatephonenumber(){ if (telephone.charat(0)!= + ) throw new IllegalArgumentException("Invalid phone number");

mapování vlastností @Transient //nezapise do databaze public int getactive() { return active; @Temporal(TemporalType.TIMESTAMP) //format casu public Date getbirthdate() { return birthdate;

dědičnost @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="DISCRIMINATOR", discriminatortype=discriminatortype.string) @DiscriminatorValue("USER") @Table(name="BASIC_USER") public class User{ protected long id; protected String name;

dědičnost @Entity @DiscriminatorValue("CUST") public class Customer extends User{ protected double creditlimit; @Entity @DiscriminatorValue("EMP") public class Employee extends User{ protected String rank; BASIC_USER Table ID NAME CREDIT_LIMIT RANK DISCRIMINATOR

dědičnost @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class User{ protected long id; protected String name; @Id @GeneratedValue(strategy = GenerationType.AUTO) public long getid() { @Entity public class Customer extends User{ protected double creditlimit;

dědičnost @Entity @Inheritance(strategy=InheritanceType.JOINED) @Table(name="BASIC_USER") public class User implements Serializable{ protected long id; protected String name; @Entity @PrimaryKeyJoinColumn(name="EMPLOYEE_ID") public class Employee extends User{ protected String rank;

dědičnost BASIC_USER Table ID NAME Employee table EMPLOYEE_ID RANK //i primarni i cizi klic

kolekce Table STUDENT STUDENT_ID Table PHONE STUDENT_ID NUMBER

kolekce @org.hibernate.annotations.collectionofelements (targetelement = java.lang.string.class) @JoinTable( name="phone"; joincolumns = @JoinColumn(name="STUDENT_ID")) @Column(name="NUMBER") @org.hibernate.annotations.sort (type=org.hibernate.annotations.sorttype.natural) public Set<String> getphones() {

vazby @Entity @Table(name = "t_customer") public class Customer { @Entity @Table(name = "t_address") public class Address { @Id @GeneratedValue private Long id; private String firstname; private String lastname; private String telephone; private String email; private Integer age; @Id @GeneratedValue private Long id; private String street; private String city; private String zipcode; private String country; private Address homeaddress;

vazby 1:1 @Entity @Table(name = "t_customer") public class Customer { @Id @GeneratedValue private Long id; () @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "address_fk", nullable = false) private Address homeaddress;

vazby 1:M @Entity public abstract class Customer { @Id @GeneratedValue private Long id; () @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinTable(name = "t_delivery_addresses", joincolumns = {@JoinColumn(name = "customer_fk"), inversejoincolumns = {@JoinColumn(name = "address_fk")) private List<Address> deliveryaddresses = new ArrayList<Address>(); public void adddeliveryaddress(address deliveryaddress) { deliveryaddresses.add(deliveryaddress);

vazby N:M @Entity @Table(name = "t_address") public class Address { @Id private Long id; () @ManyToMany @GeneratedValue (cascade = CascadeType.PERSIST) @JoinTable(name = "t_address_tag", joincolumns = { @JoinColumn(name = "address_fk"), inversejoincolumns = { @JoinColumn(name = "tag_fk")) private List<Tag> tags = new ArrayList<Tag>(); @Entity @Table(name = "t_tag") public class Tag { @Id private String name; @ManyToMany private List<Address> addresses

dotazy // zakazniky se jmenem john Query query = em.createquery ("SELECT c FROM Customer c WHERE c.firstname= John "); List<Customer> customers = query.getresultlist(); // to same s pouzitim parametru Query query = em.createquery ("SELECT c FROM Customer c WHERE c.firstname=:param"); query.setparameter(":param", "John"); List<Customer> customers = query.getresultlist();

dotazy // Vsechny adresy z London nebo New York query = em.createquery ("SELECT a FROM Address a WHERE a.city IN ( London, New York )" addresses = query.getresultlist(); // Vsechny adresy s alespon jednim tagem query = em.createquery ("SELECT a FROM Address a WHERE a.tags IS NOT EMPTY"); addresses = query.getresultlist(); // Vsechny adresy s week-end tagem. query = em.createquery ("SELECT a FROM Address a WHERE :param MEMBER OF a.tags"); query.setparameter("param", new Tag("week-ends")); addresses = query.getresultlist();

struktura tabulky popisující atributy třídy prvků zahrnující body, linie, plochy apod. soubory rastů a rastrové katalogy

typy prvků

typy prvků fromát geodat formát WKT nebo WKB (well-known text/binary) WKT - POINT(10 10), LINESTRING(10 10, 20 20, 30 40), POLYGON((10 10, 10 20, 20 20, 20 15, 10 10)) apod. WKB - 0101000000000000000000F03F000000000000F03F (POINT (1,1)) metody - GeomFromText(wkt,srid), LineFromText(wkt,srid), MPointFromText(wkt,srid) apod.

dotazy CREATE TABLE address ( address CHAR(80) NOT NULL, address_loc POINT NOT NULL, PRIMARY KEY(address), SPATIAL KEY(address_loc) ); CREATE TABLE cab ( cab_id INT AUTO_INCREMENT NOT NULL, cab_driver CHAR(80) NOT NULL, cab_loc POINT NOT NULL, PRIMARY KEY(cab_id), SPATIAL KEY(cab_loc) );

dotazy INSERT INTO address VALUES( w 12,GeomFromText( POINT(2671 2500) )); INSERT INTO address VALUES( w 56,GeomFromText( POINT(2971 2520) )); INSERT INTO address VALUES( w 78,GeomFromText( POINT(3171 2510) )); INSERT INTO address VALUES( w 97,GeomFromText( POINT(5671 2530) )); INSERT INTO address VALUES( w 99,GeomFromText( POINT(6271 2460) )); INSERT INTO address VALUES( n 10,GeomFromText( POINT(5673 3520) )); INSERT INTO address VALUES( n 20,GeomFromText( POINT(5665 3550) )); INSERT INTO address VALUES( n 45,GeomFromText( POINT(5571 3510) )); INSERT INTO cab VALUES(0, Joe,GeomFromText( POINT(2262 2100) )); INSERT INTO cab VALUES(0, Bill,GeomFromText( POINT(2441 1980) )); INSERT INTO cab VALUES(0, Sam,GeomFromText( POINT(5400 3200) ));

dotazy SELECT c.cab_driver, ROUND(GLength(LineStringFromWKB(LineString(AsBinary(c.cab_loc), AsBinary(a.address_loc))))) AS distance FROM cab c, address a WHERE a.address = Foobar street 99 ORDER BY distance ASC LIMIT 1; +------------+----------+ cab_driver distance +------------+----------+ Sam 1143 +------------+----------+ 1 row in set (0.00 sec)

Děkuji za pozornost