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)
上一篇 2022年7月26日 下午10:16
下一篇 2022年7月26日 下午10:36


相关推荐

  • 【动画教程】真封神南极服务端2.52架设第五集「建议收藏」

    【动画教程】真封神南极服务端2.52架设第五集「建议收藏」官方网站www.zfs2014.com动画名称:真封神南极服务端2.52架设第五集主讲人:diablo2208教程下载地址:http://pan.baidu.com/s/1dDchMjJ

    2022年7月24日
    16
  • java中异常的捕获及处理「建议收藏」

    一、Java异常简介什么是异常?程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。在Java中即,Java在编译或运行或者运行过程中出现的错误。Java提供了更加优秀的解决办法:异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续…

    2022年4月3日
    122
  • python面试题大全(一)

    python面试题大全(一)注:本面试题来源于网络,转载请注明来自http://www.cnblogs.com/goodhacker/p/3366618.html。1.(1)python下多线程的限制以及多进程中传递参数的方式

    2022年7月5日
    19
  • 动态查询:getBy字段名

    动态查询:getBy字段名

    2021年10月12日
    258
  • linux系统docker安装rabbitmq

    linux系统docker安装rabbitmq安装rabbitmq比较简单1.下载镜像dockerpullrabbitmq:managementrabbitmq:management含有web模块下载完成:2.运行镜像启动镜像dockerrun-d–hostnamedev-scrm–namerabbit-eRABBITMQ_DEFAULT_USER=rabbit-eRABBITMQ_DEFAULT_PASS=rabbit-p15672:15672-p5672:5672rabbitmq:m

    2022年5月24日
    51
  • distinct 多列详解

    distinct 多列详解1 distinct 单列 selectdistin a fromtableA 这个比较简单 没什么可说的 2 distinct 多列 selectdistin b cfromtableA 注意此时是将 a b c 三列所有不同的组合全部列出来 而不仅仅只是 distincta 相当于以下语句 selecta b cfromtableAg b c3 另外一

    2026年3月19日
    2

发表回复

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

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