mpr hibernate

background image

Przygotowali: Łukasz Monkiewicz,

Przygotowali: Łukasz Monkiewicz,

Łukasz Zawadzki

Łukasz Zawadzki

Java

-

HIBERNATE

background image

Plan prezentacji

Plan prezentacji

Co to jest Hibernate??

Co to jest Hibernate??

Podstawowe cechy Hibernate

Podstawowe cechy Hibernate

Dlaczego Hibernate jest wartościową

Dlaczego Hibernate jest wartościową

technologią??

technologią??

Podstawowe elementy rozwijanej aplikacji

Podstawowe elementy rozwijanej aplikacji

Użycie złożonych relacji i zapytań,

Użycie złożonych relacji i zapytań,

kryteriów, dziedziczenia

kryteriów, dziedziczenia

XDoclet a HIBERNATE

XDoclet a HIBERNATE

Porównanie do EJB

Porównanie do EJB

background image

Co to jest hibernate??

Co to jest hibernate??

Jest to technologia wysokiej wydajności i

Jest to technologia wysokiej wydajności i

szybkości działania służąca do

szybkości działania służąca do

wykonywania operacji na obiektowo –

wykonywania operacji na obiektowo –

relacyjnych bazach danych z poziomu

relacyjnych bazach danych z poziomu

języka Java

języka Java

background image

Podstawowe cechy technologii

Podstawowe cechy technologii

Hibernate:

Hibernate:

Nie ma potrzeby implementowania

Nie ma potrzeby implementowania

interfejsów

interfejsów

Dowolna klasa może być klasą

Dowolna klasa może być klasą

reprezentującą encję

reprezentującą encję

Wygodne i intuicyjne mapowanie plików

Wygodne i intuicyjne mapowanie plików

struktury xml na klasy

struktury xml na klasy

Mniej kodu = mniej błędów

Mniej kodu = mniej błędów

Optymalna wydajność

Optymalna wydajność

background image

Dlaczego warto nauczyć się

Dlaczego warto nauczyć się

Hibernate

Hibernate

Proste zasady działania

Proste zasady działania

Możliwość korzystania z możliwości SQL

Możliwość korzystania z możliwości SQL

bez wychodzenia poza granicę języka Java

bez wychodzenia poza granicę języka Java

Możliwość stworzenia dużej bazy bez

Możliwość stworzenia dużej bazy bez

większego wkładu pracy

większego wkładu pracy

Open source

Open source

Dostepność narzędzi open source

Dostepność narzędzi open source

Popularność

Popularność

background image

Podstawowe elementy

Podstawowe elementy

Aplikacji

Aplikacji

Klasa reprezentująca encję:

Klasa reprezentująca encję:

1.

1.

Posiada metody get i set dla atrybutów klasy –

Posiada metody get i set dla atrybutów klasy –

pól w tabeli:

pól w tabeli:

Class Entity

Class Entity

{

{

int id;

int id;

private void setId(int id)

private void setId(int id)

{

{

this.id = id;

this.id = id;

}

}

public int getId()

public int getId()

{

{

return id;

return id;

}

}

}

}

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

1.

1.

Posiada bez argumentowy konstruktor.

Posiada bez argumentowy konstruktor.

Plik mapowania(Entity.hbm.xml):

Plik mapowania(Entity.hbm.xml):

<hibernate-mapping>

<hibernate-mapping>

<class name="Entity" table=„Entity">

<class name="Entity" table=„Entity">

<id name="id" column="ID">

<id name="id" column="ID">

<generator class="increment"/>

<generator class="increment"/>

</id>

</id>

<property name="date" type="timestamp" column="DATE"/>

<property name="date" type="timestamp" column="DATE"/>

<property name="title"/>

<property name="title"/>

</class>

</class>

</hibernate-mapping>

</hibernate-mapping>

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Plik konfiguracji (hibernate.properties lub

Plik konfiguracji (hibernate.properties lub

hibernate.cfg.xml) :

hibernate.cfg.xml) :

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->

