Spring – Ders 21 Spring & Hibernate & Oracle – 02

Merhaba Arkadaslar,
Bu yazimda bir onceki yazida oldugu gibi yine Spring ve Hibernate entegrasyonunu gerceklestirecegiz. Bir onceki ornekte HibernateTemplate sinifini kullanmistik. HibernateTemplate sinifi Hibernate Sessionlarini yonetmek ve veritabanina Hibernate araciligi ile erismek/(via access) ten sorumludur.

Burada ise bir baska yaklasim olarak HibernateDaoSupport sinifini kullanacagiz.
HibernateDaoSupport sinifini ,  HibernateTemplate sinifinin wrapper sinifi olarak dusunebiliriz, yani daha gelismis halidir.

Employee.java

package erguder.levent._21.spring_hibernate._02;

public class Employee {

	private int id;
	private String name;
	private String surname;
	private int salary;

        // getter setter methods

	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + ", surname=" + surname + ", salary=" + salary + "]";
	}

}

Employee , POJO sinifimizi olusturduk ve gerekli getter/setter metotlariyla toString() metodunu override halini sinimiza ekledik.Bir onceki ornekte notasyon ile entity sinif tanimi yapmistik burada ise xml dosyasi ile bu tanimlamayi yapalim.

Bunun icin projemizde paketimizin uzerine sag tiklayalim —> New —> Other –> Hibernate XML mapping file (hbm.xml) secenegini secip next diyelim.Sonrasinda next finish dedigimizde Eclipse bizim icin Employee.hbm.xml dosyasini olusturacaktir.

hibernate xml mapping

Employee.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Aug 8, 2013 1:48:43 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="erguder.levent._21.spring_hibernate._02.Employee" table="EMPLOYEE">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="surname" type="java.lang.String">
            <column name="SURNAME" />
        </property>
        <property name="salary" type="int">
            <column name="SALARY" />
        </property>
    </class>
</hibernate-mapping>

DAO interface yapimizi tanimlayalim ;

EmployeeDao.java

public interface EmployeeDao {

	void hire(Employee emp);

	void updateInfo(Employee emp);

	void discharge(Employee emp);

	Employee findByName(String name);
}

Arabirimimiz uygulayalim ;
EmployeeDaoImpl sinifimizda EmployeeDao arabimini uygulayacagiz ve HibernateDaoSupport sinifindan kalitacagiz.

EmployeeDaoIm.java

package erguder.levent._21.spring_hibernate._02;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {

	@Override
	public void hire(Employee emp) {
		getHibernateTemplate().save(emp);

	}

	@Override
	public void updateInfo(Employee emp) {
		getHibernateTemplate().update(emp);

	}

	@Override
	public void discharge(Employee emp) {
		getHibernateTemplate().delete(emp);

	}

	@Override
	public Employee findByName(String name) {
		List list = getHibernateTemplate().find("from Employee where name=?", name);
		return (Employee) list.get(0);
	}

}

Burada dikkat edersek getHibernate() metodunu cagirdiktan sonra zincirleme olarak save, update, delete ve find metotlarini cagiriyoruz.

HibernateDaoSupport sinifini inceledigimizde , getHibernateTemplate metodunun HibernateTemplate turunden bir referans degiskeni dondurdugunu gorebiliriz.

	public final HibernateTemplate getHibernateTemplate() {
	  return this.hibernateTemplate;
	}

xml konfigurasyon dosyamizi inceleyelim ;

tutorial_21.xml

<?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="empDaoId" class="erguder.levent._21.spring_hibernate._02.EmployeeDaoImpl">
		<property name="sessionFactory" ref="hibernateSessionFactory" />
	</bean>

	<bean id="hibernateSessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSourceId" />

		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.hbm2ddl.auto">create</prop>
			</props>
		</property>

		<property name="mappingResources">
			<list>
				<value>/erguder/levent/_21/spring_hibernate/_02/Employee.hbm.xml
				</value>
			</list>
		</property>
	</bean>

</beans>

