spring 中StoredProcedure的用法–转载[通俗易懂]

spring 中StoredProcedure的用法–转载[通俗易懂]StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate执行存储过程操作的。首先我们写一个实现类:packagecom.huaye.framework.dao;importjava.sql.Types;importjava.util.HashMap;importjava.util.Map;i…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate执行存储过程操作的。

首先我们写一个实现类:

package com.huaye.framework.dao;

import java.sql.Types;
import java.util.HashMap;
import java.util.Map;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.SqlReturnResultSet;
import org.springframework.jdbc.object.StoredProcedure;

/**
 * Name:StoredProcedureTemplate User: HP Date: 2007-7-21 Time: 7:40:01
 * Description:
 */
public class StoredProcedureTemplate extends StoredProcedure {

    private HashMap<String, Object> map = new HashMap<String, Object>();

    public StoredProcedureTemplate() {
        super();

    }

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

    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 setInParam(String param,int valueType)
    {
        this.declareParameter(new SqlParameter(param, valueType));
        
    }
    
    public void setOutParam(String param,int valueType)
    {
        this.declareParameter(new SqlOutParameter(param, valueType));
        
    }
    
    public void setReturnParam(String param, RowMapper rowMapper) {
        this.declareParameter(new SqlReturnResultSet(param,rowMapper));
    }

}

写一个测试:

public void test2() {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext-base.xml");
        JdbcTemplate jdbc = (JdbcTemplate) context.getBean("jdbcTemplate");

        StoredProcedureTemplate template = new StoredProcedureTemplate();
        
        template.setJdbcTemplate(jdbc);
        template.setSql("testproc");
        //注意有返回结果集的时候,第一个参数必须设置为返回结果集参数,不然会报错。
        template.setReturnParam("rows", new FirstReportRowMapper());
        
        template.setIntegerParam("@parama");
        
        template.setValue("@parama", 9);
        
        Map map = template.execute();
        Object o = map.get("rows");
        List<FirstReportVO> list = (List<FirstReportVO>)o;
        for (FirstReportVO vo : list) {
            System.out.println(vo.getSortID()+","+vo.getSortName());
        }
    }

唯一要注意的地方就是测试里备注的地方,我测试了好久才发现,郁闷的一塌糊涂,老是莫名其妙的错,原来将参数互换一下位置就OK了,比如你把

template.setIntegerParam(“@parama”);写在前面然后再写template.setReturnParam(“rows”, new FirstReportRowMapper());的话,就会报空指针错误。

这个“rows”可以随便取名字,不过下面map.get(“rows”)要和你取的名字一致,因为StoredProcedureTemplate会将结果集以这个名字保存在map中返回。

还有要注意的就是设置sqlparamter的顺序要和存储过程中参数的顺序要一致,不然也会报错.

 

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

 http://forum.spring.io/forum/spring-projects/data/13984-multiple-calls-to-storedprocedure-using-same-connection

转载于:https://www.cnblogs.com/davidwang456/p/4093628.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164518.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SOAP协议规范

    SOAP协议规范SOAP协议规范SOAP协议规范1.简介SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP能够被用于从消息传递到RPC的各种系统。SOAP包括三个部

    2022年7月27日
    4
  • 如何实现自定义类加载器_进阶课程

    如何实现自定义类加载器_进阶课程新建一个java文件,保存在相应的目录用cmd命令进入到world类的上级目录,运行javac命令,生成.class文件创建自己定义的classload类//继承ClassLoader类,重写findclass方法。publicclassMyClassloaderextendsClassLoader{privateStringpath;privateStringclassloaderName;publicMyClassloader(Str

    2025年9月22日
    6
  • cisco交换机基本配置命令_cisco交换机保存命令

    cisco交换机基本配置命令_cisco交换机保存命令前段时间我们发布了关于学校机房项目交换机的配置,理解这篇,交换机配置不再难,这篇是以思科交换机为配置基础,有部分朋友觉得有些难度,希望我们发些基础些的内容,本期我们就一起来看下思科的基础配置。思科交换机的基本配置一、基本配置switch>enable//进入特权模式switch#configterminal…

    2022年4月20日
    435
  • 2020年读书随笔一篇_2020年教师读书笔记

    2020年读书随笔一篇_2020年教师读书笔记Note:以下markdown格式文本由json2md自动转换生成,可参考JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了了解具体的转换过程。面纱作者:毛姆[英]ISBN:9787210082835出版社:江西人民出版社出版日期:2016-04-01图书标签:毛姆,小说,英国文学,英国,外国文学豆瓣地址:https://book.douban.com/subject/26757680/阅读日期:2020-01-19读书笔记威廉·萨默塞特·毛姆(

    2025年8月31日
    4
  • 周鸿祎的真经「建议收藏」

    周鸿祎的真经「建议收藏」  什么样的产品易获风险投资商的青睐-周鸿祎的BLOG-搜狐博客 无论如何,产品还是企业最核心最根本的东西。产品决定了创业者选择一条什么样的发展道路。产品的定义和选择是创业的开始,而好的开始是成功的一半。 做一份投资计划书-周鸿祎的BLOG-搜狐博客 一份好的投资计划书,不仅有助于将创业者头脑中的创意、想法逻辑化

    2022年7月26日
    11
  • idea 2021.9激活码_最新在线免费激活

    (idea 2021.9激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

    2022年3月26日
    87

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号