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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • asp.net gridview_net core mvc 怎么做增删改查

    asp.net gridview_net core mvc 怎么做增删改查在ASP.NETMVC3中,WebGrid是 Web.Helpers下的新的类,使用WebGrid可以减小我们的代码量,本篇先简单的看下WebGrid的使用方法,包括它的分页、排序功能以及样式的设置等。我们还是从留言表读取数据,并使用WebGrid来展示我们的留言。WebGrid大体原理就是将数据集合组织输出一个HTML表格,使用WebGrid我们先创建一个

    2022年10月5日
    2
  • 网络传真的安装及使用方法「建议收藏」

    网络传真的安装及使用方法「建议收藏」在宽带网迅速普及的今天,Modem好像已经“廉颇老矣”,传真Modem已变成了一块“食之无味,弃之可惜”的鸡肋。而且windows的传真模块,已经远远无法满足今天人们快节奏的工作效率。在国外已经非常普遍的网络传真(efax),终于来到了国内,从2004年的引进到根据国内人们使用习惯的不断改进,近10年来,已拥有了百万级的客户群体,特别是近年来,传真营销被企业广泛应用,带来了越来越多的垃圾传

    2022年6月28日
    49
  • 齐博建站指南(艾戈勒)

    齐博建站指南使用手册http://www.qibosoft.com/help/          /template/default/list_tpl1、新建风格:template/XXX  data/style 下新建XXX.php2、需要全部静态的话,需要录入php标识的头尾3、加载list模块

    2022年4月13日
    52
  • MySQL快速清空表数据

    MySQL快速清空表数据方法一:delete:DELETEFROM表名;方法二:truncate:TRUNCATE表名;相较而言知,完全删除一个表所有记录,道truncate比delete速度快的多。相关延伸:二者区别1.DELETE・DML语言・可以回退・可以有条件的删除DELETEFROM表名内WHERE条件2.TRUNCATETABLE・DDL语言・无法回退・默认所有的表内容容都…

    2022年5月7日
    58
  • Java类加载,getClassLoader()

    Java类加载,getClassLoader()转自【java类加载的深入研究1】loadClass()的研究,IBM深入探讨Java类加载器类加载器基本概念顾名思义,类加载器(classloader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载…

    2022年5月27日
    31
  • linux基本命令iscsiadm,iscsiadm命令使用方法[通俗易懂]

    linux基本命令iscsiadm,iscsiadm命令使用方法[通俗易懂]1.检查操作系统是否按照iscsi[root@linux01~]#rpm-qa|grepiscsiiscsi-initiator-utils-6.2.0.873-2.el6.x86_64如果没有按照的话,可以使用yuminstall命令进行安装2.检查iscsi服务配置[root@linux01~]#chkconfig–list|grepiscsiiscsi…

    2022年8月23日
    7

发表回复

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

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