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 ...
随机推荐
- JqGrid自定义toolbar
1.设置toolbar参数为[true,"top"],其意思是toolbar显示在Grid顶部,且其id为t_+Grid的id.e.g.: Grid的id为myGrid,toolb ...
- Smart Client Software Factory安装
首先要安装 Visual Studio 2010 SDK 不然无法安装 Smart Client Software Factory 2010 然后按顺序安装 GAX 2010 http://visua ...
- javascript常用代码大全
http://caibaojian.com/288.html 原文链接 jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ...
- 在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步
在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步 下载安装 vscode-ftp-sync 插件. 安装方法1. Ctrl+Shift+P 输入 ext install [插件 ...
- C# mvc3 mvc4 伪静态及IIS7.5配置
mvc3 mvc4路由配置 //单独路由 routes.MapRoute( name: "XXX", url: "Home/XXX.html/{id}&quo ...
- phalapi
public为程序入口 Demo和MyApp为具体的实现 public为多入口 demo和myapp都是入口,但是进入后即又为单入口 list为接口文档,是自动解析程序里的注释自动生成的文档 框架执行 ...
- isKindOfClass:和isMemberOfClass:-b
isKindOfClass: Returns a Boolean value that indicates whether the receiver is an instance of given c ...
- BZOJ 1021 循环的债务
Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题.不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务的 ...
- hdu-4612-Warm up(边双连通分量--有重边)
题意:有N 个点,M条边,加一条边,求割边最少.(有重边) 分析:先求双连通分量,缩点形成一个生成树,然后求这个的直径,割边-直径即是答案 因为有的图上可能有重边,这样不好处理.我们记录每条边的标号( ...
- (转载)php数组添加、删除元素的方法
(转载)http://www.phpgs.com/html/php/phpjichu/20120130440.html 带来一篇php 数组 添加元素.删除元素的方法的文章,有需要的php学习者参考下 ...