Mybats 是 iBatis 被 Google 收购后重新命名的一个工程,当然也做了大量的升级。iBatis 2.x 调用存储过程有一个专门的标签 <procedure>,在 Mybats 3.x 里面已经没有这个标签了,而是通过一个参数 statementType="CALLABLE" 来区分。
存储过程有三种类型的参数,分别为 IN(输入参数),OUT(输出参数),INOUT(输入输出参数)。一个存储过程,可以有多个 IN 参数,至多有一个 OUT 或 INOUT 参数。
◇ 只有 IN 参数的存储过程
CREATE PROCEDURE proc_only_input (
@hello VARCHAR(8) IN
) AS
...
<select id="selectSth" statementType="CALLABLE" parameterType="hashmap">
<![CDATA[
{ call proc_only_input(#{good, mode=IN, jdbcType=VARCHAR}) }
]]>
</select>
Map params = new HashMap();
// 调用存储过程的传递的参数名可以不和定义存储过程的参数名保持一致,只要保证它们的顺序是一致的即可。
params.put("good", "china");
session.select("pkg.selectSth", params);
◇ 有 INOUT 或 OUT 参数的存储过程
CREATE PROCEDURE proc_out (
@yes VARCHAR(8) IN,
@fly VARCHAR(16) OUT
) AS
...
return 'return something'
<!--
如果调用的过程中存在 out 参数,那么所有的参数都必须用问号的形式传入,如: { call test_procedure(?, ?, ?, ?)}。要是有参数不是问号形式传入,如:{ call test_procedure(?, 3, ?, ?)},则会异常伺候:Output parameter not allowed as argument list prevents use of RPC
另外,对于有输出参数的存储过程,理论上也可以这样写:
{ #{gog, mode=OUT, jdbcType=VARCHAR} = call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}) }
可我在 sql server 中尝试这样写,报错,说是却是 @fly 参数(proc_out 的第二个参数的名字就是 fly)。既然如此,那我就一个一个参数的写,就像下面的这样。
-->
<select id="selectSth" statementType="CALLABLE" parameterType="hashmap">
<![CDATA[
{ call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}, #{gog, mode=OUT, jdbcType=VARCHAR}) }
]]>
</select>
Map params = new HashMap();
// 调用存储过程的传递的参数名可以不和定义存储过程的参数名保持一致,只要保证它们的顺序是一致的即可。
// 同时,存储过程的输出参数的值必须通过 map 来接收
params.put("yes", "china");
session.select("pkg.selectSth", params);
// 得到输出参数的值
String result = params.(String) get("gog");
分享到:
相关推荐
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...
mybatis调用orclae存储过程
完整的mybatis调用存储过程,解压解压后附加就可使用,注释详细
mybatis调用mysql中的存储过程方法详解
怎么使用MyBatis调用存储过程,步骤详细清楚,一看就会配置
MyBatis调用MYSQL存储过程 返回多行 引用的包: asm-3.1.jar cglib-2.2.jar commons-logging-1.1.1.jar log4j-1.2.13.jar mybatis-3.0.4.jar mysql-connector-java-5.1.13.jar slf4j-api-1.5.8.jar slf4j-log4j12-...
这是mybatis调用存储过程的代码
主要介绍了mybatis+mysql 使用存储过程生成流水号的实现代码,需要的朋友可以参考下
spring mvc + mybatis 调用mysql 存储过程
在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
主要介绍了Mybatis调用Oracle存储过程的方法介绍,需要的朋友可以参考下
项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: 代码如下:CREATE OR REPLACE FUNCTION “public”.”func_...
MySql5.0存储过程教程,MyBatis3 中文教程
给大家介绍了Mybatis 中使用Mysql存储过程的方法,本文通过实例代码相结合的形式给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
ibatis调用oracle存储过程分页
主要介绍了mybatis调用存储过程的实例,非常不错,具有参考借鉴价值,需要的朋友可以参考下
主要介绍了SpringMVC与Mybatis集合实现调用存储过程、事务控制实例,有需要的可以了解一下。
本篇文章主要介绍了Mybatis调用MySQL存储过程的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 ...
MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常优秀的持久层框架。接下来通过本文给大家介绍mybatis调用视图和存储过程的方法,感兴趣的朋友一起看看吧