`
jiagyao
  • 浏览: 99324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

spring中对存储过程的调用

阅读更多
1. org.springframework.jdbc.object.StoredProcedure 这是一个抽象类,通过declareParameter方法来声明存储过程的输入输出参数,再由

execute方法来调用存储过程。
    org.springframework.jdbc.core.SqlParameter 用来代表存储过程的参数。
    org.springframework.jdbc.core.ResultSetSupportingSqlParameter SqlParameter的子类,是SqlOutParameter、SqlReturnResultSet这

些支持结果集参数类的公共基类
    org.springframework.jdbc.core.SqlOutParameter ResultSetSupportingSqlParameter的子类,用来代表存储过程的输出参数。
    org.springframework.jdbc.core.SqlReturnResultSet ResultSetSupportingSqlParameter的子类,用来代表调用存储过程的输出结果集


    org.springframework.jdbc.core.RowMapper 这是一个接口,通常为JdbcTemplate的查询方法或者存储过程返回结果集使用。

2.新建一个StoredProcedure中的子类:
public class TestStoredProcedure extends StoredProcedure {

protected TestStoredProcedure() {
  super();
}
protected TestStoredProcedure(DataSource ds) {
  super();
  super.setDataSource(ds);
}
protected TestStoredProcedure(DataSource ds, String name) {
  super(ds, name);
 
}

}
2.在某一个DAO中写下这个方法:
调用TestStoredProcedure就可以了.具体可参考下面.

3.然后在spring-conf.xml中配置这个类,并注入dataSource就可以了.

测试例子如下:
import java.sql.Types;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.datasource.*;
import org.springframework.jdbc.object.StoredProcedure;

public class TestSP {

    public static void main(String[] args)  {
       
        System.out.println("DB TestSP!");
        TestSP t = new TestSP();
        t.test();
        System.out.println("Done!");
       
    }
   
    void test() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        ds.setUrl("jdbc:oracle:thin:@172.20.XX.XXX:1521:test");
        ds.setUsername("root");
        ds.setPassword("root");

        StoreTemplate  test=new StoreTemplate(ds);
        test.setFunction(true);
        test.setSql("sysdate");
        test.setDateOutParam("date");
       
        printMap( test.execute());

// MyStoredProcedure sproc = new MyStoredProcedure(ds);
//        Map res = sproc.execute();
//        printMap(res);
               
    }

    private class MyStoredProcedure extends StoredProcedure {
        public static final String SQL = "sysdate";

        public MyStoredProcedure(DataSource ds) {
            setDataSource(ds);
            setFunction(true);
            setSql(SQL);
            declareParameter(new SqlOutParameter("date", Types.DATE));
            compile();
        }

        public Map execute() {
            Map out = execute(new HashMap());
            return out;
        }

    }

    private static void printMap(Map r) {
        Iterator i = r.entrySet().iterator();
        while (i.hasNext()) {
            System.out.println((String) i.next().toString()); 
        }
    }
}

import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.jdbc.core.SqlOutParameter;

public class StoreTemplate extends StoredProcedure {

HashMap map = new HashMap();

public StoreTemplate() {
  super();

}

public void setValue(String key, Object obj) {
  map.put(key, obj);
}

public StoreTemplate(DataSource ds) {
  setDataSource(ds);
}

public Map execute() {
  if (this.getSql() == null || this.getSql().equals(""))
   return null;
  this.compile();
  return execute(map);
}

public void setVarcharParam(String param) {
  this.declareParameter(new SqlParameter(param, Types.VARCHAR));
}

public void setDoubleParam(String param) {
  this.declareParameter(new SqlParameter(param, Types.DOUBLE));
}

public void setIntegerParam(String param) {
  this.declareParameter(new SqlParameter(param, Types.INTEGER));
}

public void setVarcharOutParam(String param) {
  this.declareParameter(new SqlOutParameter(param, Types.VARCHAR));
}

public void setDoubleOutParam(String param) {
  this.declareParameter(new SqlOutParameter(param, Types.DOUBLE));
}

public void setIntegerOutParam(String param) {
  this.declareParameter(new SqlOutParameter(param, Types.INTEGER));
}
public void setDateOutParam(String param) {
  this.declareParameter(new SqlOutParameter(param, Types.DATE));
}
}




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pengchua/archive/2007/12/17/1943830.aspx
分享到:
评论

相关推荐

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

    在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用...

    spring mvc + mybatis 调用mysql 存储过程

    本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...

    使用Spring的JdbcTemplate调用Oracle的存储过程

    使用Spring的JdbcTemplate调用Oracle的存储过程

    spring mybatis 调用oracle存储过程

    本文将深入探讨如何在Spring和MyBatis集成环境中调用Oracle数据库的存储过程,包括无返回值、返回结果集以及返回多个结果的情况。 首先,让我们理解基础概念。Spring是一个全面的后端开发框架,它提供了依赖注入、...

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载

    spring hibernate执行存储过程的例子

    Spring和Hibernate是Java开发中常用的两个框架,它们提供了对存储过程的支持。本文将深入探讨如何在Spring和Hibernate中执行存储过程,并基于描述中的例子进行解析。 首先,让我们了解Spring如何执行存储过程。...

    Springboot调用Oracle存储过程的几种方式.docx

    在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...

    springboot整合mybatis调用oracle存储过程

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

    J2EE+Spring+Ibatis2+blazeds存储过程调用返回结果集

    在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...

    ibatis调用存储过程介绍

    在Java开发中,使用iBATIS(现在称为MyBatis)作为持久层框架时,调用数据库的存储过程是一种常见的需求。本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库...

    struts+spring_ibaits+调用Mysql存储过程实现增删改查

    在本项目中,"struts+spring_ibaits+调用Mysql存储过程实现增删改查",意味着开发者利用这三个框架来处理数据库中的增、删、改、查(CRUD)操作,并通过调用MySQL的存储过程来实现这些功能。存储过程是预编译的SQL...

    Spring Data JPA调用存储过程实例代码

    Spring Data JPA 提供了调用存储过程的能力,使得在Java应用中使用存储过程变得方便。 1. **存储过程** 存储过程是数据库中预编译的SQL语句集合,可以接受参数并返回结果。在本例中,我们有 `test_pkg` 包下的两个...

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

    标题中的“Spring+Jdbc scott用户的调用存储过程”涉及到的是在Java开发中使用Spring框架的JDBC模块来调用数据库的存储过程。在Java应用程序中,Spring JDBC提供了一个简单且有效的方式来处理数据库交互,包括执行...

    Spring boot调用Oracle存储过程的两种方式及完整代码

    在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储过程时遇到的问题,并提供了两种解决方案。 第一种方式:...

    maven+SpringMVC+Spring+Mybatis图片上传本地以及显示+调用存储过程

    本项目采用的是经典的Java EE技术栈:Maven、SpringMVC、Spring和Mybatis,来实现这一功能,同时包含了调用数据库存储过程的操作。以下是关于这个项目的关键知识点的详细说明: 1. Maven:Maven是一个项目管理工具...

    MyBatis调用存储过程

    在MyBatis的映射文件(mapper.xml)中,我们需要为存储过程创建一个`<select>`标签,但与通常的查询不同,这里需要设置`id`(标识符)、`resultMap`(结果映射)以及`statementType="CALLABLE"`,这表明这是一个调用...

    mybatis调用储存过程

    使用`<select id="callProcedure" resultType="map" statementType="CALLABLE">`标签,`id`对应接口中的方法名,`statementType="CALLABLE"`表示这是一个存储过程调用。然后在标签内,使用`{call your_procedure_...

    测试spring的存储过程

    首先,标题“测试spring的存储过程”表明我们要关注的是在Spring环境中如何对数据库的存储过程进行测试。Spring提供了多种方式来管理数据库交互,包括JdbcTemplate和NamedParameterJdbcTemplate等,它们都可以用来...

    Spring访问传入数组参数的Oracle存储过程

    在Java中,尤其是使用Spring框架时,我们可以借助JDBC或ORM(对象关系映射)工具如Hibernate来调用这些存储过程。 在Spring中,调用存储过程通常通过`JdbcTemplate`或`NamedParameterJdbcTemplate`类来实现。对于...

Global site tag (gtag.js) - Google Analytics