3.1 Hibernate ve Veritabanlarını Bağlama
Hibernate'i Maven kullanarak uygulamamıza nasıl bağlayacağımızı ve açıklamaları kullanarak tabloları sınıflarla nasıl eşleştireceğimizi öğrendik. Ve şimdi bir sonraki soru ortaya çıkıyor - nesneleri veritabanından nasıl okuyacağız veya onları oraya nasıl kaydedeceğiz?
Çok hızlı değil. Her şeyden önce, üç şeyle daha uğraşmanız gerekiyor:
- Veritabanı bağlantısını yapılandırma
- Hazırda Bekletmeyi ayarlama
- EntityManager ile çalışmak

Hazırda bekletme, veritabanıyla çalışmayı uygulamanızdan tamamen gizler, ancak aşırılıkları önlemek için doğru şekilde yapılandırılması gerekir. Bu aşamayı atlayamazsınız - aksi halde Hazırda Bekletme, nesneleri hangi veritabanına kaydedeceğini nasıl bilecek?
Hazırda Bekletme üç şekilde yapılandırılabilir ve veritabanı bilgileri verilebilir
- Özellikler dosyasını kullan
- hibernate.cfg.xml dosyasını kullanın
- Yapılandırma çekirdeği yöntemlerini kullanın
Ve en çok sonuncuyu sevsem de, kesinlikle üçüyle de karşılaşacaksınız, o yüzden burada üçünü de inceleyeceğiz.
3.2 Veritabanında yetkilendirme
En önemli veritabanı bağlantılarıyla başlayalım. Bunu yapmak için, Hibernate'in istenen veritabanında oturum açabilmesi için veri sağlamanız gerekecektir.
Özellikler Dosya Yapılandırması |
---|
hazırda bekletme özellikleri |
|
Aynı ayarlar bir xml dosyası biçiminde de ayarlanabilir:
XML Tabanlı Yapılandırma |
---|
hibernate.cfg.xml |
|
Her iki örnekte de aynı ayarları aynı değerlerle görüyoruz. Sadece ilk örnek onları bir özellikler dosyası olarak , ikincisi ise bir xml dosyası olarak temsil ediyor .
Bu ayarlar üç gruba ayrılır:
- VTYS türünü belirtin
- Lehçeyi (DBMS türü) belirtin, örneğin Oracle 9.0
- Bu DBMS ile çalışmak için JDBC sürücüsünün adını belirtin
- Veritabanında yetkilendirme için verileri belirtin
- veritabanı url'si
- Kullanıcı adı
- şifre
- Hazırda Bekleme Motorunu Yapılandırma
hibernate.show_sql
- Hazırda bekletme, yürüttüğü tüm istekleri konsolda çoğaltırhbm2ddl.auto
- Hazırda bekletme, gerekirse veritabanı yapısını değiştirir
Yapılandırmayı ayarlamanın üçüncü bir yolu vardır - bölmeler aracılığıyla. Genellikle Spring ile birlikte kullanılır, bu yüzden SpringFramework'ü öğrendiğimizde ona bakacağız.
3.3 SessionFactory'yi Alın
Bir sonraki adım, SessionFactory nesnesini elde etmektir. Bunu yapmanın birkaç yolu vardır:
İlk yol hibernate.properties dosyasını kullanmaktır .
Bunu yapmak için aşağıdaki kodu yazmanız yeterlidir:
SessionFactory sessionFactory = new Configuration().buildSessionFactory();
Hibernate.properties dosyası geçerli proje dizininde bulunmazsa, bir istisna atılır.
İkinci yol ise hibernate.cfg.xml kullanarak yapılandırmadır .
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Böyle bir kod yazarsanız, hibernate.cfg.xml
. Böyle bir dosya bulunamazsa, yöntem buildSessionFactory()
bir istisna atar.
Üçüncü yol, yapılandırma dosyasını manuel olarak ayarlamaktır .
Bazen geliştirme sürecinde bir test tabanına geçmek veya bazla çalışmak için diğer bazı ayarları değiştirmek gerekli hale gelir, bunun için yapılandırma dosyasını manuel olarak ayarlayabilirsiniz:
SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();
Dördüncü yöntem - özel bir hibernate.properties dosyası kullanıyoruz:
ClassLoader classLoader = Thread.currentThread().getClassLoader();
Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));
SessionFactory sessionFactory = new Configuration()
.addProperties(properties)
.buildSessionFactory();
Ve son olarak, gerekli tüm parametreleri doğrudan koda dikebilirsiniz:
Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/supershop");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "password");
SessionFactory sessionFactory = new Configuration()
.setProperties(properties)
.buildSessionFactory();
3.4 Entity sınıflarının nerede aranacağını belirtin
Ama hepsi bu kadar değil. Hibernate'de bir SessionFactory nesnesi yapılandırdığımızda , bu SessionFactory, veritabanında gerekli sütun tipleriyle gerekli tüm tabloların var olup olmadığını kontrol eder.
Ve SessionFactory'nin bunu yapabilmesi için , veritabanına eşlemesi gereken varlık sınıflarının bir listesini geçirmesi gerekir.
Varlık sınıfları listesini geçirmenin üç yolu vardır:
Birinci yöntem. hibernate.cfg.xml
Şunun gibi bir satır ekleyin :
<mapping class="class-qualified-name" />
Örnek:
<mapping class="com.codegym.data.User" />
<mapping class="com.codegym.data.Employee" />
<mapping class="com.codegym.data.Task" />
İkinci yöntem. Configuration nesnesindeki yöntemi çağırın addAnnotatedClass()
. Örnek:
SessionFactory sessionFactory = new Configuration()
.configure()
.addAnnotatedClass(com.codegym.data.User.class)
.buildSessionFactory();
Çok sayıda sınıf varsa, bunları tüm paketlere ekleyebilirsiniz:
SessionFactory sessionFactory = new Configuration()
.configure()
.addPackage("com.codegym.data")
.buildSessionFactory();
3.5 Son örnek
SessionFactory nesnesini nasıl yapılandıracağımızı öğrendiğimize göre, onu kullanacak kodu yazalım.
Üç yöntemden oluşacaktır:
- Hazırda Bekletmeyi Yapılandırma
- Tüm çalışanları veri tabanından alan yöntem
- Yeni bir çalışanı veritabanına kaydeden yöntem
Bu kod şablonu şuna benzer:
class EmployeeManager {
private SessionFactory sessionFactory;
public void class init() {
this.sessionFactory = new Configuration()
.configure()
.buildSessionFactory();
}
public List<Employee> getAllEmployes() {
try (Session session = sessionFactory.openSession()) {
Query<Employee> query = session.createQuery("from Employee", Employee.class);
return query.list();
}
}
public void addEmployee(Employee employee ) {
try (Session session = sessionFactory.openSession()) {
Transaction transaction = session.beginTransaction();
session.save(employee);
transaction.commit();
}
}
}
Veritabanına bir sorgu yürütmeden önce ayrı bir oturum oluşturmanız gerekir. İstekler ilişkiliyse, aynı oturumda yürütülebilirler. İstekler ilgisizse (ve aralarında birkaç dakika geçebilir), o zaman kendi oturumlarını yapmaları gerekir.
Veritabanından veri okumak veya karmaşık bir sorgu yürütmek istiyorsanız, önce bir Sorgu nesnesi oluşturmalı ve sorgunuzu yürütmek için onu kullanmalısınız.
Ayrıca, veritabanına yapılan her sorgu kendi işleminde yürütülür. Açmanız, gerekli işlemleri yapmanız ve ardından kapatmanız (commit) gerekir.
Sonraki derslerde, tüm bunların nasıl çalıştığını daha ayrıntılı olarak analiz edeceğiz.
GO TO FULL VERSION