Sławomir Civic Białek HIBERNATE
2 Plan prelekcji ● Czym jest Hibernate ● Konfiguracja i uruchomienie ● Najważnejsze klasy ● Klasy obiektów przechowywanych w bazie ● Podstawowe operacje ● Relacje ● Zapytania ● Co dalej?
3 Czym jest Hibernate ● ORM (Object-Relational Mapping) ● LGPL ● Java (oraz.NET) ● Plain Old Java Objects (POJO) ● Hibernate vs EJB3, JPA ● Pakiety: ● Core ● Annotations ● Tools ● (Entity Manager)
4 Czym jest Hibernate Źródło:
5 Czym jest Hibernate ● Dialekty: ● DB2 ● PostgreSQL ● MySQL ● Oracle ● Sybase ● MS SQL ● SAP DB ● Hypersonic SQL ● Interbase, Firebird
6 Konfiguracja i uruchomieni ● Wymagane: ● antlr.jar ● dom4j.jar ● commons-collections.jar ● javassist.jar ● jta.jar ● ejb3-persistence.jar ● slf4j-api.jar ● logback-core.jar ● logback-classic.jar ● hibernate3.jar (hibernate-core.jar) ● hibernate-annotations.jar ● hibernate-commons-annotations.jar ● postgresql jdbc4.jar
7 Konfiguracja i uruchomienie <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" " org.postgresql.Driver jdbc:postgresql://localhost/jWAF postgres password org.hibernate.dialect.PostgreSQLDialect thread false create
8 Konfiguracja i uruchomienie ● Logowanie: false ${log.dir}/hibernate.log %date %level [%thread] %logger{10} [%file : %line] %msg%n ${log.arch.dir}/hibernate-%d{yyyy-MM-dd}.log
9 Konfiguracja i uruchomienie ● Logowanie:
10 Najważniejsze klasy ● AnnotationConfiguration / Configuration ● configure() ● buildSessionFactory() ● SessionFactory ● getCurrentSession() / openSession() ● Session ● beginTransaction() / getTransaction() ● Transaction ● begin() / commit() / rollback() ● Query / SQLQuery
11 Klasy POJO package model; import javax.persistence.*; import public class Uzytkownik { private long id; private String ; private String imie; private String nazwisko; private Set wiadomosciOd; private public long getId() { return id; } public void setId(long id) { this.id = id; public String get () { return ; } public void set (String ) { this. = ; public String getImie() { return imie; } public void setImie(String imie) {this.imie = imie; public String getNazwisko() { return nazwisko; } public void setNazwisko(String nazwisko) { this.nazwisko = nazwisko; = "uzytkownikOd") public Set getWiadomosciOd() { return wiadomosciOd; } public void setWiadomosciOd(Set wiadomosciOd) { this.wiadomosciOd = wiadomosciOd; = "uzytkownikDo") public Set getWiadomosciDo() { return wiadomosciDo; } public void setWiadomosciDo(Set wiadomosciDo) { this.wiadomosciDo = wiadomosciDo; } }
12 Klasy POJO package model; import java.util.Date; import javax.persistence.*; import public class private long (fetch=FetchType.LAZY) private Uzytkownik (fetch=FetchType.LAZY) private Uzytkownik private Date private String private String tresc; public long getId() { return id; } public void setId(long id) { this.id = id; } public Date getDateTime() { return dateTime; } public void setDateTime(Date dateTime) { this.dateTime = dateTime; } public String getTemat() { return temat; } public void setTemat(String temat) { this.temat = temat; } public String getTresc() { return tresc; } public void setTresc(String tresc) { this.tresc = tresc; } public Uzytkownik getUzytkownikOd() { return uzytkownikOd; } public void setUzytkownikOd(Uzytkownik uzytkownikOd) { this.uzytkownikOd = uzytkownikOd; } public Uzytkownik getUzytkownikDo() { return uzytkownikDo; } public void setUzytkownikDo(Uzytkownik uzytkownikDo) { this.uzytkownikDo = uzytkownikDo; } }
13 Podstawowe operacje sessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = factory.getCurrentSession(); Transaction t = session.beginTransaction(); ///..... t.commit(); Uzytkownik user1 = new Uzytkownik(); user1.setImie(“...”); user1.setNazwisko(“...”); user1.set (“...”); session.save(user1);
14 Podstawowe operacje Uzytkownik user = (Uzytkownik)session.get(Uzytkownik.class, (long)1); session.delete(user); Uzytkownik user = (Uzytkownik)session.get(Uzytkownik.class, (long)1); user.save(); Uzytkownik user1 = (Uzytkownik)session.get(Uzytkownik.class, (long)1); Uzytkownik user2 = (Uzytkownik)session.get(Uzytkownik.class, (long)2); Wiadomosc msg = new Wiadomosc(); msg.setTresc(“.....”); msg.setUzytkownikOd(user1); msg.setUzytkownikDo(user2); session.save(msg);
15 Zapytania ● Nawigacja po obiektach ● Uzytkownik od = wiadomosc.getUzytkownikOd() ● Wg klucza ● Wiadomosc msg = (Wiadomosc)session.get(Wiadomosc.class, (long)1); ● Hibernate Query Language (HQL) ● Hibernate Criteria API ● natywny SQL
16 Zapytania - HQL String queryString = "from Uzytkownik user where user. like :searchString"; List result = session.createQuery(queryString).setString("searchString", String queryString = "from Wiadomosc w where w.uzytkownikOd = :user"; List Result = session.createQuery(queryString).setEntity("user", user1).list(); String queryString = "from Wiadomosc w where w.uzytkownikOd = :user"; List result = session.createQuery(queryString).setParameter( "user", user1, Hibernate.entity(Uzytkownik.class) ).list(); ● Można stosować: operatory SQL, złączenia, agregacje, grupowanie. ● Nazwy klas, a nie tabel itd.
17 Zapytania – Criteria API session.createCriteria(Uzytkownik.class); Criterion Eq = Expression.eq(" ", Criteria crit = session.createCriteria(Uzytkownik.class); crit.add( Eq); User user = (User) crit.uniqueResult(); session.createCriteria(Uzytkownik.class).add( Expression.isNull(" ") ).list(); Criteria crit = session.createCriteria(Uzytkownik.class).add( Expression.and( Expression.like("imie", "A%"), Expression.in("nazwisko", nazwiska) ).addOrder( Order.asc("nazwisko") ).addOrder( Order.asc("imie") ).;
18 Co dalej? ● ● Hibernate In Action ● Transakcje ● Polimorfizm ● Optymalizacja ● Cache'owanie