<property name="connection.driver_class">

org.hsqldb.jdbcDriver

</property>
<property name="connection.url">

jdbc:hsqldb:data/tutorial

</property>
<property name="connection.username">

sa

</property>
<property name="connection.password">
</property>
<property name="dialect">org.hibernate.dialect.HSQLDialect
</property>
<property name="show_sql">

true

</property>

<mapping resource="Entity.hbm.xml"/>

</session-factory>

</hibernate-configuration>

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Przykładowy

Przykładowy

kod wykonywalny:

kod wykonywalny:

class EntityManager

class EntityManager

{

{

public static void main(String[] args)

public static void main(String[] args)

{

{

EntityManager em = new EntityMenager();

EntityManager em = new EntityMenager();

em.createAndStoreSomething(„nazwa”, new Date());

em.createAndStoreSomething(„nazwa”, new Date());

}

}

}

}

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Przykładowy

Przykładowy

kod wykonywalny:

kod wykonywalny:

public void createAndStoreSomething(String title, new Date()) {

public void createAndStoreSomething(String title, new Date()) {

public static final SessionFactory sessionFactory = new

public static final SessionFactory sessionFactory = new

Configuration().configure().buildSessionFactory();

Configuration().configure().buildSessionFactory();

public static final ThreadLocal session = new ThreadLocal();

public static final ThreadLocal session = new ThreadLocal();

Session s = (Session) session.get();

Session s = (Session) session.get();

if( s == null) {

if( s == null) {

s = sessionFactory.openSession();

s = sessionFactory.openSession();

session.set(s);

session.set(s);

}

}

Transaction tx = s.beginTransaction();

Transaction tx = s.beginTransaction();

Entity ent = new Entity();

Entity ent = new Entity();

ent.setTitle(title);

ent.setTitle(title);

ent.setDate(theDate);

ent.setDate(theDate);

s.save(theEvent);

s.save(theEvent);

tx.commit();

tx.commit();

s.close();

s.close();

session.set(null);

session.set(null);

}

}

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Przedstawienie relacji między tabelami:

Przedstawienie relacji między tabelami:

_________________ _________________

_________________ _________________

| PERSON | | Entity |

| PERSON | | Entity |

|_______________ | | _______________ |

|_______________ | | _______________ |

| person_id | * 0..1| ID |

| person_id | * 0..1| ID |

| name | ----------------------------------| title |

| name | ----------------------------------| title |

| | | date |

| | | date |

| | | |

| | | |

| | | |

| | | |

|_______________ | |________________|

|_______________ | |________________|

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Klasa Person.java

Klasa Person.java

class Person {

class Person {

int person_id;

int person_id;

String name;

String name;

Entity ent;

Entity ent;

//metody get i set dla atrybutów…

//metody get i set dla atrybutów…

public Entity getEntity() {

public Entity getEntity() {

return ent;

return ent;

}

}

public void setEntity(Entity ent) {

public void setEntity(Entity ent) {

this.ent = ent;

this.ent = ent;

}

}

}

}

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Person.hbm.xml :

Person.hbm.xml :

<hibernate-mapping>

<hibernate-mapping>

<class name=„Person" table=„Persons">

<class name=„Person" table=„Persons">

<id name=„person_id" column=„PERSON_ID">

<id name=„person_id" column=„PERSON_ID">

<generator class="increment"/>

<generator class="increment"/>

</id>

</id>

<property name=„name”/>

<property name=„name”/>

<many-to-one
name=„ent„ column="ID"
class=„Entity„ not-null="true"/>

</class>

</class>

</hibernate-mapping>

</hibernate-mapping>

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Klasa Entity.java :

Klasa Entity.java :

