Spring JDBC, Spring Framework'ün bir parçası olan ve JDBC (Java Database Connectivity) kullanarak ilişkisel veritabanlarıyla etkileşimi kolaylaştıran bir modüldür. Spring JDBC, ham JDBC API'sinin kullanımını basitleştirir, tekrarlanan kodları ortadan kaldırır ve kaynak yönetimini otomatikleştirir. Bu sayede geliştiriciler daha temiz ve okunabilir kod yazabilirler.
Spring JDBC'nin Temel Özellikleri
- JdbcTemplate: JDBC operasyonlarını basitleştirmek için kullanılan merkezi sınıftır. CRUD (Create, Read, Update, Delete) işlemleri için çeşitli yöntemler sağlar.
- NamedParameterJdbcTemplate: Adlandırılmış parametreler kullanarak SQL sorgularını daha okunabilir hale getirir.
- SimpleJdbcInsert ve SimpleJdbcCall: Ekleme ve saklı yordam çağrılarını basitleştirir.
- RowMapper ve ResultSetExtractor: Veritabanından dönen sonuçların Java nesnelerine dönüştürülmesini sağlar.
Spring JDBC Kullanarak Veritabanı İşlemleri
Aşağıda, Spring JDBC kullanarak bir veritabanı bağlantısının nasıl kurulacağını ve veri işlemlerinin nasıl yapılacağını gösteren bir örnek bulunmaktadır.
Maven Bağımlılıkları
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
Veritabanı Yapılandırması (applicationContext.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.xsd">
<!-- Veritabanı bağlantı bilgileri -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database_name"/>
<property name="username" value="your_username"/>
<property name="password" value="your_password"/>
</bean>
<!-- JdbcTemplate bean tanımı -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Entity Sınıfı (Employee.java)
public class Employee {
private int id;
private String name;
private int age;
// Getter ve Setter metodları
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;
}
}
EmployeeDAO Sınıfı (EmployeeDAO.java)
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class EmployeeDAO {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// Veri ekleme
public int saveEmployee(Employee employee) {
String query = "INSERT INTO Employee (name, age) VALUES (?, ?)";
return jdbcTemplate.update(query, employee.getName(), employee.getAge());
}
// Veri güncelleme
public int updateEmployee(Employee employee) {
String query = "UPDATE Employee SET name=?, age=? WHERE id=?";
return jdbcTemplate.update(query, employee.getName(), employee.getAge(), employee.getId());
}
// Veri silme
public int deleteEmployee(int id) {
String query = "DELETE FROM Employee WHERE id=?";
return jdbcTemplate.update(query, id);
}
// Veri okuma
public List<Employee> getAllEmployees() {
String query = "SELECT * FROM Employee";
return jdbcTemplate.query(query, new EmployeeRowMapper());
}
}
EmployeeRowMapper Sınıfı (EmployeeRowMapper.java)
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
return employee;
}
}
Main Sınıfı (Main.java)
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeDAO employeeDAO = (EmployeeDAO) context.getBean("employeeDAO");
// Yeni bir çalışan ekleme
Employee employee = new Employee();
employee.setName("John Doe");
employee.setAge(30);
employeeDAO.saveEmployee(employee);
// Çalışanları listeleme
List<Employee> employees = employeeDAO.getAllEmployees();
for (Employee emp : employees) {
System.out.println("ID: " + emp.getId() + ", Name: " + emp.getName() + ", Age: " + emp.getAge());
}
}
}
Spring JDBC'nin Avantajları
- Kolay Kullanım: Spring JDBC, JDBC API'sinin karmaşıklığını azaltarak daha basit bir kullanım sunar.
- Kaynak Yönetimi: Bağlantıların, ifadelerin ve sonuç kümelerinin yönetimini otomatikleştirir.
- Hata Yönetimi: SQLExceptions'ı anlamlı Spring DataAccessExceptions'a dönüştürerek hata yönetimini kolaylaştırır.
- Esneklik: Ham SQL sorgularını kullanarak esneklik sağlar, ayrıca NamedParameterJdbcTemplate gibi araçlar ile okunabilirliği artırır.
Bu örnekler ve açıklamalar, Spring JDBC'nin temel kullanımını ve avantajlarını anlamanıza yardımcı olacaktır. Spring JDBC, veritabanı işlemlerini daha verimli ve yönetilebilir hale getirir.
Top comments (0)