30
Hibernate 1 1. Wprowadzenie. 2. Uruchomienie dostarczonego przykładu. 3. Własny przykład.

Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Hibernate

1

1. Wprowadzenie.

2. Uruchomienie dostarczonego przykładu.

3. Własny przykład.

Page 2: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Wprowadzenie

2

Hibernate (http://www.hibernate.org) jest narzędziem realizującym odwzorowanie

obiektów Javy na odpowiednie rekordy w relacyjnej bazie danych.

Hibernate uwalnia programistów od tworzenia większości kodu odpowiedzialnego

za komunikację z bazą danych i pozwala się skupić na logice biznesowej tworzonej

aplikacji. Ponadto biblioteka umożliwia pisanie programów w sposób niezależny od

konkretnej platformy baz danych.

Page 3: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

3

● załadować: http://www.hibernate.org/30.html i rozpakowanie archiwum,

● umieścić driver JDBC w podkatalogu lib,

● wyedytować plik etc/hibernate.properties, i ustawić parametry połączenia

z bazą danych:

...hibernate.dialect org.hibernate.dialect.MySQLDialect#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialecthibernate.connection.driver_class com.mysql.jdbc.Driverhibernate.connection.url jdbc:mysql://127.0.0.1/eghibernate.connection.username roothibernate.connection.password...

Page 4: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

4

● ustawić hibernate.show_sql=true w pliku hibernate.properties● z linii komend wewnątrz katalogu hibernate wydać polecenie ant eg,

● przejrzeć dane pojawiające się w konsoli,

● przejrzeć źródła w podkatalogu eg.

Page 5: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Własny przykład

5

ordersorders

odr_id

odr_date

contractorscontractors

con_id

con_name

con_address

Page 6: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Struktura przykładu

6

+src+data

Contractor.javaContractorManager.javaContractor.hbm.xmlOrder.javaOrderManager.javaOrder.hbm.xml

+utilHibernateUtil.java

Example.javahibermate.cfg.xmllog4j.properties

Page 7: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Contractor.java

7

package data;import java.util.HashSet;import java.util.Set;

public class Contractor {private int id;private String name;private String address;private Set orders = new HashSet();

public Contractor(){ // pusty konstruktor

}

Page 8: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Contractor.java

8

public void setId(int id) {this.id = id;

}public int getId() {

return this.id;}public void setName(String name) {

this.name = name;}public String getName() {

return this.name;}

Page 9: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Contractor.java

9

public void setAddress(String address) {this.address = address;

}public String getAddress() {

return this.address;}public void setOrders(Set orders) {

this.orders = orders;}public Set getOrders() {

return this.orders;}

}

Page 10: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Contractor.hbm.xml

10

Pliki hbm.xml służą do zdefiniowania odwzorowania relacyjno-obiektowego:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>

<class name="data.Contractor" table="contractors"><id name="id" column="con_id">

<generator class="native"/></id>

Page 11: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Contractor.hbm.xml

11

<property name="name" column="con_name"/><property name="address" column="con_address"/><set name="orders" inverse="true">

<key column="con_id"/><one-to-many class="data.Order"/>

</set></class>

</hibernate-mapping>

Page 12: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Order.java

12

...public class Order {

private int id;private Date date;private Contractor contractor;

public Order(){ // pusty konstruktor }public void setId(int id) {

this.id = id;}public int getId() {

return this.id;}

...}

Page 13: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Order.hbm.xml

13

...<hibernate-mapping>

<class name="data.Order" table="orders"><id name="id" column="odr_id">

<generator class="native"/></id><property name="date" type="date" column="odr_date"/><many-to-one name="contractor" column="con_id"

class="data.Contractor" /></class>

</hibernate-mapping>

Page 14: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Struktura przykładu

14

+src+data

Contractor.javaContractor.hbm.xmlOrder.javaOrder.hbm.xmlContractorManager.javaOrderManager.java

+utilHibernateUtil.java

Example.javahibermate.cfg.xmllog4j.properties

Page 15: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

ContractorManager.java

15

Plik ContractorManager.java zawiera definicję operacji związanych z obiektem

Contractor:...public class ContractorManager {

public void create(String sName, String sAddress) {Session session = HibernateUtil.getSessionFactory().

getCurrentSession();session.beginTransaction();Contractor c = new Contractor();c.setName(sName);c.setAddress(sAddress);session.save(c);session.getTransaction().commit();

}

Page 16: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

ContractorManager.java

16

public Contractor load(int id) {Session session = HibernateUtil.getSessionFactory().

getCurrentSession();session.beginTransaction();Contractor c = (Contractor) session.load(

Contractor.class, new Integer(id));session.getTransaction().commit();return c;

}}

Page 17: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

HibernateUtil.java

17

W pliku HibernateUtil.java zawarto kod inicjujący bibliotekę Hibernate.

package util;

import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;

public class HibernateUtil {private static final SessionFactory sessionFactory;

Page 18: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

HibernateUtil.java

18

static {try {

// inicjalizacja na podstawie konfiguracji z pliku// hibernate.cfg.xmlsessionFactory = new Configuration().configure().

buildSessionFactory();} catch (Throwable ex) {

System.err.println("failure " + ex);throw new ExceptionInInitializerError(ex);

}}public static SessionFactory getSessionFactory() {

return sessionFactory; }}

Page 19: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Struktura przykładu

19

+src+data

Contractor.javaContractor.hbm.xmlOrder.javaOrder.hbm.xmlContractorManager.javaOrderManager.java

+utilHibernateUtil.java

Example.javahibermate.cfg.xmllog4j.properties

Page 20: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Example.java

20

public class Example {public static void main(String[] args) {

ContractorManager cm = new ContractorManager();if (args[0].equals("create")) {

Contractor c1, c2;cm.create("Adam", "Lesna 11/3");cm.create("Tomasz", "Zielona 123/65");cm.create("Pawel", "Krotka 6");c1 = cm.load(1); c2 = cm.load(2);OrderManager om = new OrderManager();om.create(c1);om.create(c2);om.create(c1);

}

Page 21: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Example.java

21

else if (args[0].equals("print")) {Order o;Session session = HibernateUtil.getSessionFactory().

GetCurrentSession();session.beginTransaction();List l = session.createQuery(

"from Contractor").list();for (int i = 0; i < l.size(); i++) {

Contractor c = (Contractor) l.get(i);System.out.println("Contractor:");System.out.println(String.valueOf(c.getId()) +

", " + String.valueOf(c.getName()) + ", " + String.valueOf(c.getAddress()));

Page 22: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Example.java

22

for( Iterator it = c.getOrders().iterator();it.hasNext(); ){

o = (Order) it.next();System.out.println("Order: " +

String.valueOf(o.getId()) + ", " + o.getDate());

}}session.getTransaction().commit();

}HibernateUtil.getSessionFactory().close();

}}

Page 23: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Hibernate.cfg.xml

23

Plik hibernate.cfg.xml określa konfigurację biblioteki Hibernate:

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration><session-factory>

<property name="connection.driver_class">com.mysql.jdbc.Driver

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

jdbc:mysql://localhost/example</property>

Page 24: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Hibernate.cfg.xml

24

<property name="connection.username">root</property><property name="connection.password"></property><property name="connection.pool_size">1</property><property name="dialect">

org.hibernate.dialect.MySQLDialect</property><property name="current_session_context_class">

thread</property><property name="cache.provider_class">

org.hibernate.cache.NoCacheProvider</property>

Page 25: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Hibernate.cfg.xml

25

<property name="show_sql">true</property><property name="hbm2ddl.auto">create</property><mapping resource="data/Contractor.hbm.xml"/><mapping resource="data/Order.hbm.xml"/>

</session-factory></hibernate-configuration>

Page 26: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

26

Niezbędne biblioteki:antlr.jarasm.jarasm-attrs.jarscglib.jarcommons-collections.jarcommons-logging.jardom4j.jarhibernate3.jarjta.jarlog4j.jarmysql-connector-java-3.1.8 pierwsze uruchomienie spowoduje utworzenie odpowiednich tabel:java -cp [biblioteki] Example create

Page 27: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

27

...08:35:52,777 INFO Configuration:1308 - configuring from resource: /hibernate.cfg.xml...08:35:52,924 INFO Configuration:469 - Reading mappings from resource: data/Contractor.hbm.xml08:35:53,083 INFO HbmBinder:309 - Mapping class: data.Contractor -> contractors08:35:53,144 INFO Configuration:469 - Reading mappings from resource: data/Order.hbm.xml08:35:53,207 INFO HbmBinder:309 - Mapping class: data.Order -> orders...08:35:53,329 INFO HbmBinder:2349 - Mapping collection: data.Contractor.orders -> orders...08:35:53,360 INFO DriverManagerConnectionProvider:80 - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/example08:35:53,361 INFO DriverManagerConnectionProvider:86 - connection properties: {user=root, password=****}

Page 28: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

28

...08:35:55,199 DEBUG SchemaExport:301 - create table contractors (con_id integer not null auto_increment, con_name varchar(255), con_address varchar(255), primary key (con_id))08:35:55,205 DEBUG SchemaExport:301 - create table orders (odr_id integer not null auto_increment, odr_date date, con_id integer, primary key (odr_id))08:35:55,213 DEBUG SchemaExport:301 - alter table orders add index FKC3DF62E5B8CC0851 (con_id), add constraint FKC3DF62E5B8CC0851 foreign key (con_id) references contractors (con_id)...Hibernate: insert into contractors (con_name, con_address) values (?, ?)Hibernate: insert into contractors (con_name, con_address) values (?, ?)Hibernate: insert into contractors (con_name, con_address) values (?, ?)Hibernate: insert into orders (odr_date, con_id) values (?, ?)Hibernate: insert into orders (odr_date, con_id) values (?, ?)Hibernate: insert into orders (odr_date, con_id) values (?, ?)08:35:55,740 INFO SessionFactoryImpl:729 - closing08:35:55,744 INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:mysql://localhost/example

Page 29: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Uruchomienie przykładu

29

Drugie uruchomienie programu:● z pliku hibernate.cfg.xml usuwamy element:

<property name="hbm2ddl.auto">create</property>● java -cp [biblioteki] Example printHibernate: select contractor0_.con_id as con1_0_, contractor0_.con_name as con2_0_, contractor0_.con_address as con3_0_ from contractors contractor0_Contractor:1, Adam, Lesna 11/3Hibernate: select orders0_.con_id as con3_1_, orders0_.odr_id as odr1_1_, orders0_.odr_id as odr1_1_0_, orders0_.odr_date as odr2_1_0_, orders0_.con_id as con3_1_0_ from orders orders0_ where orders0_.con_id=?Order: 3, 2006-04-11Order: 1, 2006-04-11Contractor:...

Page 30: Hibernate - Jagiellonian Universityusers.uj.edu.pl/~ciesla/java/java_10.pdfustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate

Podsumowanie

30

Hibernate jest obecnie standardem w dziedzinie ORM. Biblioteka ta jest

odpowiedzialna za zarządzanie trwałymi obiektami w ramach technologii JEE.

Istnieje także jej wersja dla środowiska .NET.