English 中文(简体)
Spring JDBC - Calling Stored Function
  • 时间:2024-12-22

Spring JDBC - Calpng Stored Function


Previous Page Next Page  

Following example will demonstrate how to call a stored function using Spring JDBC. We ll read one of the available records in Student Table by calpng a stored function. We ll pass an id and receive a student name.

Syntax


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

Where,

    in − SqlParameterSource object to pass a parameter to a stored function.

    jdbcCall − SimpleJdbcCall object to represent a stored function.

    jdbcTemplateObject − StudentJDBCTemplate object to called stored function from database.

    student − Student object.

The SimpleJdbcCall class can be used to call a stored function with IN parameter and a return value. You can use this approach while working with either of the RDBMS such as Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle, and Sybase.

To understand the approach, consider the following MySQL stored procedure, which takes student Id and returns the corresponding student s name. So let us create this stored function in your TEST database using MySQL command prompt −


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 ;

To understand the above-mentioned concepts related to Spring JDBC, let us write an example which will call a stored function. To write our example, let us have a working Ecppse IDE in place and use the following steps to create a Spring apppcation.

Step Description
1 Update the project Student created under chapter Spring JDBC - First Apppcation.
2 Update the bean configuration and run the apppcation as explained below.

Following is the content of the Data Access Object interface file StudentDAO.java.


package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

pubpc interface StudentDAO {
   /** 
      * This is the method to be used to initiapze
      * database resources ie. connection.
   */
   pubpc void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to pst down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   pubpc Student getStudent(Integer id);  
}

Following is the content of the Student.java file.


package com.tutorialspoint;

pubpc class Student {
   private Integer age;
   private String name;
   private Integer id;

   pubpc void setAge(Integer age) {
      this.age = age;
   }
   pubpc Integer getAge() {
      return age;
   }
   pubpc void setName(String name) {
      this.name = name;
   }
   pubpc String getName() {
      return name;
   }
   pubpc void setId(Integer id) {
      this.id = id;
   }
   pubpc Integer getId() {
      return id;
   }
}

Following is the content of the StudentMapper.java file.


package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

pubpc class StudentMapper implements RowMapper<Student> {
   pubpc 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;
   }
}

Following is the implementation class file StudentJDBCTemplate.java for the defined DAO interface 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;

pubpc class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   pubpc void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   pubpc 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;      
   }
}

The code you write for the execution of the call involves creating an SqlParameterSource containing the IN parameter. It s important to match the name provided for the input value with that of the parameter name declared in the stored function. The executeFunction method takes the IN parameters and returns a String as specified in the stored function.

Following is the content of the MainApp.java file


package com.tutorialspoint;

import java.util.List;
import org.springframework.context.ApppcationContext;
import org.springframework.context.support.ClassPathXmlApppcationContext;
import com.tutorialspoint.StudentJDBCTemplate;

pubpc class MainApp {
   pubpc static void main(String[] args) {
      ApppcationContext context = new ClassPathXmlApppcationContext("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() );
   }
}

Following is the configuration file 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 ">

   <!-- Initiapzation for data source -->
   <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/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>

Once you are done creating the source and bean configuration files, let us run the apppcation. If everything is fine with your apppcation, it will print the following message.


ID : 1, Name : Zara
Advertisements