注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

使用Mybatis对存储过程进行调用详细实例说明  

2012-12-12 18:36:15|  分类: Mybatis |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 看了下mybatis源码,有调用存储过程的例子,整理下。如何使用Mybaits调用数据库中的存储过程,下面以Oracle数据库的为例:


1.在数据库中创建以下的存储过程:

create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) is

begin

  p_result := 'hello,' || p_user_name;

end;

 

2.编写SQL映射文件mapper.xml:

<select id="proHello" statementType="CALLABLE">

<![CDATA[

    {call pro_hello (#{p_user_name,mode=IN,jdbcType=VARCHAR},#{result,mode=OUT,jdbcType=VARCHAR})}

]]>

</select>

 

3.编写JAVA代码调用存储过程

public class ProcedureTest {

        

         public static void main(String[] args) throws IOException {

            String resource = "mybatis.cfg.xml";

            Reader reader = Resources.getResourceAsReader(resource);

            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);

       

            SqlSession session = ssf.openSession();

       

           try {

                 Map<String, String> param = new HashMap<String, String>();

                 param.put("p_user_name", "zhangsan");

                 String returnValue = (String) session.selectOne("User.proHello", param);

                 System.out.println("message=" + param.get("p_user_name"));

                 System.out.println("result=" + param.get("result"));

                 System.out.println("returnValue=" + returnValue);

 

           } catch (Exception e) {

                e.printStackTrace();

           } finally {

              session.close();

          }

       }

}

 

4.执行Java代码,控制台输出结果如下:

2012-03-07 20:36:32,406 DEBUG [java.sql.PreparedStatement] -==>  Executing: {call pro_hello(?,?)}

2012-03-07 20:36:32,406 DEBUG [java.sql.PreparedStatement] -==> Parameters: zhangsan(String)

message=zhangsan

 


注意: 

上面就是几种常用的了。 
1 sqlserver oracle sqlserver返回结果集是可以不要out参数的。如果sql中用的是select出结果,不需要配置out参数。多个结果集/结果集可以配置resultMap 来返回LIST,主要是调用selectList方法会自动把结果集加入到list中去的。 
2 sql有返回值 用select标签 
3 注意sql参数和mybatis参数的对应关系,这个这里就不讲了。 
4 注意参数个数 

我遇到的异常: 

使用Mybatis对存储过程进行调用详细实例说明 - 天涯草 - 天涯草
 
参数不匹配的原因,因为sqlserver 中我是直接返回select临时表结果,不需要配置存储过程输出参数。 
list中的内容形式: 
使用Mybatis对存储过程进行调用详细实例说明 - 天涯草 - 天涯草
  

  评论这张
 
阅读(1786)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016