class Entity {

class Entity {

private Set persons = new HashSet();

public void setPersons(Set persons) {

this.persons = persons;

}
public Set getPersons() {

return persons;

}

}

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Entity.hbm.xml :

Entity.hbm.xml :

<hibernate-mapping>

<hibernate-mapping>

<class name="Entity" table=„Entity">

<class name="Entity" table=„Entity">

<set name=„persons">

<key column=„ID"/>
<one-to-many class=„Person"/>

</set>

</class>

</class>

</hibernate-mapping>

</hibernate-mapping>

background image

Podstawowe elementy Aplikacji

Podstawowe elementy Aplikacji

c.d.

c.d.

Przykładowy kod wykorzystujący relację:

Przykładowy kod wykorzystujący relację:

class EntityManager

class EntityManager

{

{

public static void main(String[] args) {

public static void main(String[] args) {

public static final SessionFactory sessionFactory = new

public static final SessionFactory sessionFactory = new

Configuration().configure().buildSessionFactory();

Configuration().configure().buildSessionFactory();

public static final ThreadLocal session = new ThreadLocal();

public static final ThreadLocal session = new ThreadLocal();

Session s = (Session) session.get();

Session s = (Session) session.get();

if( s == null) {

if( s == null) {

s = sessionFactory.openSession();

s = sessionFactory.openSession();

session.set(s);

session.set(s);

}

}

Transaction tx = s.beginTransaction();

Transaction tx = s.beginTransaction();

Person aPerson = (Person) session.load(Person.class, 2);

Person aPerson = (Person) session.load(Person.class, 2);

Entity anEntity = (Entity) session.load(Event.class, 1);

Entity anEntity = (Entity) session.load(Event.class, 1);

anEntity.getPersons().add(aPerson);

anEntity.getPersons().add(aPerson);

tx.commit();

tx.commit();

s.close();

s.close();

session.set(null);

session.set(null);

}

}

}

}

background image

Złożone zapytania

List mothers = session.createQuery(

List mothers = session.createQuery(

"select mother from Cat as cat join cat.mother as mother where cat.name

"select mother from Cat as cat join cat.mother as mother where cat.name

= ?")

= ?")

.setString(0, name)

.setString(0, name)

.list();

.list();

List kittens = session.createQuery(

List kittens = session.createQuery(

"from Cat as cat where cat.mother = ?")

"from Cat as cat where cat.mother = ?")

.setEntity(0, pk)

.setEntity(0, pk)

.list();

.list();

Cat mother = (Cat) session.createQuery(

Cat mother = (Cat) session.createQuery(

"select cat.mother from Cat as cat where cat = ?")

"select cat.mother from Cat as cat where cat = ?")

.setEntity(0, izi)

.setEntity(0, izi)

.uniqueResult();

.uniqueResult();

background image

Kryteria

List cats = sess.createCriteria(Cat.class)

List cats = sess.createCriteria(Cat.class)

.add( Restrictions.like("name", "Fritz%") )

.add( Restrictions.like("name", "Fritz%") )

.add( Restrictions.or(

.add( Restrictions.or(

Restrictions.eq( "age", new Integer(0) ),

Restrictions.eq( "age", new Integer(0) ),

Restrictions.isNull("age")

Restrictions.isNull("age")

) )

) )

.list();

.list();

List cats = sess.createCriteria(Cat.class)

List cats = sess.createCriteria(Cat.class)

.add( Restrictions.sql(

.add( Restrictions.sql(

"lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING

"lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING

) )

) )

.list();

.list();

background image

Dziedziczenie

public class Person {

public class Person {

String name;

String name;

Long id;

Long id;

... // getter, setter

... // getter, setter

}

}

public class Employee extends Person {

public class Employee extends Person {

String NIP;

String NIP;

... // getter, setter

... // getter, setter

}

}

background image

Dziedziczenie

<class name="Person" table="persons"

<class name="Person" table="persons"

discriminator-value="P"

discriminator-value="P"

>

>

<id name="id">

<id name="id">

<generator class="native"/>

<generator class="native"/>

</id>

</id>

<discriminator column="subclass" type="character"/>

<discriminator column="subclass" type="character"/>

<property name="name" type="string"/>

<property name="name" type="string"/>

<subclass name="Employee" discriminator-value=„

<subclass name="Employee" discriminator-value=„

E

E

">

">

<property name="NIP" type="string"/>

<property name="NIP" type="string"/>

</subclass>

</subclass>

</class>

</class>

background image

Relacje: wiele do wiele

<class name="Person">

<class name="Person">

<id name="id" column="personId">

<id name="id" column="personId">

<generator class="native"/>

<generator class="native"/>

</id>

</id>

<set name="addresses">

<set name="addresses">

<key column="personId"/>

<key column="personId"/>

<many-to-many column="addressId" class="Address"/>

<many-to-many column="addressId" class="Address"/>

</set>

</set>

</class>

</class>

<class name="Address">

<class name="Address">

<id name="id" column="addressId">

<id name="id" column="addressId">

<generator class="native"/>

<generator class="native"/>

</id>

</id>

<set name="people" inverse="true">

<set name="people" inverse="true">

<key column="addressId"/>

<key column="addressId"/>

<many-to-many column="personId" class="Person"/>

<many-to-many column="personId" class="Person"/>

</set>

</set>

</class>

</class>

background image

XDoclet i Hibernate

/**

/**

* @hibernate.class

* @hibernate.class

* table="Person"

* table="Person"

*/

*/

public class Person {

public class Person {

private Long id;

private Long id;

private String name;

private String name;

/*

/*

* @hibernate.id

* @hibernate.id

* generator-class="native"

* generator-class="native"

* column="PERSON_ID"

* column="PERSON_ID"

*/

*/

public Long getId() { return id;}

public Long getId() { return id;}

private void setId(Long id) { this.id=id;}

private void setId(Long id) { this.id=id;}

/*

/*

* @hibernate.

* @hibernate.

property

property

* column="NAME"

* column="NAME"

*/

*/

public String getName() { return id;}

public String getName() { return id;}

private void setName(Name name) { this.name=name;}

private void setName(Name name) { this.name=name;}

}

}

background image

Porównanie

do EJB

Mniej zbędnego kodu

Mniej zbędnego kodu

Nie wymaga serwera aplikacji

Nie wymaga serwera aplikacji

Wydajność

Wydajność

Rozbudowany język zapytań

Rozbudowany język zapytań

background image

Podsumowanie

Podsumowanie

Technologia popularna ( ok. 1500 pobrań dziennie )

Technologia popularna ( ok. 1500 pobrań dziennie )

Prosta implementacja a efekt działania aplikacji

Prosta implementacja a efekt działania aplikacji

Więcej na

Więcej na

www.hibernate.org

www.hibernate.org

Literatura: „Hibernate in action” – wyd. Manning

Literatura: „Hibernate in action” – wyd. Manning


Document Outline


Wyszukiwarka

Podobne podstrony:
Hiberno English
2008 03 15 alrauna hibernate
Opracowanie MPR 1 11
Opracowanie MPR 21
MPR
05 Konfiguracja Hibernate(1)id 5724 ppt
06 Przykład wykorzystania Hibernateid 6375 ppt
labsag mpr
Windows Vista brak możliwości hibernacji, KOMPUTER - SERWIS - EDUKACJA, 02 Windows Vista
06 Przykład wykorzystania Hibernate(1)id 6376 ppt
Wyłączanie hibernacji w Windows Vista, KOMPUTER - SERWIS - EDUKACJA, 02 Windows Vista
Partycypacja społeczna i jej udział w przygotowywaniu Miejskiego Programu Rewitalizacji (MPR) w Pozn
zj hibernacji..pyt16, strunowce
10 Pozostałe elementy Hibernate(1)id 11016 ppt
Partycypacja społeczna i jej udział w przygotowywaniu Miejskiego Programu Rewitalizacji (MPR) w Pozn
MPR Kołeczkowy zespół wysiewający

więcej podobnych podstron