02 Popularne technologie trwałości obiektówid 3731 ppt

background image

Tworzenie warstwy

trwałości danych -

wprowadzenie

Rafał Kasprzyk

background image

Rafał Kasprzyk

Technologie warstwy integracji

Java I/O API

JDBC (ang. Java Database

Connectivity)

SQLJ

JSTL SQL

EJB (ang. Enterprise Java Beans)

JDO (ang. Java Data Objects)

iBATIS SqlMaps

Oracle TopLink

Hibernate

Inne 

background image

Rafał Kasprzyk

Java I/O

Rysunek przedstawia fragment

hierarchii klas umożliwiających

operacje I/O

API zawiera:

Strumienie „połączeniowe”

reprezentują połączenie ze źródłami i

miejscami docelowymi takimi jak pliki lub

gniazda sieciowe

Strumienie „łańcuchowe”

funkcjonują jedynie w połączeniu z

innymi strumieniami

Programowanie operacji I/O opiera

się na korzystaniu z wzorca

Decorator

Możliwość wykonania przydatnej

operacji uzyskujemy dopiero po

połączeniu co najmniej dwóch strumieni,

z których pierwszy obsługuje połączenie,

a drugi udostępnia metody, z których

chcemy skorzystać

Łączenie różnych strumieni

„połączeniowych” i „łańcuchowych”

zapewnia ogromną elastyczność

background image

Rafał Kasprzyk

Serializacja

Mechanizm serializacji

umożliwia utrwalanie i

odczyt obiektów na/z dysku i

po sieci

Serializacja wymusza

wykorzystanie:

Interfejsu Serializable

Strumieni ObjectInputStream

i ObjectOutputStream

background image

Rafał Kasprzyk

Serializacja – przykład

Serializacja

