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.
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.
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
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
Leave a Reply