`

Spring JDBC调用存储过程

阅读更多

 

http://qdpurple.iteye.com/blog/941445

http://blog.csdn.net/xiao_jun_0820/article/details/7268219

 

from:http://www.tutorialspoint.com/spring/calling_stored_procedure.htm

SQL Stored Procedure in Spring

 The SimpleJdbcCall class can be used to call a stored procedure with IN and OUT parameters. You can use this approach while working with either of the RDBMS like Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle, and Sybase.

To understand the approach let us take our Student table which can be created in MySQL TEST database with the following DDL:

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID));

Next, consider the following MySQL stored procedure which takes student Id and returns corresponding student's name and age using OUT parameters. So let us create this stored procedure in your TEST database using MySQL command prompt:

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 ;

Now let us write our Spring JDBC application which will implement simple Create and Read operations on our Student table. Let us have working Eclipse IDE in place and follow the following steps to create a Spring application:

Step Description
1 Create a project with a name SpringExample and create a package com.tutorialspoint under the src folder in the created project.
2 Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
3 Add Spring JDBC specific latest libraries mysql-connector-java.jar,org.springframework.jdbc.jar and org.springframework.transaction.jar in the project. You can download required libraries if you do not have them already.
4 Create DAO interface StudentDAO and list down all the required methods. Though it is not required and you can directly write StudentJDBCTemplate class, but as a good practice, let's do it.
5 Create other required Java classes StudentStudentMapperStudentJDBCTemplate andMainApp under the com.tutorialspoint package.
6 Make sure you already created Student table in TEST database. Also make sure your MySQL server is working fine and you have read/write access on the database using the given username and password.
7 Create Beans configuration file Beans.xml under the src folder.
8 The final step is to create the content of all the Java files and Bean Configuration file and run the application 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;publicinterfaceStudentDAO{/** 
    * This is the method to be used to initialize
    * database resources ie. connection.
    */publicvoid setDataSource(DataSource ds);/** 
    * This is the method to be used to create
    * a record in the Student table.
    */publicvoid create(String name,Integer age);/** 
    * This is the method to be used to list down
    * a record from the Student table corresponding
    * to a passed student id.
    */publicStudent getStudent(Integer id);/** 
    * This is the method to be used to list down
    * all the records from the Student table.
    */publicList<Student> listStudents();}

Following is the content of the Student.java file:

package com.tutorialspoint;publicclassStudent{privateInteger age;privateString name;privateInteger id;publicvoid setAge(Integer age){this.age = age;}publicInteger getAge(){return age;}publicvoid setName(String name){this.name = name;}publicString getName(){return name;}publicvoid setId(Integer id){this.id = id;}publicInteger 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;publicclassStudentMapperimplementsRowMapper<Student>{publicStudent mapRow(ResultSet rs,int rowNum)throwsSQLException{Student student =newStudent();
      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.Map;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;publicclassStudentJDBCTemplateimplementsStudentDAO{privateDataSource dataSource;privateSimpleJdbcCall jdbcCall;publicvoid setDataSource(DataSource dataSource){this.dataSource = dataSource;this.jdbcCall =newSimpleJdbcCall(dataSource).
                       withProcedureName("getRecord");}publicvoid create(String name,Integer age){JdbcTemplate jdbcTemplateObject =newJdbcTemplate(dataSource);String SQL ="insert into Student (name, age) values (?, ?)";

      jdbcTemplateObject.update( SQL, name, age);System.out.println("Created Record Name = "+ name +" Age = "+ age);return;}publicStudent getStudent(Integer id){SqlParameterSourcein=newMapSqlParameterSource().
                              addValue("in_id", id);Map<String,Object>out= jdbcCall.execute(in);Student student =newStudent();
      student.setId(id);
      student.setName((String)out.get("out_name"));
      student.setAge((Integer)out.get("out_age"));return student;}publicList<Student> listStudents(){String SQL ="select * from Student";List<Student> students = jdbcTemplateObject.query(SQL,newStudentMapper());return students;}}

Few words about above program: The code you write for the execution of the call involves creating anSqlParameterSource 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 procedure. The execute method takes the IN parameters and returns a Map containing any out parameters keyed by the name as specified in the stored procedure. Now let us move with the main application file MainApp.java, which is as follows:

package com.tutorialspoint;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.tutorialspoint.StudentJDBCTemplate;publicclassMainApp{publicstaticvoid main(String[] args){ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");StudentJDBCTemplate studentJDBCTemplate =(StudentJDBCTemplate)context.getBean("studentJDBCTemplate");System.out.println("------Records Creation--------");
      studentJDBCTemplate.create("Zara",11);
      studentJDBCTemplate.create("Nuha",2);
      studentJDBCTemplate.create("Ayan",15);System.out.println("------Listing Multiple Records--------");List<Student> students = studentJDBCTemplate.listStudents();for(Student record : students){System.out.print("ID : "+ record.getId());System.out.print(", Name : "+ record.getName());System.out.println(", Age : "+ record.getAge());}System.out.println("----Listing Record with ID = 2 -----");Student student = studentJDBCTemplate.getStudent(2);System.out.print("ID : "+ student.getId());System.out.print(", Name : "+ student.getName());System.out.println(", Age : "+ student.getAge());}}

Following is the configuration file Beans.xml:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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 --><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/TEST"/><propertyname="username"value="root"/><propertyname="password"value="password"/></bean><!-- Definition for studentJDBCTemplate bean --><beanid="studentJDBCTemplate"class="com.tutorialspoint.StudentJDBCTemplate"><propertyname="dataSource"ref="dataSource"/></bean></beans>

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

------Records Creation--------
Created Record Name = Zara Age = 11
Created Record Name = Nuha Age = 2
Created Record Name = Ayan Age = 15
------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 11
ID : 2, Name : Nuha, Age : 2
ID : 3, Name : Ayan, Age : 15
----Listing Record with ID = 2 -----
ID : 2, Name : Nuha, Age : 2

 

分享到:
评论

相关推荐

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...

    Spring+Jdbc scott用户的调用存储过程

    压缩包中的“Spring10SpringJDBC2”文件名可能暗示包含的是关于Spring JDBC的第十章内容或者是关于Spring JDBC的进阶部分,可能包括了如何调用存储过程的示例代码或更详细的教程。 综上所述,本主题涵盖的知识点...

    spring_JDBC整合包

    此外,Spring JDBC也支持存储过程的调用,以及批量更新操作。在处理大量数据时,还可以通过分页查询来优化性能。在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    `SimpleJdbcInsert`和`SimpleJdbcCall`则分别用于简化插入操作和调用存储过程。 1. **JdbcTemplate使用**: - **连接管理**:Spring JDBC通过DataSource来管理数据库连接,DataSource是一个接口,实现了数据库连接...

    spring-jdbc jar包.rar

    1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...

    spring对jdbc的支持jar包

    2. **SimpleJdbcInsert** 和 **SimpleJdbcCall**:这两个类分别简化了插入操作和调用存储过程的过程。SimpleJdbcInsert可以自动计算生成主键值,而SimpleJdbcCall则允许开发者方便地定义和执行数据库的存储过程。 3...

    Spring JDBC应用实例讲解

    Spring JDBC同样支持存储过程的调用。我们可以通过SimpleJdbcCall类来定义并执行存储过程,同样可以设置入参和出参,处理复杂的数据交互场景。 **8. 异常处理** Spring JDBC将数据库异常转换为Spring的...

    SpringJDBC训练素材.zip

    此外,Spring JDBC还支持CallableStatement,用于调用数据库的存储过程。通过JdbcTemplate的call()方法,你可以传入CallableStatementCreator,然后执行存储过程并获取结果。 总之,Spring JDBC是一个强大且灵活的...

    Spring事务管理和SpringJDBC思维导图

    此外,SimpleJdbcInsert、SimpleJdbcCall等辅助类进一步简化了插入和调用存储过程的操作。 Spring JDBC还引入了RowMapper接口,这是一个回调接口,用于将数据库结果集中的每一行映射为一个Java对象。此外,...

    SpringMVC+SpringJDBC

    2. **SimpleJdbcInsert** 和 **SimpleJdbcCall**:简化插入记录和调用存储过程的操作。 3. **Transaction Management**:SpringJDBC支持声明式和编程式事务管理,使得事务控制更加简洁和健壮。 4. **DataSource**...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    2. **JdbcTemplate**:这是Spring JDBC最常用的工具类,提供了大量的模板方法,用于执行SQL查询、更新、调用存储过程等操作,大大减少了手动处理结果集和异常的情况。 3. **SimpleJdbcTemplate**:这是JdbcTemplate...

    Spring Jdbc的jar包

    此外,Spring JDBC的`JdbcOperations`接口扩展了`JdbcTemplate`,提供了一组通用的JDBC操作,包括执行SQL查询、调用存储过程等。`NamedParameterJdbcTemplate`则是另一个扩展,它支持命名参数的SQL查询,使得查询...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    7. **存储过程**:通过`call`方法,`JdbcTemplate`也可以调用数据库中的存储过程,支持输入、输出和InOut参数。 8. **自定义SQL执行**:除了提供预定义的方法,`JdbcTemplate`还允许开发人员自定义SQL执行逻辑,...

    SpringJDBC工程对应Jar包

    其次,Spring JDBC还引入了`SimpleJdbcInsert`和`SimpleJdbcCall`,分别用于简化插入操作和调用存储过程。`SimpleJdbcInsert`可以根据表结构自动生成INSERT语句,而`SimpleJdbcCall`则可以方便地调用数据库中的存储...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    SpringMVC+Spring+SpringJDBC

    SpringMVC、Spring和SpringJDBC是Spring框架的三个重要组成部分,它们协同工作,提供了从用户接口到数据存储的完整解决方案。下面将详细介绍这三个组件及其整合方式。 **1. SpringMVC** SpringMVC(Model-View-...

    Spring Data JDBC与JDBC的区别

    7. **CallableStatement**: 用于调用数据库存储过程。 8. **ResultSet**: 存储查询结果,包含多条记录,可以迭代遍历。 而Spring Data JDBC是Spring框架的一部分,它简化了数据库操作,提供了更高层次的抽象。相比...

    Spring mvc、 Spring、 Spring jdbc 整合 demo

    本示例"Spring mvc、Spring、Spring jdbc 整合 demo"着重展示了Spring框架的三大关键模块:Spring MVC(模型-视图-控制器)、Spring Core以及Spring JDBC的集成与应用。 1. **Spring MVC** Spring MVC是Spring框架...

Global site tag (gtag.js) - Google Analytics