Spring – Ders 20 Spring & Hibernate & Oracle

Merhaba Arkadaslar,
Bu yazimda Spring ve Hibernate entegrasyonunu gerceklestirecegiz. Hibernate yazilarimda PostgreSQL ve MySQL kullanmistim burada Oracle ile uygulamamizi gerceklestirecegiz.
Asagidaki menu ile ilgili olarak ; http://www.injavawetrust.com/oracle-ders-1-kurulum/

Oncelikle Oracle da yeni bir kullanici olusturalim. ilk Oracle yazimda belirtigim gibi Application Express sekmesine gelelim, sifre sorarsa kullanici adi olarak sys sifre olarak Oracle yuklerken sordugu sifreyi yazalim.

Tum bilgileri springhibernate olarak yazdiktan sonra Create Workspace diyoruz ve islemi sonlandiriyoruz.

ders 20 oracle add user

Her sey yolundaysa SQL Developer ile baglantiyi gerceklestirelim.

ders 20 oracle sql developer

Gordugunuz gibi Status : Success , Connect diyip baglantimizi sagliyoruz. Oracle ile ilgili duzenlemelerimizi tamamladiktan sonra Eclipse’e gecebiliriz.

Projemize yeni dependency tanimlari ekleyecegiz , bunlar Hibernate ve OJDBC jarlari olacaktir.

Not: OJDBC ile ilgili ozel durum icin , http://www.injavawetrust.com/apache-maven-ders-8-add-jar-to-local-repository/

Hibernate yazilarimda asagida bulunan tum kavramlari aciklamistim. Burada en temel olacak sekilde @Entity , @Id ,  @GeneratedValue notasyonlarini kullandik. Kisaca deginecek olursak @Entitiy notasyonu tanimlandigi sinifin bir persistent POJO sinifi oldugunu belirtir, yani Hibernate e bu sinifin bir entity sinif oldugunu tanitiyoruz.

@Id notasyonu gereklidir ve kayitlar icin id bilgisini tutacagimiz degisken ile birlikte kullaniyoruz. @GeneratedValue ve strategy yapisi ile bir kural belirliyoruz ve otomatik olarak id degerinin artmasini istiyoruz. Hibernate ile ilgili bu kisa hatirlatmadan sonra konuyla ilgili daha fazla detay icin Hibernate yazilarimi inceleyebilirsiniz.
http://www.injavawetrust.com/hibernate/

Student.java

package erguder.levent._20.spring_hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Student {

	private int id;
	private String name;
	private int age;

	public Student () {

	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}

StudentDAO.java

package erguder.levent._20.spring_hibernate;

public interface StudentDAO {

	public void insertStudent(Student student);

	public void selectStudent(String name);

}

StudentDAO arabirimini uygulayalim ;

StudentDAOImp.java

package erguder.levent._20.spring_hibernate;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class StudentDAOImp implements StudentDAO {

	private HibernateTemplate hibernateTemplate;

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	}

	@Override
	public void insertStudent(Student student) {
		hibernateTemplate.save(student);
	}

	@Override
	public void selectStudent(String name) {
		System.out.println(hibernateTemplate.find("from Student p where p.name = ?", name));

	}
}

Bu ornegimizde Spring in bize sagladigi HibernateTemplate yapisini kullandik. Ilerleyen yazilarda farkli yapilar ile de ornekler yapacagiz.

HibernateTemplate sinifi referans degiskeni hibernateTemplate ile save ve find metotlarini kullaniyoruz. HibernateTemplate sinifinin yani sira HibernateDaoSupport sinifi da bulunmaktadir ilerleyen yazilarda bahsedecegiz.

  • save metoduna , student referans degiskenimizi gonderiyoruz ve bu sayede veritabanina kayit eklenmesini sagliyoruz.
  • find metodu icerisine basit bir sorgu yazdik ve metoda parametre olarak aldigimiz String name degerini veritabaninda sorguluyoruz. Burada kullanilan yapi SQL degil HQL yani Hibenate Query Language tir. Bu nedenle Select from kullanmiyoruz. HQL ile ilgili daha fazla detay icin ;
    http://www.injavawetrust.com/hibernate-ders-10-hibernate-queries-01/
  • find metodu geriye bir List dondurur ve bu List te Student objeleri yer almaktadir.Bu nedenle Student sinifinda toString metodunu override ettik ve ekrana anlamli bir cikti vermesini sagladik.

