mybatis調用ORACLE存儲過程

通過本文簡單描述下mybatis如何調用存儲過程,以及獲取相應的結果集。
1、數據庫表結構

create table TSYS_USER
(
  id            NUMBER(38) not null,
  user_name     VARCHAR2(100),
  login_name    VARCHAR2(100),
  user_password VARCHAR2(100),
  user_phone    VARCHAR2(100),
  user_type     VARCHAR2(4),
  create_date   DATE,
  user_group    INTEGER
)

數據自己插入吧,這裏不再贅述。

2、利用mybatis代碼工具自動生成實體類和mapper文件,實體類User就不貼代碼了.
User中添加toString()方法,爲方便後面的信息打印。

3、 返回簡單類型的存儲過程
(1)創建簡單存儲過程,根據id獲取數據庫中tsys_user表的user_name,語句如下:

CREATE OR REPLACE Procedure getUserNameById(tid integer,name out varchar2)
As
begin
  select user_name into name from tsys_user  where id=tid;
End;

(2)創建的測試Mapper-TestMapper.xml如下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.cicc.am.test.TestMapper" > 
 <select id="SelectProNameById" statementType="CALLABLE" parameterType="java.util.Map" > 
   {call getUserNameById(#{tid,mode=IN,jdbcType=INTEGER},#{name,mode=OUT,jdbcType=VARCHAR})}                                                                                                           
 </select>

</mapper>

(3)調用存儲過程語句

Map<String, Object> props2 = new HashMap<String, Object>();
String name=null;
props2.put("tid", 211);//入參 tid
props2.put("name", name);//出參  user_name
baseService.executeProcedureByMap(props2, "com.cicc.am.test.TestMapper.SelectProNameById");
System.out.println(props2.get("name"));

4、返回遊標結果集的存儲過程
(1)創建返回遊標結果集的存儲過程,獲取數據庫中tsys_user表的所有用戶信息,語句如下:

CREATE OR REPLACE Procedure getUserList(cur_arg out Sys_Refcursor)
As  
begin  
    open cur_arg for Select * From tsys_user;  
End;

(2)TestMapper.xml增加配置如下:

 <select id="SelectProList" statementType="CALLABLE" parameterType="java.util.Map" > 
  {call getUserList(#{cur, mode=OUT,     jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=com.cicc.am.source.security.user.UserMapper.BaseResultMap})}                                                                                                           
 </select>

(3)調用存儲過程語句

Map<String, Object> props = new HashMap<String, Object>();
        List<User> temp=new ArrayList<User>();
        props.put("cur", temp);//出參cursor結果集
        baseService.executeProcedureByMap(props, "com.cicc.am.test.TestMapper.SelectProList");
        List<User> user_list=(List<User>)props.get("cur");
        System.out.println(user_list);

5、測試結果
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章