MyBatis 3 中使用存储过程
转:http://zachary-guo.iteye.com/blog/1756689
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 3 中使用存储过程的更多相关文章
- MyBatis中调用存储过程和函数
一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 v ...
- mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))
step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// ...
- Mybatis调用Oracle中的存储过程和function
一.Mybatis调用存储过程 1 在数据库中创建以下的存储过程create or replace procedure pro_hello(p_user_name in varchar2,p_resu ...
- Mybatis调用数据库的存储过程和方法
转载. https://blog.csdn.net/ml0228123/article/details/81002258 上次的项目,要求我用java代码调用存储过程,折腾了好久.最后总算成功了 ...
- Entity Framework 6 Recipes 2nd Edition(10-6)译 -> TPT继承模型中使用存储过程
10-6. TPT继承模型中使用存储过程 问题 想在一个TPT继承模型中使用存储过程 解决方案 假设已有如Figure 10-6所示模型. 在模型里, Magazine(杂志) and DVD继承于基 ...
- Entity Framework 6 Recipes 2nd Edition(10-7)译 -> TPH继承模型中使用存储过程
10-7. TPH继承模型中使用存储过程 问题 用一个存储过程来填充TPH继承模型的实体 解决方案 假设已有如Figure 10-7所示模型. 我们有两个派生实体: Instructor(教员)和St ...
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
随机推荐
- g++ 编译c文件
//编译c文件为.o文件 g++ -c virify.c //打包.o文件为.a静态库文件 ar crv libandroid_um36_virify.a virify.o //将静态库.a文件编译进 ...
- 上传Android或Java库到Maven central repository(转载)
主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库. 是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用 ...
- HDU 2674 N!Again
一开始以为有循环节,输出了前100项发现n>40都是0.因此,水题.... #include<cstdio> ]; ; int main() { a[]=; ; i<=; i+ ...
- EF5修改edmx表结构保存后不自动更新tt (转)
http://blog.csdn.net/panderman/article/details/8172968 不知道这算不算一个bug,当你新建一个从数据库生成的edmx时,他能正确的生成所有的tt文 ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...
- HBase集群安装
1.HBase的机群搭建过程(在原来的hadoop0上的HBase伪分布基础上进行搭建)1.1 集群结构,主节点(hmaster)是hadoop0,从节点(region server)是hadoop1 ...
- 提升html5的性能体验系列之四使用原生ui
原生UI即nativeUI的设计目的 HTML和css有一个优势就是灵活的样式设计.在大多数情况下,我们都应该使用HTML+css来负责UI.但是有些情况下,我们发现HTML+css的UI不满足需求. ...
- 在程序中用new ClassPathXmlApplicationContext()的注意事项
http://blog.csdn.net/budapest/article/details/38493003
- Changing a remote's URL
原文: https://help.github.com/articles/changing-a-remote-s-url/ Changing a remote's URL MAC WINDOWS LI ...
- byte[]和InputStream的相互转换
1:byte[]转换为InputStream InputStream sbs = new ByteArrayInputStream(byte[] buf); 2:InputStream转换为Input ...