spring 中StoredProcedure的用法

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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的顺序要和存储过程中参数的顺序要一致,不然也会报错.

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

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

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


相关推荐

  • 555施密特触发器电路图_555定时器构成的施密特触发器

    555施密特触发器电路图_555定时器构成的施密特触发器目录方法作用内部电路分析555内部电路图分析仿真电路图仿真结果总结将555的6脚和2脚连接在一起,并在5脚接上0.01uF的电容用于滤波,这就构成了施密特触发器。施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。百度百科:https://baike.baidu.com/item/%E6%96%

    2025年7月24日
    2
  • windows10和安装linux双系统安装教程(超简单)[通俗易懂]

    windows10和安装linux双系统安装教程(超简单)[通俗易懂]windows10和安装linux双系统安装教程(超简单)一共分三步:第一步了解自己电脑的BIOS第二步安装windows10系统第三步在windows10中安装ubuntu系统第一步了解自己电脑的BIOSUEFI:是新式BIOS,只要是近几年买的都是这个BIOSMBR:是传统BIOS,上世纪买的电脑基本都是老的了解自己电脑的类型电脑类型BIOS和硬盘组合常见的有如下几种:UEFI(是新式BIOS)+单硬盘UEFI(是新式BIOS)+双硬盘(SSD

    2022年7月24日
    5
  • 笑说程序员的工作_程序员工作辛苦吗

    笑说程序员的工作_程序员工作辛苦吗笑说程序员的工作

    2022年4月22日
    37
  • c++排序函数

    c++排序函数

    2021年5月18日
    101
  • Java IO层次体系结构[通俗易懂]

    Java IO层次体系结构[通俗易懂]在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了   JavaI/O主要包括如下几个层次,包含三个部分:   1.流式部分――IO的主体部分;  2.非流式…

    2022年6月5日
    61
  • 概率论中 PDF,PMF,CDF的含义[通俗易懂]

    概率论中 PDF,PMF,CDF的含义[通俗易懂]概率论中PDF,PMF,CDF的含义在概率论中,我们经常能碰到这样几个概念PDF,PMF,CDF,这里就简单介绍一下PDF:概率密度函数(probabilitydensityfunction),在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。概率密度函数都是针对连续性随机变量的,对于连续性随机变量,都是针对某一段区间的取值,在一个点的取值都是几乎为0的,所以我们研究连续性随机变量时,都是取变量在一段

    2022年5月24日
    74

发表回复

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

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