FileOutputStream fos = new FileOutputStream("plik.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ob1);
oos.writeObject(ob2);
oos.close();

Deserializacja

FileInputStream fis = new FileInputStream("plik.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Object ob1 = ois.readObject();
Object ob2 = ois.readObject();
MyClass elf = (Bohater) ob1;
MyClass trol = (Bohater) ob2;
oos.close();

background image

Rafał Kasprzyk

Architektura JDBC

API przeznaczone dla języka Java,

umożliwiające dostęp do większości

systemów bazodanowych

NATIVE

BRIDGE

PURE

MIDDLEWARE

background image

Rafał Kasprzyk

Typy sterowników JDBC

”BRIDGE”

(JDBC-ODBC bridge +

ODBC driver)

Mosty JDBC-ODBC wykorzystują

sterownik ODBC do komunikacji z bazą

danych. Sterownik ODBC musi być

zainstalowany i skonfigurowany na

każdej stacji klienckiej.

”NATIVE”

(Native-API partly-Java

driver)

Program komunikuje się z interfejsem

bazy danych, który musi być

zainstalowany, podobnie jak sterownik

ODBC, na każdej stacji klienckiej.

background image

Rafał Kasprzyk

Typy sterowników JDBC

”MIDDLEWARE”

(JDBC-Net pure Java

driver)

Sterownik JDBC komunikuje się z serwerem

pośredniczącym, za pomocą protokołu

niezależnego od bazy danych. Następnie

serwer tłumaczy polecenia na postać zgodna

z protokołem konkretnej bazy danych.

Rozwiązanie stosowane, gdy konieczny jest

dostęp do baz danych różnych producentów

”PURE”

(Native-protocol pure Java driver)

Sterownik JDBC komunikuje się bezpośrednio

z bazą danych przy pomocy jej protokołu.

Rozwiązanie najczęściej spotykane.

background image

Rafał Kasprzyk

JDBC 1.x

JDBC 1.0 pojawiła się w specyfikacji JDK 1.1

JDBC w tej wersji oferował minimum funkcjonalności.

W pakiecie java.sql znalazły się następujące

interfejsy:

Connection

DatabaseMetaData

Driver

DriverManager,

ResultSet

ResultSetMetaData

Statement

CallableStatement

PreparedStatement

Types

background image

Rafał Kasprzyk

JDBC 2.x

JDBC 2.0 pojawiło się w specyfikacji JDK

1.2

Powstanie związane było z promowaniem

przez Sun nowych technologii:

JTS (ang. Java Transaction Services)

JNDI (ang. Java Naming and Direcory Interface)

JavaBeans, jak również EJB (ang. Enterprise

JavaBeans)

Wprowadzono wiele zmian ułatwiających i

przyśpieszających pracę m.in.:

Przewijane zbiory wyników zapytań (ang.

scrollable ResultSets)

Aktualizacja grupowa danych (ang. batch

updates)

Programowe operacje CRUD

CRUD (ang. Create Read Update Delete)

możliwość zastąpienia języka SQL przez JDBC API (ang.

programmatic inserts/deletes/updates)

Zaawansowane typy danych zgodne z SQL3

(alias SQL99):

BLOB, CLOB, REF, ARRAY, …

background image

Rafał Kasprzyk

JDBC 2.x

JDBC 2.0 podzielony jest na dwa pakiety

JDBC 2.0 core API (client-side API) – zawarty w

pakiecie java.sql – pełen zestaw mechanizmów

dostępu do baz danych

JDBC 1.2 uzupełniony o szereg nowych funkcji.

JDBC 2.0 Optional Package (server-side API) –

zawarty w pakiecie javax.sql – funkcjonalne

uzupełnienie mechanizmów JDBC core API

rozszerzające interfejs strony serwera. Jest

integralną składową platformy J2EE.

Umożliwia korzystanie ze źródeł danych (ang. data

sources) zapewniających funkcje podłączenie do

dowolnej bazy, w tym bazy opartej na plikach, czy

arkuszach Excela

Wprowadzono tzw. zbiory wierszy (ang. RowSets) –

obiektami JavaBeans umożliwiającymi manipulowanie

zbiorem wyników niezależnie od istnienia połączenia z

bazą danych

Dodany został mechanizm puli połączeń

background image

Rafał Kasprzyk

JDBC 3.x

JDBC 3.0 pojawiło się wraz z JDK 1.4:

Zawiera JDBC core API oraz JDBC

Optional Package

Wprowadzono mechanizm konektorów

(ang. connectors) pozwalający w

zunifikowany sposób łączyć się z

różnymi źródłami danych, w tym

systemami EIS (ang. Enterprise

Information System) i bazami

sieciowymi

Trzy implementacje zbioru wierszy:

JDBCRowSet

CachedRowSet

WebRowSet

background image

Rafał Kasprzyk

JDBC 3.x

Pozostałe ważne zmiany wprowadzone w nowej

wersji:

Punkty zapisu (ang. SavePoints), pozwalające na powrót (ang.

rollback) transakcji do określonego momentu

Powtórne użycie prekompilowanych wyrażeń

Konfiguracja puli połączeń

Sposób grupowania źródeł danych i rozmiaru puli

Możliwość wykorzystania metadanych prekompilowanych

wyrażeń

Informacje o liczbie i typie parametrów w takim wyrażeniu

Uzyskiwanie informacji o wartościach w kolumnach, w

których wartości generowane są automatycznie przez bazę

danych np. ROWID

Otwierania wielu zbiorów wyników na jednym połączeniu

JDBC

Nowe typy danych:

BOOLEAN, DATALINK

(referencja do

zewnętrznych danych)

Modyfikowalne typy:

BLOB, CLOB, REF, ARRAY

W przypadku przechowywania w bazie typów strukturalnych

istnieje możliwość skorzystania z metadanych, które będą

zawierały informacje o hierarchii typów

background image

Rafał Kasprzyk

JDBC – przykład

Kolejne etapy obsługi bazy danych przedstawione zostały

na przykładzie lokalnego połączenia z bazą danych

zarządzaną przez ODBC

Zainicjowanie sterownika

Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”);

Połączenie z bazą danych

Connection connect =

DriverManager.getConnection(jdbc.odbc.TestDB);

Wykonanie polecenia SQL

Statement statement = connect.createStatement();

ResultSet rs =

statement.executeQuery(”select * from Osoba”);

Odbiór i obróbka wyników

String id, imie, nazwisko, wiek, wzrost;

while(rs.next()) {

id = rs.getString(1);

imie = rs.getString(2);

nazwisko = rs.getString(3);

wiek = rs. getString(4);

wzrost = rs.getString(5);

System.out.println(”|”+id+”|”+imie+”|”+nazwisko+

”|”+wiek+”|”+wzrost+”|”);

}

Zamknięcie połączenia z bazą danych

statement.close();

connect.close();

background image

Rafał Kasprzyk

SQLJ

Umożliwia zagnieżdżanie instrukcji SQL w kodzie

Java

Stanowi alternatywę dla bezpośredniego

korzystania z interfejsu JDBC

Pozwala na pisanie bardziej zwartych i czytelniejszych

programów

Zapewnie kontrolę poprawności odwołań do obiektów

baz danych i weryfikację składni instrukcji SQL na etapie

kompilacji

W standardzie SQLJ instrukcje SQL mają charakter

statyczny, co niekiedy jest istotnym ograniczeniem

Istnieją rozszerzenia SQLJ (np. w Oracle9i) wspierające

dynamiczne zapytania

Niestety zupełnie ”martwy standard”

String name = “Jan”;
String surname = “Kowalski”;

#sql {

INSERT INTO User (name, surname)

VALUES (:name, :surname)

};

