spring 中StoredProcedure的使用方法

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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://www.cnblogs.com/lcchuguo/p/4062515.html

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

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

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

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

(0)


相关推荐

  • redis缓存与数据库一致性问题解决[通俗易懂]

    redis缓存与数据库一致性问题解决[通俗易懂]redis缓存与数据库一致性问题解决更多干货分布式实战(干货)springcloud实战(干货)mybatis实战(干货)springboot实战(干货)React入门实战(干货)构建中小型互联网企业架构(干货)一、需求起因假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【如下图:db中是新数据,cache…

  • pycharm彻底卸载_pycharm如何更新

    pycharm彻底卸载_pycharm如何更新用过Windows系统的朋友应该都体验过被系统强制更新的烦恼,经常玩电脑玩着玩着就觉得网速很慢或者电脑变卡了,打开设置一看,发现是Windows系统正在更新。然后当关机的时候,选项变成了”更新并关机”和”更新并重启”,但是它更新的速度还很慢。更新完成之后打开电脑,很多人也都遇到过蓝屏或者卡死机的情况,至于原因,不得而知。实际上系统设置和控制面板里面都有暂停更新选项,但是那个时效只有一个月,之后又会…

  • java fgc_记一次频繁FGC的简单排查

    java fgc_记一次频繁FGC的简单排查简书占小狼转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注周末愉快,今天有时间记录一下上周遇到的一个问题,学习的脚步不能放慢,也不敢放慢。存在问题在线上环境进行服务压测,压测完成后,cpu使用率居高不下,很是费解,按理说已经没有压测请求了,这时消耗cpu资源的只有GC线程了,可以通过jstat命令查看一下JVM的GC情况,然后就碰到了诡异的GC问题。jstat命令jstat[…

  • Java基础篇:Iterator迭代器

    Java基础篇:Iterator迭代器

  • pycharm设置远程调试_在pycharm运行python

    pycharm设置远程调试_在pycharm运行python实验需要pycharm远程调试多个项目,而每个项目所依赖的环境又是不一样的。因此,为了方便起见,就想建立多个ssh连接。在远程调试的过程中,之前建立的连接没有出现问题,而第二次建立的连接一直出现如下问题:[2018/12/1211:11]Failedtotransferfile’C:\Users\majie\PycharmProjects\AIReco\test_mnist.py…

  • pytest指定用例_白盒测试用例

    pytest指定用例_白盒测试用例前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

发表回复

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

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