Spring JDBC - Calling Stored Procedure
Contoh berikut akan menunjukkan bagaimana memanggil prosedur tersimpan menggunakan Spring JDBC. Kami akan membaca salah satu rekaman yang tersedia di Tabel Siswa dengan memanggil prosedur tersimpan. Kami akan memberikan id dan menerima catatan siswa.
Sintaksis
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);
Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));
Dimana,
jdbcCall - Objek SimpleJdbcCall untuk merepresentasikan prosedur yang tersimpan.
in - SqlParameterSource objek untuk meneruskan parameter ke prosedur tersimpan.
student - Objek siswa.
out - Objek peta untuk mewakili output dari hasil panggilan prosedur yang disimpan.
Itu SimpleJdbcCallkelas dapat digunakan untuk memanggil prosedur yang tersimpan dengan parameter IN dan OUT. Anda dapat menggunakan pendekatan ini saat bekerja dengan salah satu RDBMS seperti Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle, dan Sybase.
Untuk memahami pendekatan ini, pertimbangkan prosedur tersimpan MySQL berikut, yang mengambil ID siswa dan mengembalikan nama dan usia siswa yang sesuai menggunakan parameter OUT. Mari kita buat prosedur tersimpan ini dalam database TEST menggunakan command prompt MySQL -
DELIMITER $$ DROP PROCEDURE IF EXISTS `TEST`.`getRecord` $$
CREATE PROCEDURE `TEST`.`getRecord` (
IN in_id INTEGER,
OUT out_name VARCHAR(20),
OUT out_age INTEGER)
BEGIN
SELECT name, age
INTO out_name, out_age
FROM Student where id = in_id;
END $$
DELIMITER ;
Untuk memahami konsep yang disebutkan di atas terkait dengan Spring JDBC, mari kita tulis sebuah contoh yang akan memanggil prosedur tersimpan. Untuk menulis contoh kita, mari kita memiliki IDE Eclipse yang berfungsi dan menggunakan langkah-langkah berikut untuk membuat aplikasi Spring.
Langkah | Deskripsi |
---|---|
1 | Perbarui proyek yang dibuat Siswa di bawah bab Musim Semi JDBC - Aplikasi Pertama . |
2 | Perbarui konfigurasi kacang dan jalankan aplikasi seperti yang dijelaskan di bawah ini. |
Berikut ini adalah konten file antarmuka Objek Akses Data StudentDAO.java.
package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
public interface StudentDAO {
/**
* This is the method to be used to initialize
* database resources ie. connection.
*/
public void setDataSource(DataSource ds);
/**
* This is the method to be used to list down
* a record from the Student table corresponding
* to a passed student id.
*/
public Student getStudent(Integer id);
}
Berikut ini adalah konten dari Student.java mengajukan.
package com.tutorialspoint;
public class Student {
private Integer age;
private String name;
private Integer id;
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
}
Berikut ini adalah konten dari StudentMapper.java mengajukan.
package com.tutorialspoint;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
Berikut adalah file kelas implementasi StudentJDBCTemplate.java untuk antarmuka DAO yang ditentukan StudentDAO.
package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
public class StudentJDBCTemplate implements StudentDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
}
public Student getStudent(Integer id) {
SimpleJdbcCall jdbcCall = new
SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);
Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));
return student;
}
}
Kode yang Anda tulis untuk eksekusi panggilan melibatkan pembuatan SqlParameterSource yang berisi parameter IN. Penting untuk mencocokkan nama yang diberikan untuk nilai input dengan nama parameter yang dideklarasikan dalam prosedur tersimpan. Metode mengeksekusi mengambil parameter IN dan mengembalikan Map yang berisi parameter keluar apa pun yang dikunci dengan nama seperti yang ditentukan dalam prosedur tersimpan.
Berikut ini adalah konten dari MainApp.java mengajukan.
package com.tutorialspoint;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
StudentJDBCTemplate studentJDBCTemplate =
(StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
Student student = studentJDBCTemplate.getStudent(1);
System.out.print("ID : " + student.getId() );
System.out.print(", Name : " + student.getName() );
System.out.println(", Age : " + student.getAge());
}
}
Berikut adalah file konfigurasinya Beans.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 ">
<!-- Initialization for data source -->
<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/TEST"/>
<property name = "username" value = "root"/>
<property name = "password" value = "admin"/>
</bean>
<!-- Definition for studentJDBCTemplate bean -->
<bean id = "studentJDBCTemplate"
class = "com.tutorialspoint.StudentJDBCTemplate">
<property name = "dataSource" ref = "dataSource" />
</bean>
</beans>
Setelah Anda selesai membuat file konfigurasi source dan bean, mari kita jalankan aplikasi. Jika semuanya baik-baik saja dengan aplikasi Anda, itu akan mencetak pesan berikut.
ID : 1, Name : Zara, Age : 11