background image

Rafał Kasprzyk

JSTL SQL

Wygodna biblioteka znaczników wykorzystywana

w prostych aplikacjach opartych na stronach JSP

Wykorzystanie JSTL SQL narusza model MVC

(ang. Model-View-Control)

Warstwę prezentacji zawiera kod związany z logikę

biznesową


<sql:query var="Users">
SELECT * FROM User
</sql:query>
<table border="1">

<c:forEach var="columnName" items="${Users.columnNames}">
<th><c:out value="${columnName}"/></th>
</c:forEach>
<c:forEach var="row" items="${Users.rows}">
<tr>
<c:forEach var="column" items="${row}">
<td><c:out value="${column.value}"/></td>
</c:forEach>
</tr>
</c:forEach>

</table>

background image

Rafał Kasprzyk

Rodzaje komponentów EJB

Platforma J2EE wyróżnia trzy rodzaje komponentów

EJB (ang. Enterprise Java Beans):

Session Beans to komponenty realizujące logikę aplikacji.

Stateful Session Bean – przechowują stan dialogu z klientem

Stateless Session Bean – nie przechowują stanu dialogu z

klientem

Entity Beans reprezentują obiekt biznesowy z systemu

przechowywania danych. Komponenty Entity Beans

współdzielone pomiędzy klientami, a dzięki systemowi

identyfikacji obiektów, kontener nie dopuszcza do

powstania dwóch komponentów reprezentujących te

same dane.

CMP (ang. Container Managed Persistence) – odpowiedzialność za

synchronizację stanu komponentu z bazą danych spoczywa na

kontenerze EJB

BMP (ang. Bean Managed Persistence) – programista musi

zapewnić właściwe odwzorowanie danych z bazy na komponenty

EJB i odwrotnie.

Message-Driven Beans to komponenty implementujące

logikę związaną z reakcją na komunikaty pochodzące z

warstwy pośredniej (ang. Message-Oriented Middleware).

background image

Rafał Kasprzyk

Entity Beans

Każdy encyjny komponent EJB jest oparty o tabelę

w relacyjnej bazie danych, a każda instancja

komponentu encyjnego reprezentuje wiersz w

tabeli

Cechy encyjnych komponentów EJB

Trwałość

Typowo składowane w relacyjnej bazie danych

Odporne na awarie aplikacji, serwera aplikacji, serwera BD

Trwałość zarządzana przez kontener (CMP) lub komponent (BMP)

Współdzielenie

Możliwość współdzielenia instancji komponentu przez kilku

klientów lub korzystanie z różnych instancji reprezentujących te

same dane

Unikalny identyfikator (ang. primary key)

Podstawowe kryterium wyszukiwania obiektów

Związki

Umożliwiają tworzenie powiązań pomiędzy komponentami

encyjnymi

Analogia do związków między tabelami w relacyjnej bazie

danych

background image

Rafał Kasprzyk

CMP

Kontener EJB obsługuje wszystkie

operacje na bazie danych, których

wymaga komponent

Kod komponentu nie zawiera żadnych

instrukcji SQL

Przenaszalność komponentu

Niezależności od schematu bazy i dialektu

SQL wykorzystywanego przez konkretny

serwer bazy danych

Kontener generuje odwołania do bazy

danych w oparciu o abstrakcyjny

schemat podany w deskryptorach

instalacji

Kontener EJB obsługuje również związki

między komponentami encyjnymi

background image

Rafał Kasprzyk

BMP

Programista komponentu dostarcza

kodu zarządzającego trwałością

komponentu

Należy zaimplementować metody do

odczytu, zapisu, manipulacji danymi oraz

zarządzania związkami

ejbLoad(), ejbStore(), ejbCreate(),

ejbPostCreate(), ejbRemove(), ejbFindXXX()

Kod komponentu zawiera wywołania JDBC i

SQLJ

Znacznie ograniczona przenaszalność

Kod odwołuje się do konkretnego schematu

bazy danych

Elastyczność

Twórca komponentu w pełni zarządza jego

trwałością

background image

Rafał Kasprzyk

Tworzenie EJB

Interfejs domowy (Home/LocalHome)

Wykorzystywany przez klientów do tworzenia,

usuwania i wyszukiwania komponentów encyjnych

Interfejs komponentowy (Remote/Local)

Zawiera deklaracje metod biznesowych

komponentu, udostępnianych klientom

Klasa komponentu

Reprezentuje dane biznesowe

Zawiera metody dostępu do danych i manipulacji

danymi

Może zawierać kod walidujący dane

Klasa klucza głównego

Wykorzystywana do identyfikacji instancji

komponentu

Deskryptor instalacji (ang. deployment

descriptor)

Plik XML z danymi konfiguracyjnymi

wykorzystywanymi przez kontener

background image

Rafał Kasprzyk

Wady EJB

Bardzo złożona technologia

Duży nakład pracy konieczny do

stworzenia komponentu i jego

konfiguracji

failed technology

Mała elastyczność i wydajność w

zakresie komunikacji z bazą danych

Mało funkcjonalny język zapytań EJB-QL

Nie pozwalają na wykorzystanie

podstawowych zalet obiektowego

podejścia do tworzenia aplikacji

Dziedziczenie

Polimorfizm

background image

Rafał Kasprzyk

Wady EJB

Brak możliwości testowania

komponentów EJB poza

środowiskiem kontenera

Trudności w przeprowadzaniu testów

jednostkowych

Trudności w migracji aplikacji

pomiędzy serwerami różnych

producentów związane z

komponentami EJB

Każdy serwer ma własne pliki

konfiguracyjne (ejb-jar.xml)

background image

Rafał Kasprzyk

EJB 3.0 – istotne zmiany

Plik konfiguracyjny ejb-jar.xml nie

jest potrzebny

Cała konfiguracja przeprowadzana jest

z wykorzystaniem mechanizmu

annotations (@Stateless, @Entity,

…)

Znacząco uproszczony sposób

