Spring – Ders 17 Spring & JDBC
Merhaba Arkadaslar,
Bu yazimda Spring ve JDBC uygulamasi gerceklestirecegiz. JDBC (Java Database Connectivity Api) , bir Java uygulamasindan iliskisel veritabani yonetim sistemlerine (Relational Database Management System / RDBMS) ulasmamizi saglar.
Bu yazimizda MySQL ile ornegimizi gerceklestirecegiz.MySQL de yeni bir schema olusturup javaframework adinda name ve creator alanlarindan olusan bir tablo olusturalim.
MySQL ‘e Java ile baglanabilmek icin Java Connector gerekmektedir, projemiz maven projesi oldugu icin ilgili jar dosyasini eklemek yerine dependency tanimini pom.xml dosyamiza <dependencies> tagindan sonra ekleyelim , Eclipse bizim icin ilgili jar dosyasini repositorylerden bulup getirecektir.
http://www.injavawetrust.com/apache-maven-ders-6-repository/
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
MySQL de GUI araciligiyla yeni bir schema olusturalim , springjdbc ve yeni bir tablo olusturalim ; student.
Tabloda primary key alanini ve auto inc alanini iptal ettim, bu uygulamamiz basit bir yapida olacak.
Tablomuzu sorunsuzca olusturduktan sonra , Eclipse donelim ve kodlamaya baslayalim;
JDBC orneklerinde , bir DAO (Data Access Object) interface/arabirim katmani tanimlamak yaygindir.
StudentDAO.java
public interface StudentDAO { public void insertRecord(Student student); public Student getRecord(int stuId); }
Model sinifimiz olan Student sinifimizi olusturalim ;
Student.java
package erguder.levent._17.spring_jdbc; public class Student { private int stuId; private String name; private int age; public Student(int stuId, String name, int age) { super(); this.stuId = stuId; this.name = name; this.age = age; } public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; } 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; } @Override public String toString() { return "Student [stuId=" + stuId + ", name=" + name + ", age=" + age + "]"; } }
Student sinifimizda 3 tane degisken tanimlayip getter/setter metotlarini , yapilandiricisini olusturduk ve toString() metodunu override ettik.
Her yerde rahatca bulabilecegimiz boilerplate/basmakalip kod olarak gecen JDBC kodlari.
JDBCStudent.java
package erguder.levent._17.spring_jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; public class JDBCStudent implements StudentDAO { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } @Override public void insertRecord(Student student) { String sql = "insert into student " + "(stuid, name, age) values (?, ?, ?)"; Connection conn = null; try { conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, student.getStuId()); ps.setString(2, student.getName()); ps.setInt(3, student.getAge()); ps.executeUpdate(); ps.close(); } catch (SQLException e) { throw new RuntimeException(e); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { } } } } @Override public Student getRecord(int stuId) { String sql = "select * from student where stuid=?"; Connection conn = null; try { conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, stuId); Student customer = null; ResultSet rs = ps.executeQuery(); if (rs.next()) { customer = new Student(rs.getInt("stuid"), rs.getString("name"), rs.getInt("age")); } rs.close(); ps.close(); return customer; } catch (SQLException e) { throw new RuntimeException(e); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { } } } } }
tutorial_17.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 id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/springjdbc" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <bean id="studentDAO" class="erguder.levent._17.spring_jdbc.JDBCStudent"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
xml dosyamizi inceleyecek olursak, dataSource id ‘li bean de DriverManagerDataSource sinifini kullandik bu sinif org.springframework paketi altinda bulunmaktadir ve her baglanti isteginde yeni bir baglanti dondurmektedir. Sonrasinda ki url,password,username yapisi klasik jdbc baglanti yapisidir. Burada MySQL e baglanabilmek icin gerekli olan kullanici adini ve sifreyi veriyoruz.
Simdi de test sinifimizi olusturalim ve yeni kayit ekleyip, (insertRecord metodu ile) , ekledigimiz bu kaydi getirelim (getRecord metodu ile ) , toString metodunu override ettigimiz icin student1 objemizi yazdirarak istedigimiz ciktiyi elde edecegiz;
TestSpringJDBC.java
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpringJDBC { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("tutorial_17.xml"); StudentDAO studentDAO = (StudentDAO) context.getBean("studentDAO"); Student student = new Student(1, "Levent Erguder", 24); studentDAO.insertRecord(student); Student student1 = studentDAO.getRecord(1); System.out.println(student1); } }
Test sinifimizi calistirdigimizda ;
Student [stuId=1, name=Levent Erguder, age=24]
Yazimi burada sonlandiriyorum
Kaynak kodlar :SpringProject_v17
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply