Práce s Objekty

Gali_db Umožňuje pracovat přímo s Objektem. Je to v určitých případech daleko efektivější a je to velmi jednoduché na zapsání. Jednoduše zavoláme například metodu delete, nebo insert a jako parametr dáme těmto metodám daný objekt, který se má zpracovat.

 

Jak to funguje?

Wrapper využívá techiku ORM(Objektově relační mapování). Hlavním cílem je úplné odstínění uživatele od používání SQL dotazů a slouží jako synchronizace mezi používanými objekty a jejich reprezentací v databázové tabulce. Zjednodušeně konverze mezi relační databází a objekty.

Tabulku dopředu nemusíte vytvářet. Pokud do databáze uložíte nějaký objekt a žádná databázová tabulka danému objektu neodpovídá, tak se automaticky uloží. Pokud máte tabulku již hotovou, musíte objekt dané tabulce přispůsobit.

Je tedy lepší nejdříve Vytvářet objekty a tabulky si nechat v Gali_db generovat!

 

Příklad použití

Nejdříve si připravíme Třídu User, která bude vypadat následovně:

import DB.objects.services.annotations.TableAnnotation;
import java.sql.Date;

@TableAnnotation(primaryKey = "id")
public class User {

private int id;
private String nick;
private double hotovost;
private Date datumNarození;

 

/**
* @return the id
*/
public int getId() {
    return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
    this.id = id;
}

/**
* @return the nick
*/
public String getNick() {
    return nick;
}

/**
* @param nick the nick to set
*/
public void setNick(String nick) {
    this.nick = nick;
}

/**
* @return the hotovost
*/
public double getHotovost() {
    return hotovost;
}

/**
* @param hotovost the hotovost to set
*/
public void setHotovost(double hotovost) {
    this.hotovost = hotovost;
}

/**
* @return the datumNarození
*/
public Date getDatumNarození() {
    return datumNarození;
}

/**
* @param datumNarození the datumNarození to set
*/
public void setDatumNarození(Date datumNarození) {
    this.datumNarození = datumNarození;
}

}

Při vytváření objektu, který se bude ukládat do databázové tabulky je důležité definovat primární klíč, Tento klíč má vždy unikátní hodnotu a data se pak automaticky vyhledávají podle tohoto klíče, pokud tomu nechceme jinak. Primární klíč nastavíme díky anotaci @TableAnnotation(primaryKey = "id"), kde primaryKey přiřadíme jeden z atributů dané třídy.  To je asi tak všechno co se musí nastavit.

 

CRUD operace v Gali_db

Teď přijde ukázka kódu, kde budou 3 základní operace v Gali_db(mimo update). 

Ještě předtím si ale pročtěte dokumentaci  ke třídě Date v balíčku java.sql.date. Pak už vám nic nebrání, začít využívat objekty a Gali_db naplno.

 

Nejdříve si vytvoříme 2 objekty, které uložíme do databáze.

try {

Database database = new Database("osoby", "root", "");
User user = new User();
user.setNick("prvni uzivatel");
user.setHotovost(72.90);
user.setDatumNarození(new Date(93, 3, 21));

User user2 = new User();
user2.setNick("druhy uzivatel");
user2.setHotovost(122.90);
user2.setDatumNarození(new Date(98, 07, 21));


database.insert(user);
database.insert(user2);

}catch (SQLException ex) {

Logger.getLogger(Wrapper.class.getName()).log(Level.SEVERE, null, ex);

}

Ale jak jste si jistě všimli, ani jeden uživatel nemá nastaven atribut id. Id každého uživatele se tedy bude generovat automaticky, protože atribut id, reprezentuje v databázové tabulkce sloupec id, který má nastavenou hodnotu UNSIGNED - pouze kladná čísla a také hodnotu AUTO_INCREMENT - automaticky se zvyšující hodnota o 1.

Pokud bychom chtěli Objekt user2 smazat, tak bychom to mohli udělat 2 způsoby.

 

1. způsob - přiřazení id objektu user2

Do bloku try, kde máme vytvořené 2 objekty třídy User, přidáme následující kód:

user2.setId(2);
database.delete(user2);

objektu user2 musíme nejdříve přiřadit id, abychom ho mohli použít jako parametr metody delete. Kolikrát ale dopředu nevíme, jaké id má daný uživatel. Ve většině případů, bude nejspíš užitečnější způsob2.

 

2. způsob- získání objektu metodou select

Nejdříve vymažte kód ze způsobu 1, pokud jste tak již neučinili. Poté si do původního bloku try přidejte následující kód:


User user3 = (User) database.select(new User(), "nick=?", "prvni uzivatel");
database.delete(user3);

U metody select musíme uvést 3 parametry

  • objekt, který chceme získat
  • podmínku, ale pouze s otazníkem
  • parametr, který se dosadí místo otazníku

Metoda select má návratový typ Object. Musímet tedy hodnotu přetypovat, na Konkrétní třídu. Takto získaný objekt, můžeme beze změn použít jako parametr funkce delete, nebo s ním prostě nadále jakoli pracovat.