Bir onceki ornekte kullandigimiz xml konfigurasyon yapimizi burada da kullaniyoruz. Burada bir onceki ornekten farkli olarak SessionFactory olusturmak icin, AnnotationSessionFactoryBean yerine LocalSessionFactoryBean kullandik.
AnnotationSessionFactoryBean sinifi LocalSessionFactoryBean  nin alt sinifidir. AnnotationSessionFactoryBean sinifi hem xml konfigurasyonuna hem annotation konfigurasyonuna izin verir.

Bu ornegimizde Employee sinifimizin , entity tanimlamasini xml ile yaptigimiz icin (Employee.hbm.xml) aslinda iki sinifi da kullanabiliriz.

Emloyee.hbm.xml dosyamizi ise Spring e  mappingResource ozelligini/property kullanarak tanitiyoruz ve dosyamizin bulundugu dizini veriyoruz.

		<property name="mappingResources">
			<list>
				<value>/erguder/levent/_21/spring_hibernate/_02/Employee.hbm.xml
				</value>
			</list>
		</property>

Diger konfigurasyonlar ile ilgili bilgiler bir onceki yazida verilmisti.

SpringHibernateTest.java

package erguder.levent._21.spring_hibernate._02;

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

public class SpringHibernateTest {
	public static void main(String[] args) {
		ApplicationContext appContext = new ClassPathXmlApplicationContext("tutorial_21.xml");

		EmployeeDao empDao = (EmployeeDao) appContext.getBean("empDaoId");

		// insert record
		// kayit ekleyelim

		Employee emp = new Employee();
		emp.setId(1);
		emp.setName("Levent");
		emp.setSurname("Erguder");
		emp.setSalary(10000);
		empDao.hire(emp);

		Employee emp2 = new Employee();
		emp2.setId(2);
		emp2.setName("Burak");
		emp2.setSurname("Okumus");
		emp2.setSalary(20000);
		empDao.hire(emp2);

		// select
		// kaydi sorgulayalim
		Employee emp3 = empDao.findByName("Levent");
		System.out.println(emp3);

		// update
		// guncelleme islemi yapalim
		emp3.setSalary(15000);
		empDao.updateInfo(emp3);
		System.out.println(emp3);

		// delete
		// silme islemi yapalim
		empDao.discharge(emp3);

	}
}

Test sinifimizi inceleyecek olursak ;
2 tane Employee sinifindan referans degisken olusturyoruz ve gerekli deger atamalarini yapiyoruz.

hire metodunu yeni kayit eklemek icin kullaniyorduk.
findByName metoduna Levent argumanini veriyoruz ve sorgulama islemini gerceklestiriyoruz.
setSalary metodu guncelleme islemi yapmaktadir. Burada maas bilgisini guncelliyoruz.
discharge metodunda kayit silme islemini gerceklestiriyoruz.

Ornegimizi calistirip sonuclari inceleyelim fakat ilk olarak update ve delete islemini yorum satiri haline getirelim ve adim adim inceleyelim.

Veritabanimizi inceledigimizde kayitlarin basariyla eklendigini goruyoruz ;

db query

Cikti olarak da ismi Levent olan kaydin bilgisini getirdigimiz icin ;

Employee [id=1, name=Levent, surname=Erguder, salary=10000]

update islemini yapmak icin ilgili yorum satirini kaldiralim  ve tekrar calistiralim;

db query2

update islemi gerceklesti ve update islemi sonrasi ekrana ikinci bir cikti daha yazdirdigimiz icin

Employee [id=1, name=Levent, surname=Erguder, salary=10000]

Employee [id=1, name=Levent, surname=Erguder, salary=15000]

silme islemini gerceklestirmek icin yorum satirini kaldiralim ve tekrar calistiralim ;

db query3

Employee [id=1, name=Levent, surname=Erguder, salary=10000]
Employee [id=1, name=Levent, surname=Erguder, salary=15000]

Sonuc olarak once 2 adet kayit eklendi  , sonra guncelleme gerceklesti, sonrasinda ise ilgili kayit silindi.

Maven Project :SpringProject_v21
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 *