spring 中StoredProcedure的用法--转载
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
spring 中StoredProcedure的用法--转载的更多相关文章
- spring中context:property-placeholder/元素 转载
spring中context:property-placeholder/元素 转载 1.有些参数在某些阶段中是常量 比如 :a.在开发阶段我们连接数据库时的连接url,username,passwo ...
- 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...
- Spring 中JCA CCI分析--转载
转载地址:http://blog.csdn.net/a154832918/article/details/6790612 J2EE提供JCA(Java Connector Architecture)规 ...
- Spring中@Cacheable的用法
在Spring中通过获取MemCachedClient来实现与memcached服务器进行数据读取的方式.不过,在实际开发中,我们往往是通过Spring的@Cacheable来实现数据的缓存的,所以, ...
- spring中log4j的使用---转载
原文链接:http://www.codeceo.com/article/log4j-usage.html 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供 ...
- Spring中HibernateCallback的用法(转)
Hibernate的复杂用法HibernateCallback HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式.Hiber ...
- spring 中StoredProcedure的使用方法
StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate运行存储过程操作的. 首先我们写一个实现类: package com.huaye.frame ...
- Spring中RedirectAttributes的用法
RedirectAttributes 是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的的工具类.他有两种带参的方式: 第一种: redirectAttribut ...
- SQL中CASE 的用法 转载
sql语言中有没有类似C语言中的switch case的语句?? 没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 select getdat ...
随机推荐
- phpcms v9后台美化需要修改的部分整理
PHPcms后台登陆后的页面修改 Phpcms->modules->admin->templates->main.tpl.php 1,安全提示部分 <h6>< ...
- WPF自定义DataGrid分页控件
新建Custom Control,名:PagingDataGrid 打开工程下面的Themes\Generic.xaml xaml里面代码替换如下 <Style x:Key="{x:T ...
- jQuery幻灯片skitter-slider插件学习总结
@(关键词)[skitter|jquery|网页幻灯片|slider] Skitter 是一个非常酷炫的jQuery网页幻灯片插件,支持非常多种酷炫幻灯片切换方式,下载前往官网,另有参考文档 下面简单 ...
- php学习之基础语法
这些语法都是在学习视频的过程中整理出来的,有些很简单的语法可能就没有整理了,只是记录了自己看来比较重要的语法内容. 1.变量使用 $ 声明 ,变量区分大小写 变量的类型: 4种标量类 ...
- 用汇编语言研究C语言的全局变量、局部变量、参数、返回值放在哪里
前提知识 c0s调用main函数的地址: 11ah main函数的连接地址: 01fah 一.全局变量与局部变量 测试程序 int a1,a2,a3; void f(void); void g(voi ...
- Mondriaan's Dream
poj2411:http://poj.org/problem?id=2411 题意:给你1*2的方块,让你把n*m的房间填好有多少种方式. 题解:状压dp.这一题,我是不会做了,看懂了题解之后,震惊了 ...
- Ferry Loading||
uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...
- Zabbix的集中式监控
相对于传统的ZABBIX硬件系统级监控(CPU,内存,硬盘,网卡),应用级的监控就显得有些复杂了. 如果对不同的应该来不同的应用,配置会很多的. 如果我们能在一个指定的AGENT上监控所有的APACH ...
- /dev/random和/dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- 根据body的内容 查找h2标签的@class="subtitle"的值
<pre name="code" class="html"><body class="api jquery listing" ...