tworzenia

Komponenty nie muszą implementować

żadnych zewnętrznych interfejsów

Aplikacja bazuje na tzw. zwyczajnych,

starych obiektach Java – POJO (ang.

Plain Old Java Objects)

background image

Rafał Kasprzyk

EJB 3.0 – istotne zmiany

Rozbudowany język zapytań EJB-QL

Możliwość wykorzystania zalet

obiektowego podejścia do tworzenia

aplikacji

Dziedziczenie

Polimorfizm

Komponenty encyjne mogą być

wykorzystywane poza środowiskiem

serwera aplikacji

background image

Rafał Kasprzyk

JDO

JDO to specyfikacja do utrwalania obiektów Java

stworzona przez Sun, w składnicy danych, którą

możą być

Relacyjny DBMS

Obiektowy DBMS

Pliki XML, pliki tekstowe

JDO ma wiele implementcji

Komercyjne

JDO Genie, JPower Map, JCredo, ObjectDB, XCalia, JORM

Open source

JDO Instruments, JDOMax, Speedo, Jakarta OJB, JPOX

JPOX to darmowa implementacja standardów

JDO 1.0 i JDO2.0

Obecnie prawdopodobnie najbardziej popularna

Wsparcie dla większości relacyjnych DBMS

MySQL, Firebird, Informix, Oracle, Sybase, DB2,

SAPDB/MaxDB

Bardzo dobrze udokumentowana

background image

Rafał Kasprzyk

Klasy JDO

Zdolne do trwałości (ang. persistence

capable)

Klasa, której obiekty mają być utrwalane musi

być ulepszona (ang. JDO enhanced )na

podstawie metadanych.

Dla tych klas muszą istnieć metadane

pliki *.jdo (deskryptory)

Świadome trwałości (ang. persistence

aware)

Klasy manipulujące instancjami klas zdolnych

do trwałości. Klasy te są automatycznie

ulepszane

Zwyczajne (ang. normal)

Klasy nie mające nic wspólnego z JDO. Nie są

opisywane za pomocą metadanych i nie są

ulepszane

background image

Rafał Kasprzyk

Menedżer utrwalania obiektów

Properties props=new Properties();

props.put("javax.jdo.PersistenceManagerFactoryClass",

"org.jpox.PersistenceManagerFactoryImpl");

props.put("javax.jdo.option.ConnectionDriverName",

"com.mysql.jdbc.driver");

props.put("javax.jdo.option.ConnectionURL",

"jdbc:mysql://localhost/jpox");

props.put("javax.jdo.option.ConnectionUserName",

"mysql");

props.put("javax.jdo.option.ConnectionPassword","");

PersistenceManagerFactory

pmf=JDOHelper.getPersistenceManagerFactory(props);

PersistenceManager pm=pmf.getPersistenceManager();

PersistenceManagerFactory

Klasa służąca do uzyskania dostępu do zarządcy

trwałości

Inicjalizacja na poziomie aplikacji (jak w przykładzie)

Inicjalizacja za pomocą pliku properties lub JNDI

PersitenceManager

Klasa odpowiedzialna za utrwalanie obiektów,

odczytywanie trwałych obiektów ze składnicy danych i

usuwanie obiektów

background image

Rafał Kasprzyk

Rodzaje obiektów w JDO

(nomenklatura)

background image

Rafał Kasprzyk

Zapis nowego obiektu do bazy

Transaction tx=pm.currentTransaction();
try {

tx.begin();
Product product = new Product("T20MT",

"A standard mp3 player from iRiver",

99.99);

pm.makePersistent(product);
tx.commit();

}
finally {

if (tx.isActive()) {
tx.rollback();
}

}

background image

Rafał Kasprzyk

Aktualizacja wpisu w bazie

Transaction tx=pm.currentTransaction();

try {

tx.begin();

String product_name = product.getName();

...

product.setPrice(89.99);

tx.commit();

}

