Spring – Ders 22 Spring & Hibernate & PPC

Merhaba Arkadaslar,
Onceki yazilarda Spring+Hibernate+Oracle uygulamasi yapmistik. Bu yazida ise Spring’in bize saglamis oldugu PropertyPlaceholderConfigurer sinifini kullanarak farkli veritabanlarina properties dosyasi yardimi ile baglanmayi inceleyecegiz.

Oncelikle yeni bir properties dosyasi olusturalim; dbConnection.properties ve icerigi su sekilde olacak ;

dbConnection.properties

#Oracle 11 G Connection
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=springhibernate
jdbc.password=springhibernate
hibernate.dialect=org.hibernate.dialect.OracleDialect

#MYSQL Connection

#jdbc.driverClassName=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/springhibernate
#jdbc.username=root
#jdbc.password=
#hibernate.dialect=org.hibernate.dialect.MySQLDialect

#PostgreSQL Connection

#jdbc.driverClassName=org.postgresql.Driver
#jdbc.url=jdbc:postgresql://localhost:5432/springhibernate
#jdbc.username=postgres
#jdbc.password=SIFRENIZ
#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

#Hibernate Properties
hibernate.hbm2ddl.auto=create
#hibernate.hbm2ddl.auto=update

Dosyamizda Oracle, MySQL ve PostgreSQL icin baglanti ayarlari yer almaktadir. Siz dilerseniz farkli veritabanlari icin de benzer bilgileri ekleyerek ve ilgili “jari” pom.xml araciligiyla ya da elle(manuel) projenize ekleyerek kullanabilirsiniz. Burada “#” isareti yorum satiri anlamina gelmektedir. Bu hali ile gecerli olan ayarlar Oracle’a baglanacaktir.

Bu projemizde PostgreSQL i daha once kullanmadigimiz icin gerekli jari kullanabilmek icin pom.xml dosyamizda dependecy tanimini gerceklestirelim.

<dependency>
	<groupId>postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<version>9.1-901.jdbc4</version>
</dependency>

Bu yazimizda bir onceki yazida kullandigimiz siniflari kullanacagiz bu nedenle paketi oldugu gibi kopyalayip yeni isim verdim. Tabi Employee.hbm.xml dosyamizda ufak bir degisiklik yaptik.

class name="erguder.levent._22.PropertyPlaceholderConfigurer.Employee" table="EMPLOYEE">

Ayrica SpringHIberneTest sinifimiz artik tutorial_21.xml degil tutorial_22.xml dosyasini kullanacak. Bu kucuk degisiklikler yeterli olacaktir.

ApplicationContext appContext = new ClassPathXmlApplicationContext("tutorial_22.xml");

tutorial_22.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 ">

	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>dbConnection.properties</value>
		</property>
	</bean>

	<!-- Veritabani Konfigurasyonu -->
	<bean id="dataSourceId"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<bean id="empDaoId"
		class="erguder.levent._22.PropertyPlaceholderConfigurer.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">${hibernate.dialect}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
			</props>
		</property>

		<property name="mappingResources">
			<list>
				<value>
	/erguder/levent/_22/PropertyPlaceholderConfigurer/Employee.hbm.xml
				</value>
			</list>
		</property>
	</bean>

</beans>

tutorial_22.xml dosyamizi inceledigimizde yeni bir bean taniminda bulunduk ;

	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>dbConnection.properties</value>
		</property>
	</bean>

PropertyPlaceholderConfigurer sinifi yardimi ile properties dosyamizi Spring’e tanittik.

Bir onceki yazida Oracle icin konfigurasyon su sekildeydi ;

  <!-- Veritabani Konfigurasyonu -->
    <bean id="dataSourceId"
       >
        <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>

Incelemeye devam edecek olursak properties dosyamizda yer alan alanlara ${} ifadesi yardimi ile ulastigimizi gorebiliriz.

	<bean id="dataSourceId"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

Benzer sekilde hibernate konfigurasyonu icin ayni yapiyi kullandik ;

		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
			</props>
		</property>

Burada ${propertiesDosyasindakiKarsilik} eslesmesini dogru sekilde yapmamiz gerekir ki ilgili alana ulasabilelim.

Ornegimizi calistirdigimizda bir onceki ornekte oldugu gibi Oracle uzerinde islemlerimiz gerceklesecektir.
Tablomuz basariyla olustu , bir onceki ornekten hatirlayacagimiz gibi 2 kayit ekledik,once birini guncelledik sonrasinda silme islemi gerceklestirdik sonuc olarak 1 kayit kaldi.

oracle1

Simdi de ayni uygulamamizi MySQL uzerinde calistiralim, bunun icin properties dosyamizda belirttigimiz gibi yeni bir schema olusturalim, ismine springhibernate diyelim.

properties dosyamizda Oracle a dair baglanti bilgilerini yorum satiri haline getirelim yani satir basina # isareti koyalim. MySQL icin olan baglanti bilgilerini acalim, yani # isaretini silelim.

#MYSQL Connection

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springhibernate
jdbc.username=root
jdbc.password=
hibernate.dialect=org.hibernate.dialect.MySQLDialect

Ornegimizi tekrar calistirdigimizda bu sefer MySQL’e baglanacak ve ayni islemleri gerceklestirecektir.

mysql1

springhibernate semamizda , employee tablosu olustu ve ilgili islemler basariyla gerceklesti.

Son olarak PostgreSQL icin ornegimizi calistiralim;
Oncelikle PostgreSQL de yeni bir database olusturduk, ismi yine benzer sekilde springhibernate
Sonrasinda MySQL icin baglanti ayarlarini kapatip PostgreSQL icin acalim.

#PostgreSQL Connection

jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/springhibernate
jdbc.username=postgres
jdbc.password=SIFRENIZ
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

postgresql

Uygulamimizi calistirdigimizda , MySQL ve Oracle icin gerceklesen islemler PostgreSQL icin de gerceklesecektir. PostgreSQL i Hibernate yazilarimda kullanmistim, eger PostgreSQL yabanci iseniz ogrenmek istiyorsaniz inceleyebilirsiniz.

Sonuc olarak; Orneklerde goruldugu gibi Spring’in bize saglamis oldugu
PropertyPlaceholderConfigurer sinifi  ile kolayca farkli veritabanlarina baglanti saglayabildik. Ornekleri dilediginiz sekilde cogaltabilirsiniz.

Yazimi burada sonlandiriyorum.
Maven Project :SpringProject_v22

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

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