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、测试结果
这里写图片描述

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