MyBatis调用存储过程,含有返回结果集、return参数和output参数
Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级。而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,ibatis调用存储过程有一个专门的标签<procedure>,在mybats里面已经没有这本标签了,而是通过一个参数statementType="CALLABLE"来区分。废话不多说,直接看怎么写吧!
测试环境:mybats3.0.4 + sqlserver2008 +Spring3.1.1
存储过程:
use base_passport
go
create proc yhj_test
@input_a int,
@input_b int,
@output_c int out
as
begin
select * from config.city;
set @output_c = @input_a*@input_b;
return @input_a+@input_b;
end
Mybats配置:
<resultMap type="java.util.HashMap" id="resultMap">
<result column="city_key" property="cityKey" javaType="java.lang.Integer" jdbcType="INTEGER"/>
<result column="province_key" property="provinceKey" javaType="java.lang.Integer" jdbcType="INTEGER"/>
<result column="city_name" property="cityName" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="testByProc" statementType="CALLABLE" parameterType="java.util.HashMap" resultMap="resultMap">
<![CDATA[
{#{d,mode=OUT,jdbcType=INTEGER}=call dbo.yhj_test(
#{a,mode=IN,jdbcType=INTEGER},
#{b,mode=IN,jdbcType=INTEGER},
#{c,mode=OUT,jdbcType=INTEGER}
)}
]]>
</select>
Java代码
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("a", 2);
paramMap.put("b", 3);
List<City> citys = (List<City>) getTemplate().selectList(getNameSpaceAndMethod("testByProc"), paramMap);
return citys;
通过以上代码我们即可获取对应的结果集,return参数和output参数。其中return参数和output参数放在传入的paramMap中,其中,c是存储过程的output参数,而d为return参数。
需要注意的事项:
1、 存储过程的参数和名称无关,只和顺序有关系
2、 存储过程的output参数,只能通过传入的map获取
3、 存储过程返回的结果集可直接用返回的map接收
4、 存储过程的return结果需要使用?=call procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型
5、 存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR
要点:output是在存储过程中的参数的返回值(输出参数),而ReturnValue是存储过程返回的值(使用return关键字),一个存储过程可以有任意多个依靠参数返回的值,但只有一个ReturnValue。
获取存储过程的返回值--通过查询分析器获得
存储过程大体分成三类:
1、返回记录集的存储过程:执行结果是一个记录集,例如,从数据库中检索出符合某一个或几个条件的记录。
2、返回数值得的存储过程(也可称为标量存储过程),其执行完后返回一个值,例如数据库中执行一个有返回值的函数或命令。
3、行为存储过程,用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。
另外:含有return的存储过程其返回值为return返回的那个值。
没有return的存储过程,无论执行结果又无结果集,其返回值都是0,
带有输出参数的存储过程,如果有RETURN则返回RETURN返回的那个值,如果要SELECT输出参数,则出现输出参数的值,和有无RETURN无关。
转自:http://yhjhappy234.blog.163.com/blog/static/316328322012455714892/
MyBatis调用存储过程,含有返回结果集、return参数和output参数的更多相关文章
- [转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor
本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/ 今天学习了一个Oracle中的存储过程,一开始便被如果返回结 ...
- 存储过程不返回记录集导致ADO程序出错
HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...
- EF 6 调用存储过程时返回多结果集和OUTPUT参数问题
原文地址:http://q.cnblogs.com/q/56836/ 各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题 目前已经可以调用存储过程并且可以返回多个结果集. 但 ...
- spring jdbctemplate调用存储过程,返回list对象
注:本文来源于< spring jdbctemplate调用存储过程,返回list对象 > spring jdbctemplate调用存储过程,返回list对象 方法: /** * 调用 ...
- MyBatis基础:MyBatis调用存储过程(6)
1. 存储过程准备 CREATE PROCEDURE sp_task ( IN userId INT ) BEGIN SELECT * FROM task WHERE user_id = userId ...
- 使用mybatis调用存储过程(注解形式和配置文件形式)
最近在看资料中涉及到mybatis,突然想到mysql中的视图.存储过程.函数.现将在使用mybatis调用mysql的存储过程使用总结下: 使用的环境:mybatis3.4.6,mysql 5.6, ...
- Mybatis调用存储过程报错
Mybatis调用存储过程 贴码 123456 Error querying database. Cause: java.sql.SQLException: User does not have ac ...
- mybatis 调用存储过程 返回游标 实例
存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_curso ...
- Spring data jpa 调用存储过程处理返回参数及结果集
一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...
随机推荐
- PowerDesigner连接Oracle数据库生成数据模型【本地连接方式】
步骤1:选择数据库 步骤2:选择要连接的数据库的版本 步骤3:新建数据库连接 步骤4:提供3种连接数据库方式(在此选择第3种),并且点击配置按钮,进行下一步 步骤5:点击此按钮,填 ...
- mysql_multi启动数据库
1.初始化数据库 在$mysql_base目录下,新增加存放data的文件夹,用mysql_install_db命令执行初始化 [root@ora11g scripts]# ./mysql_insta ...
- ML 06、感知机
机器学习算法 原理.实现与实践 —— 感知机 感知机(perceptron)是二分类的线性分类模型,输入为特征向量,输出为实例的类别,取值+1和-1.感知机学习旨在求出将训练数据进行线性划分的分离超 ...
- 开发Portlet第三步:如何在Crystal Portlet中调用远程服务?
当基于测试数据的Portlet调试完成后,接下来就是引入远程服务,替换测试数据. (此处以Dubbo框架远程服务为例) 分步指南 删除测试数据依赖:在pom.xml文件中,删除对****-servic ...
- Liferay 6.2 改造系列之一:源码编译和服务启动
一.导入源码 源码可以从Liferay的官方网站上下载.http://www.liferay.com/downloads/liferay-portal/available-releases 下载后解压 ...
- canvas之2D上下文
1.填充和描边 (1)fillStyle (2)strokeStyle 2.绘制矩形 (1)fillRect() (2)strokeRect() (3)clearRect() :清除画布上的矩形区 ...
- Android 编程下 DP、SP 以及屏幕像素密度
有时需为视图属性指定大小尺寸值(通常以像素为单位,但有时也用点.毫米或英寸).最常见的属性有: 文字大小(Text Size),指设备上显示的文字像素高度: 边距(Margin),指定视图组件间的距离 ...
- PHP之数据类型
1.PHP字符串(String):一个字符串是一串字符的序列,就像"Hello world!":可以将任何文本放在单引号和双引号中: <?php $x="Hello ...
- 解决Genymotion无法创建新设备或无法显示设备列表问题
准备工作: 链接: https://pan.baidu.com/s/1i5v4IBN 密码: jc3m 用2.8的和最新VirtualBox-5.1.10-112026-Win 注意事项: 1.笔记本 ...
- jQuery实现等比例缩放大图片
在布局页面时,有时会遇到大图片将页面容器“撑破”的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局. 通常我们 ...