finally {

if (tx.isActive()) {

tx.rollback();

}

}

background image

Rafał Kasprzyk

Usunięcie obiektu z bazy

Transaction tx=pm.currentTransaction();

try {

tx.begin();

String product_name = product.getName();

...

pm.deletePersistent(product);

tx.commit();

}

finally {

if (tx.isActive()) {

tx.rollback();

}

}

background image

Rafał Kasprzyk

Modyfikacja obiektu poza

transakcją

Działanie na obiekcie poza

transakcją pozwala dowolnie

modyfikować obiekt bez

jakichkolwiek zmian w bazie danych.

W tym celu należy:

Przenieść obiekt w stan Transient

makeTransient()

Odłączyć obiekt

detachCopy()

Wykorzystać poza transakcyjne

czytanie/pisanie

nonTransactional[Read/Write]()

background image

Rafał Kasprzyk

Wczytanie obiektu z bazy

Wykorzystanie tożsamości obiektu

Object identity = pm.getObjectId(obj);
Object obj = pm.getObjectById(identity);

Użycie JDOQL (ang. JDO Query Language)

Query query = pm.newQuery(Product.class,

„price < value");

query.declareParameters(„float value");
List results = query.execute(100);
Iterator iter = results.iterator();
while (iter.hasNext())
{

Product product = (Product)iter.next();

}

Extent jako brutalna alternatywa dla

JDOQL

Extent e = pm.getExtent(Product.class, true);

background image

Rafał Kasprzyk

JDO - metadane

package pl.isolution.jdo

public class Product {

String pname;

String description;

float price;

}

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jdo PUBLIC

"-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata

2.0//EN"

"http://java.sun.com/dtd/jdo_2_0.dtd">

<jdo>

<package name="pl.isolution.jdo">

<class name= "Product" identity-type="datastore">

<field name= "pname"/>

<field name= "description"/>

<field name= "price"/>

</class>

</package>

</jdo>

background image

Rafał Kasprzyk

Zalety JDO

Można zmienić silnik bazy danych, a

nawet typ bazy bez zmian w kodzie

Nie trzeba tworzyć struktury bazy

danych od nowa

Możliwość wykorzystania istniejącego

schematu

Możliwość automatycznej generacji

schematu

Koniec z normalizacją ;)

Klasy trwałe nie musza implementować

żadnych specjalnych interfejsów

Aplikacja bazuje na tzw. zwyczajnych,

starych obiektach Java – POJO (ang. Plain

Old Java Objects)

background image

Rafał Kasprzyk

iBATIS SqlMaps

Biblioteka zapewniająca niewątpliwe

korzyści jakie daje zastosowanie

mechanizmu odwzorowań obiektowo-

relacyjnych, a jednocześnie

Zmniejsza zagrożenia związane z ich

nieuzasadnionym stosowaniem

Nie zmusza do stosowania rozwiązań

znacznie wykraczających poza potrzeby

Biblioteka należy do klasy tzw. lekkich

ORM’ów

Świetna współpraca ze Spring

Framework

Spring to obecnie prawdopodobnie

najpopularniejsze środowiskiem rozwoju

aplikacji J2EE

background image

Rafał Kasprzyk

Person.java Person.sql

package domain;

public class Person {

private int id;

private String firstName;

private String lastName;

private Date birthDate;

private double weight;

private double height;

public int getId () {

return id;

}

public void setId (int id) {

this.id = id;

}

}

CREATE TABLE PERSON(

ID

NUMBER (5, 0) NOT NULL,

FIRST_NAME

VARCHAR (40) NOT NULL,

LAST_NAME

VARCHAR (40) NOT NULL,

BIRTH_DATE

DATETIME ,

WEIGHT

NUMBER (4, 2) NOT NULL,

HEIGHT

NUMBER (4, 2) NOT NULL,

PRIMARY KEY (ID)

)

background image

Rafał Kasprzyk

sqlMap-config.[xml/properties]

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig

PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<properties resource="sqlmap/maps/SqlMapConfig.properties" />

<settings

cacheModelsEnabled="true"

enhancementEnabled="true"

lazyLoadingEnabled="true"

maxRequests="32"

maxSessions="10"

maxTransactions="5"

useStatementNamespaces="false" />

<typeAlias alias="order" type="domain.Order"/>

<transactionManager type="JDBC" >

<dataSource type="SIMPLE">

<property name="JDBC.Driver" value="${driver}"/>

<property name="JDBC.ConnectionURL" value="${url}"/>

<property name="JDBC.Username" value="${username}"/>

<property name="JDBC.Password" value="${password}"/>

</dataSource>

</transactionManager>

<sqlMap resource="examples/sqlmap/maps/Person.xml" />

</sqlMapConfig>

driver = com.mysql.jdbc.Driver

url = jdbc:mysql://localhost/testDB

username = smith

password = 3w$#kr8u

background image

Rafał Kasprzyk

Person.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap

PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Person">

<select id="getPerson" parameterClass=”int”

resultClass="domain.Person">

SELECT ID as id, FIRST_NAME as firstName, LAST_NAME as

lastName,

BIRTH_DATE as birthDate, WEIGHT as weight, HEIGHT

as height FROM

PERSON WHERE ID = #value#

</select>

<insert id="insertPerson" parameterClass="domain.Person">

INSERT INTO PERSON (ID, FIRST_NAME, LAST_NAME,

BIRTH_DATE, WEIGHT, HEIGHT) VALUES (#id#, #firstName#,

#lastName#, #birthDate#, #weight#, #height#)

</insert>

<update id="updatePerson" parameterClass="domain.Person">

UPDATE PERSON SET FIRST_NAME = #firstName#, LAST_NAME =

#lastName#, BIRTH_DATE = #birthDate#, WEIGHT = #weight#,

HEIGHT = #height# WHERE ID = #id#

</update>

<delete id="deletePerson" parameterClass="domain.Person">

DELETE PERSON WHERE ID = #id#

</delete>

</sqlMap>

background image

Rafał Kasprzyk

MyAppSqlConfig.java

public MyAppSqlConfig {

private static final SqlMapClient sqlMap;

static {

try {

String resource =

"sqlmap/maps/sqlMap-config.xml ";

Reader reader =

Resources.getResourceAsReader(resource);

sqlMap =

SqlMapClientBuilder.buildSqlMapClient(reader);

}catch (Exception e) {

e.printStackTrace();

}

}

public static getSqlMapInstance () {

return sqlMap;

}

}

background image

Rafał Kasprzyk

Przykład wykorzystania iBATIS

SqlMapClient sqlMap = MyAppSqlMapConfig.getSqlMapInstance();

Integer personPk = new Integer(5);

Person person =

(Person) sqlMap.queryForObject (“getPerson”, personPk);

person.setHeight(1.83);

person.setWeight(86.36);

sqlMap.update(“updatePerson”, person);

sqlMap.delete (“deletePerson”, person);

Person nPerson = new Person();

nPerson.setId(11);

nPerson.setFirstName(“Jan”);

nPerson.setLastName(“Kowalski”);

nPerson.setBirthDate (null);

nPerson.setHeight(1.83);

nPerson.setWeight(86.36);

sqlMap.insert (“insertPerson”, nPerson);

background image

Rafał Kasprzyk

Zalety iBATIS SQLMaps

iBATIS SQLMaps pozwala

Kojarzyć kolumny i polecenia SQL ze

słowami kluczowymi

Korzystać z pełnych możliwości SQL

bez uciążliwości stosowania JDBC

Usunąć wszelkie polecenia SQL z kodu

aplikacji

Klasy trwałe nie musza

implementować żadnych

specjalnych interfejsów

Aplikacja bazuje na tzw. zwyczajnych,

starych obiektach Java – POJO (ang.

Plain Old Java Objects)

background image

Rafał Kasprzyk

Oracle TopLink

Kolejna ciekawa technologia warstwy

integracji oparta na idei mapowania

obiektowo-relacyjnego

Wykorzystywana w aplikacjach pisanych

w języku Java i opartych o relacyjne

bazy danych

Zasada działania podobna do innych

bibliotek opartych na idei ORM

Programista definiuje w języku XML

zasady odwzorowań obiektów Java na

tabele w relacyjnej bazie danych

(metadane)

TopLink został włączony do systemu

zarządzania bazą danych Oralce9i

background image

Rafał Kasprzyk

Rozwój aplikacji w oparciu o

TopLink

Projektowanie modelu danych dla relacyjnej

bazy danych i jego implementacja w wybranym

RDBMS

Projektowanie obiektowego modelu danych i

jego implementacja w języku Java

Definiowanie metadanych

Implementacja kodu przetwarzania danych w

języku Java

Wykorzystane narzędzia

JDeveloper 10g R3

Zawiera kreatory i edytory odwzorowań

TopLink Workbench

Samodzielna aplikacja ułatwiająca definiowanie odwzorowań

Jedynie biblioteka TopLink API

Brak wsparcia do automatyzacji definiowania odwzorowań

background image

Rafał Kasprzyk

TopLink – podstawowe pojęcia

Deskryptor (ang. descriptor)

Opisuje powiązanie pomiędzy klasą

Javy, a tabelą w relacyjnej bazie

danych

Odwzorowanie (ang. mappings)

Opisuje powiązanie pomiędzy

atrybutem klasy, a kolumną tabeli

Projekt (ang. project)

Gromadzi wszystkie deskryptory i

odwzorowania dla całej aplikacji

background image

Rafał Kasprzyk

Podsumowanie

Technologie warstwy integracji

Wykorzystania SQL na JDBC vs. SQLJ

SQL w warstwie prezentacji – JSTL

EJB – wady i zalety

Wykorzystanie mapowania ORM

EJB

JDO

iBATIS SQLMaps

Oracle TopLink

Hibernate – to dopiero przed nami ;)


Document Outline


Wyszukiwarka

Podobne podstrony:
1 Infrastruktura, technika i technologia procesów logistyczid 8534 ppt
MODUL 02 Rynek%20technologii
Identyfikacja Procesów Technologicznych 03.Obiekt oscylacyjny
02 statek powietrzny jako obiekt eksploatacji
31 Egzamin ECW 2006-02-06, Technologia chemiczna pw, 2 rok, stata
USM Automatyka w IS (wyklad 2), Obiekty reg ppt [tryb zgodnosci]
02 02 2016 Technologia informacyjna
12 Idealizm subiektywny i idealizm obiektywnyid 13250 ppt
PROJEKT TECHNOLOGICZNY DLA OBIEKTU TURYSTYCZNEGO, szkoła hotelarska
02 02 2016 Technologia informacyjna s
11 02 2008 wyklad wstepny slajdyid 12317 ppt
02 Barka Ne MSZA ŚWIĘTAid 3579 ppt
TECHNOLOGIA MONTA U OBIEKTU, Technologiczne
PROJEKT TECHNOLOGICZNY DLA OBIEKTU TURYSTYCZNEGO(1), szkoła hotelarska
Ćwiczenia utrwalające w stosowaniu funkcji, do uczenia, materialy do nauczania, rok2009 2010, semII,
02 OBRZĘDY MSZY ŚWIĘTEJ Z LUDEMid 3697 ppt
02 Badania układu krąż id 3378 ppt
11 WŁASNOŚCI FIZYCZNE, WYTRZYMAŁOŚCIOWE I TECHNOLOGICZNE METALI Iid 12654 ppt

więcej podobnych podstron