Spring JDBC - Memanggil Fungsi Tersimpan

Contoh berikut akan menunjukkan bagaimana memanggil fungsi yang disimpan menggunakan Spring JDBC. Kami akan membaca salah satu rekaman yang tersedia di Tabel Siswa dengan memanggil fungsi yang disimpan. Kami akan memberikan id dan menerima nama siswa.

Sintaksis

SimpleJdbcCall jdbcCall = new 
   SimpleJdbcCall(dataSource).withFunctionName("get_student_name");

SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
String name = jdbcCall.executeFunction(String.class, in);

Student student = new Student();
student.setId(id);
student.setName(name);

Dimana,

  • in - SqlParameterSource objek untuk meneruskan parameter ke fungsi yang disimpan.

  • jdbcCall - Objek SimpleJdbcCall untuk mewakili fungsi yang disimpan.

  • jdbcTemplateObject - StudentJDBCTemplate objek untuk memanggil fungsi tersimpan dari database.

  • student - Objek siswa.

Itu SimpleJdbcCallkelas dapat digunakan untuk memanggil fungsi yang disimpan dengan parameter IN dan nilai kembali. Anda dapat menggunakan pendekatan ini saat bekerja dengan salah satu RDBMS seperti Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle, dan Sybase.

Untuk memahami pendekatannya, pertimbangkan prosedur tersimpan MySQL berikut, yang mengambil ID siswa dan mengembalikan nama siswa yang sesuai. Jadi mari kita buat fungsi yang disimpan ini di database TEST Anda menggunakan command prompt MySQL -

DELIMITER $$

DROP FUNCTION IF EXISTS `TEST`.`get_student_name` $$
CREATE FUNCTION `get_student_name` (in_id INTEGER)
RETURNS varchar(200)
BEGIN
DECLARE out_name VARCHAR(200);
   SELECT name
   INTO out_name
   FROM Student where id = in_id;

RETURN out_name;

DELIMITER ;

Untuk memahami konsep yang disebutkan di atas terkait dengan Spring JDBC, mari kita tulis sebuah contoh yang akan memanggil fungsi 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).withFunctionName("get_student_name");
	   
      SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
      String name = jdbcCall.executeFunction(String.class, in);
      Student student = new Student();
      student.setId(id);
      student.setName(name);
      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 fungsi yang disimpan. Metode executeFunction mengambil parameter IN dan mengembalikan String seperti yang ditentukan dalam fungsi yang disimpan.

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() );
   }
}

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