tutorial_20.xml
xml dosyamizi inceleyecek olursak ;
Onceki orneklerde yaptigimiz veritabani konfigurasyonunu burada da yapiyoruz. Ilgili driverClassName , url , username ve password alanini dolduruyoruz.

Sonrasinda wiring islemini ref ozelligini kullanarak gerceklestiriyoruz.

AnnotationSessionFactoryBean sinifini kullanarak bir SessionFactory elde ediyoruz. SessionFactory , Hibernate Sessionlarinin acilmasi, kapatilmasi ve yonetilmesinin kontrolunu gerceklestirir. Session , SesionFactoryden uretilir ve uygulama ile veritabanindaki islemi ifade eder.Session yardimiyla veritabanina baglanti saglanir veriler eklenir, cekilir.

AnnotationSessionFactoryBean i 3 tane property ile konfigure edebiliriz.

  • datasource property/ozelligine , tanimlamasini yaptigimiz DriverManagerDataSource beanin idsini veriyoruz.
  • annotatedClasses property/ozelligine @Entity notasyonu ile isaretledigimiz Student sinifimizi veriyoruz. Hibernate derslerinde yapmis oldugumum su yapiya denk gelmektedir;
 AnnotationConfiguration config = new AnnotationConfiguration();
 config.addAnnotatedClass(Student.class);
  • hibernateProperties property/ozelligi ile ek konfigurasyonlar yapiyoruz.
  1. hibernate.dialect ile Hibernate ilgili SQL formatini soyluyoruz Oracle veritabanini kullandigimiz icin Oracle10gDialect verebiliriz.
  2. hibernate.show.sql  konsolda hibernate islemlerinin loglanmasinda kullanilmaktadir.
  3. hibernate.hb2ddl.auto ve create yapisi ile otomatik olarak tablolarin olusmasini saglariz. Bu ozelligi Hibernate orneklerinde kullanmistik.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">

	<!-- Veritabani Konfigurasyonu -->
	<bean id="dataSourceId" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value ="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<property name="username" value="springhibernate"/>
		<property name="password" value="springhibernate"/>
	</bean>

	<bean id="studentDAOid" class="erguder.levent._20.spring_hibernate.StudentDAOImp">	
		<property name="sessionFactory" ref="hibernateSessionFactory"/>
	</bean>	

	<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSourceId"/>
		<property name="annotatedClasses">
			<list><value>erguder.levent._20.spring_hibernate.Student</value></list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">create</prop>
			</props>
		</property>
	</bean>

</beans>

Test sinifimizi calistiralim ve sonuclari gorelim ;

TestSpringHibernate.java

package erguder.levent._20.spring_hibernate;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpringHibernate {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("tutorial_20.xml");

		Student student = new Student("Levent Erguder", 24);

		StudentDAO studentDAO = (StudentDAO) context.getBean("studentDAOid");
		studentDAO.insertStudent(student);

		studentDAO.selectStudent("Levent Erguder");

	}

}

Student sinifindan bir referans degiskeni olusturuyoruz ve insertStudent metodumuza bu degiskenimizi gonderiyoruz. Boylece veritabanina bu kaydi eklemis oluruz.

selectStudent metoduna arguman olarak Levent Erguder verdik ve sorgulatiyoruz.

Uygulamamizi calistiralim ve sonuclari gorelim ;

spring hibernate

Resimde gordugumuz gibi Hibernate loglari konsola dustu ve sonrasinda selectStudent metodunda HQL sorgusu sonucu donen veri ekrana basildi.

SQL Developerda springhibernate kullanicisi olarak baglanti olarak baglanti olusturmustuk , burada select sorgumuzu calistirarak da ekledigimiz kaydi gorebiliriz;

sql sorgusu


Kaynak kodlar :SpringProject_v20
Yazimi burada sonlandiriyorum.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *