ORM & Hibernate Ahmet Demirelli SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu Sabancı Üniversitesi Bilişim Teknolojileri Yüksek Lisans Programı Seminerleri 2008
Hakkımızda SabancıÜniversitesi BT Yüksek Lisans Programı Yüksek Lisans Eğitimi Programlama (Java, JavaEE,.NET, C#,Php) Database (Oracle, MySQL,MSSQL, PL/SQL) Network (LAN,WAN, Router Configuration.etc) Sistem ve Network Güvenliği http://www.sabanciuniv.edu/mdbf/kcenter/tr/ Kurumsal Java eğitimleri http://www.sabanciuniv.edu/btem En yakın eğitim : SPRING ve HIBERNATE 15 Aralık 2008 (Ingilizce) Teknoloji danışmanlığı ve yazılım projeleri geliştime
Seminerin amacı Framework nedir ORM nedir Hazır ORM Frameworkleri Hibernate Perisitence Object Hibernate config Hibernate Mapping Database işlemleri - HQL JPA Örnek Uygulama Ajanda
Seminerin amacı Amaç
Framework Kolay uygulama geliştirme ortamı sunar Developer tarafından çokça yapılan ve zaman alan işleri kolaylaştırmak (db access,mvc..etc) I18n kolaylaştırır (UI tarafında) Uygulamanın büyümesini kolaylaştırmak Tek noktadan kontrolü sağlamak (xml config) Mevcut uygulamaya yeni bir işlem veya servis yazmak için izlenecek yol bellidir Her katman için yazılmış open source frameworkler var
ORM Frameworkleri ORM Frameworku nedir Object / Relational Mapping Sürekli olan DB ve SQL sorgulamaları (Uygulama kodlarının 1/3 ü DB erişimine yöneliktir) Veritabanından alınan bilgileri nesnelere dönüştürmek Java nesnelerimizi tablolara yazmak Transaction Management Performansı arttırır /bakımı kolaylaştırır DB erişim katmanına uygulama geliştiricilere kolaylık sağlar
Popüler ORM Frameworkleri ORM Frameworkleri Hibernate Toplink JPA OpenJPA...
Hibernate En popüler ORM framework Container dışında da kullanılabilir (Ornek: Swing uygulamaları) Son yıllardaki geliştirilen kurumsal uygulamaların genelde veri erişim katmanı olarak hibernate kullanırlar JPA standartı yayınlandıktan sonra yok olacağı düşünülebilir fakat JPA desteği olduğu için persistence provider hibernate kullanılabilir Çok fazla kabul gördüğü için JPA standartı geliştirilirken toplink ile beraber örnek alınmıştır
Örnek Uygulama Hibernate
Persistence Object Persistence Object veya Entity Persistence Object Ogrenci ogrencino ad soyad Veritabanında tablolarda saklanacak bilgilerin Java nesnesi olarak karşılığı POJO (Plain Old Java Objects) Bildigimiz java sınıfından başka bibirşey değil Table
Hibernate Konfigürasyon Dosyası hibernate.properties (text file) hibernate.cfg.xml (xml file)
Hibernate Konfigürasyon Dosyası
XML Mapping Hibernate tarafından yönetilmesini istediğimi her class için bir mapping (eşleştirme) gereklidir. Tablo lar ile Java Sınıfları (POJO) arasındaki eşleştirme bilgisini tutar Tek dosyada veya her mapping ayrı bir dosyada yapılabilir
XML Mapping Employee.java Employees Tablosu Employee.hbm.xml
Kod Kullanım Oturum Açma Configuration cfg = new Configuration(); cfg.configure(); SessionFactory sessionfactory = cfg.buildsessionfactory(); Session session = sessionfactory.opensession();
Kod Kullanım - Transaction Transaction tx = session.begintransaction(); //insert-update-delete işlemleri tx.commit();
Kod Kullanım - Select Department dept = (Department)session.get(Department.class, 1);
Kod Kullanım - Insert Employee e = new Employee(); e.setempname("ahmet"); e.setemplastname("demirelli"); e.setempdeptno(1); Transaction tx = session.begintransaction(); session.save(e); tx.commit();
Kod Kullanım - Update Employee emp = new Employee(); emp.setempno(1); emp.setempname("ali"); emp.setemplastname("desidero"); emp.setempdeptno(3); Transaction tx = session.begintransaction(); session.merge(emp); tx.commit();
Kod Kullanım - Delete Employee emp = (Employee)session.get(Employee.class, 17); Transaction tx = session.begintransaction(); session.delete(emp); tx.commit();
HQL Hibernate Query Language SQL benzeri bir sorgulama dili Istediğimiz herhangi bir sql sorgulaması yapabilmemiz için var String hql = "from Employee employees where empno>2"; Query query = session.createquery(hql); List l = query.list();
JPA Hibernate, Toplink ve JDO iyi yönleri alınmış ve ORM için standart bir persistence frameworkü için bir standartlar belirlemiştir. POJO temellidir (Herhangi bir class tan veya interface den türetilmek zorunda değildir) Sınıflar ve DB arasındaki eşleştirmeler Annotation lar kullanılarak tanımlanabildiği gibi XML ile de yapılabilir Persistence provider olarak Hibernate veya Toplink seçilebilir. Container bağımlı değildir (Yani bir application server a ihtiyaç duymaz)
SORULAR ahmetdemirelli@sabanciuniv.edu http://people.sabanciuniv.edu/ahmetdemirelli