Spring JdbcTemplate kullanımı
Merhaba arkadaşlar , bu yazımda spring jdbc template nasıl kullanılır ondan bahsedeceğim . Örneğimizi maven çatısı altında yapacağız. İlk önce bize lazım olan kütüphaneleri projemize ekleyelim .
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901-1.jdbc4</version> </dependency> </dependencies> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>turkishh</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringJdbcTemplateTest</name> </project> |
Şimdi ise modelimizi oluşturalım
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package io.bilisim; public class Student { private long id; private String name; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String toString() { return "Öğrenci [isim=" + name + ", e-posta=" + email + "]"; } } |
J2SE ‘de ne yapardık jdbc ile sorgu atar ve gelen ResultSet nesnesinden datalarımızı loop’a sokarak çekerdik. Her bir ResulSet nesneni oluşturduğumuzda tek tek çekmeye çalışırdık yada araya bir dinamik sınıf yazar kasıntılı işlere girerdik ? . İşte tam burada spring demişki bu karın ağrısından yazılımcıları kurtarayım .
org.springframework.jdbc.core.RowMapper<Parse_edilecek_sınıf_türü> böyle bir sınıf oluşturmuş ve demişki eğer db’ye query(); metodumu kullanarak gittiğinde bana sql sözcüğünü ve rowMapper sınıfını ver ben sana modelini döneyim . O zaman StudentRowMapper sınıfımızı yazalım.
StudentRowMapper.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package io.bilisim; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class StudentRowMapper implements RowMapper<Student> { public Student mapRow(ResultSet resultSet, int rowNumber) throws SQLException { Student student = new Student(); student.setId(resultSet.getLong(1)); student.setName(resultSet.getString(2)); student.setEmail(resultSet.getString(3)); return student; } } |
Şimdi ise db işlemlerini yapacağımız sınıfı yazalım .
StudentDao.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
package io.bilisim; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; import org.springframework.jdbc.core.JdbcTemplate; import com.turkishh.Student; import com.turkishh.StudentRowMapper; public class StudentDao { // Bu sınıf için nasıl instance oluştuğunu // spring-config.xml dosyasına bakarak anlayabiliriz. private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void insert(Student student) { String insertSql = "INSERT INTO STUDENT (ID,NAME, EMAIL) VALUES(?,?,?);"; long id = student.getId(); String name = student.getName(); String email = student.getEmail(); getJdbcTemplate().update(insertSql, new Object[] { id, name, email }); } public void update(Student student) { String updateSql = "update STUDENT set name = ?, email = ? where id = ?"; long id = student.getId(); String name = student.getName(); String email = student.getEmail(); getJdbcTemplate().update(updateSql, new Object[] { name, email, id }); } public List<Student> selectAll() { String selectAllSql = "SELECT * FROM STUDENT;"; // db'deki tüm kayıtları çektiğimizde // rowMapper kullanımını burada görüyoruz. return getJdbcTemplate().query(selectAllSql, new StudentRowMapper()); } } |
db işlemleirni yapan sınıfımızıda yazdıktan sonra sırada business metodlarımızın olduğu service katmanını yazalım .
StudentService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package io.bilisim; import java.util.List; import com.dbconn.StudentDao; import com.turkishh.Student; public class StudentService { // dao sınıfımızda bir referans alıyoruz // db işlemlerini yapabilmemiz için // bu sınıfın nasıl oluştuğunu spring-config.xml de // tanımlıyoruz. private StudentDao stuDao; public StudentDao getStuDao() { return stuDao; } public void setStuDao(StudentDao stuDao) { this.stuDao = stuDao; } public void addStudent(Student student) { getStuDao().insert(student); } public void updateStudent(Student student) { getStuDao().update(student); } public List<Student> fetchAllStudents() { return getStuDao().selectAll(); } } |
Spring kullandığımız için dikkat etmişsinizdir sınıflar için hiç instance oluşturmadık . Bazı yerlerde comment koydum instance’leri spring-config.xml de oluşturacağız. Instance işlemlerini tamamen spring’in kontrolü altına bırakıyoruz.
spring-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <tx:annotation-driven /> <context:component-scan base-package="com.bussiness." /> //Datasource oluşturuyoruz ilk olarak sonrasında // kullandığımız jdbcTemplate sınıfı ayağa kalktığında bundan referans alıcak // Bir sonraki tanımlamada görebilirsiniz. <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver" /> <property name="url" value="jdbc:postgresql://localhost:5432/postgres" /> <property name="username" value="postgres" /> <property name="password" value="root" /> </bean> <bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource1" /> </bean> // Üst tag'lerde JdbcTemplate sınıfından bir instance oluşturduk. // ve bizim sınıfımızı o referans ile ayağa kaldırıyoruz. <bean id="stuDao1" class="com.dbconn.StudentDao"> <property name="jdbcTemplate" ref="jdbcTemplate1" /> </bean> // en son olarak service katmanımıza dao sınıfımızı inject ediyoruz. <bean id="stuService" class="com.bussiness.StudentService"> <property name="stuDao" ref="stuDao1" /> </bean> </beans> |
ve arkadaşlar test sınıfımızı yazmaya başlayalım .
TestSpringJdbcTemplate.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
package io.bilisim; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.business.StudentService; import com.turkishh.Student; public class TestSpringJdbcTemplate { private static ApplicationContext context; public static void main(String[] args) { //spring-config.xml dosyasındaki tüm yaptığımız konfigurasyonları //AppplicationContext sınıfı ile başatıyoruz. context = new ClassPathXmlApplicationContext("spring-config.xml"); // Burada servis kısmındaki tüm methodları kullanabilmeiz için // spring-context.xml 'de stuService referansını kullanıyoruz. StudentService stuService = (StudentService) context.getBean("stuService"); Student stu = new Student(); stu.setId(11); stu.setName("www.bilisim.io"); stuService.addStudent(stu); } } |
Test sınıfını çalıştırdığımızda db’ye baktığımızda kayıt atmış olacaktır .
Umarım yararlı olmuştur.
İyi Çalışmalar?