通過本文簡單描述下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、測試結果