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的顺序要和存储过程中参数的顺序要一致,不然也会报错.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PostgreSQL ISO 8601

    PostgreSQL ISO 8601国际标准化组织的国际标准ISO8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。(摘自百度百科)selectcast(‘2018-08-05T11:00:00Z’astimestamp),–标准时间 cast(‘2018-08-0…

    2022年10月28日
  • golang 2021.5 激活码(最新序列号破解)

    golang 2021.5 激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • mybatis log plugin 激活码【2021.7最新】

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

  • 系统调用(int 0x80)详解

    系统调用(int 0x80)详解1、系统调用初始化在系统启动时,会在sched_init(void)函数中调用set_system_gate(0x80,&system_call),设置中断向量号0x80的中断描述符:#defineset_system_gate(n,addr) _set_gate(&idt[n],15,3,addr)其中15表示此中断号对应的是陷阱门,注意,这个中断向量不是中断门描述符

  • 老Java程序员花一天时间写了个飞机大战,很舒服![通俗易懂]

    引言:前两天我发现CSDN上有两篇飞机大战的文章异常火爆,各种指标都很高(阅读、点赞、评论、收藏等),但都是python写的,竟然不是我大Java,说实话作为老java选手,我心里是有那么一些失落的,难道我大java打飞机不行?就算大java打飞机不行,那我用单身30年的打飞机手速,我肯定行(反正我的代码我做主,就是玩!),于是我决定一展伸手,用java写了一个飞机大战。我就问你们我打飞机行不行,我媳妇都说行,你们呢?欢迎我亲爱的大Java选手们点赞+评论+收藏!给我冲、冲、冲。。。/**游戏窗

  • Quartz异常-Error creating bean with name ‘org.springframework.scheduling.quartz.SchedulerFactoryBean「建议收藏」

    Quartz异常-Error creating bean with name ‘org.springframework.scheduling.quartz.SchedulerFactoryBean「建议收藏」目录一、问题描述二、问题分析三、问题解决四、工程源码4.1maven配置4.2 web.xml4.3spring配置文件4.4 Quartz配置文件4.5定时任务类4.6工程总体结构一、问题描述  今天使用Quartz+Spring测试定时任务时,发现报异常:Errorcreatingbeanwithname’org.spring…

发表回复

您的电子邮箱地址不会被公开。

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