SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例

之前一直都是用SSM+Mysql数据库做开发,突然一下子要换成Oracle数据库,感到非常不熟悉.虽然学过Oracle数据库,但由于使用Oracle数据库,牵涉到写存储过程等,所以相对复杂些.根据网上散落的资料,自己在学习之后,做出来的一个示例,分享给大家,以供交流学习.

1.定义包头

oracle存储过程返回结果集需要自定义一个CURSOR(游标变量)性质的变量,这个要在包头定义,所以此处首先创建一个包头.

-- 创建一个包头
-- types: 包名
create or replace
package types
as 
type empListCursor is ref cursor;
end types;

2.创建存储过程

in表示存储过程的输入参数,用out表示存储过程的输出参数,此处输出参数为游标.

CREATE OR REPLACE PROCEDURE 
QUERYEMPSBYDEPTNO(pdeptno in Integer,empList out types.empListCursor) is
BEGIN 
if pdeptno=0 then 
open empList for select * from emp; 
else  
open empList for select * from emp where deptno=pdeptno; 
end if;
END QUERYEMPSBYDEPTNO;

3.EmpMapper.xml

 
 
 

 -- 注意:此处的id要设置成唯一的!!!
 -- 否认会出现如下异常:java.lang.IllegalArgumentException: resultMap3is ambiguous in Result Maps collection


      
      
      
      
     
      
      
      


  

  

4.EmpMapper.java

package com.casic.dao;
import java.util.List;
import java.util.Map;
import com.casic.model.Emp;
public interface EmpMapper { 
/* * 根据部门编号加载员工信息列表 */ 
List queryEmpByDeptno(Map param );
}

5.EmpService.java

package com.casic.service;
import java.util.List;
import java.util.Map;
import com.casic.model.Emp;public interface EmpService {  
/* * 根据部门编号,加载员工信息列表 */ 
List queryDeptEmps(Map param);
}

6.EmpServiceImpl.java

package com.casic.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.casic.dao.EmpMapper;
import com.casic.model.Emp;
import com.casic.service.EmpService;
@Service("empService")
public class EmpServiceImp implements EmpService { 
@Autowired 
private EmpMapper empMapper; 
public List queryDeptEmps(Map param) { 
//查询的过程中,已经将结果集封装到了param集合中 empMapper.queryEmpByDeptno(param); 
//根据key获取到结果集,并进行强转 
List empList=(List)param.get("result"); 
return empList; 
}
}

7.EmpController.java

package com.casic.controller;
import java.util.HashMap;
import java.util.List;import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.casic.model.Emp;
import com.casic.service.EmpService;
import oracle.jdbc.driver.OracleTypes;
@Controller
@RequestMapping("/empController")
public class EmpController { 
@Autowired 
private EmpService empService;  
/* * 根据部门编号查询员工信息列表 */ 
@RequestMapping("/queryEmp") 
public String showDeptEmps(Emp emp,Model model){
 Map param = new HashMap(); 
//对于in参数赋值 
param.put("pdeptno",emp.getDeptno()); 
//对于out参数 申明 param.put("result",OracleTypes.CURSOR); 
List emps = empService.queryDeptEmps(param); 
model.addAttribute("emps", emps); 
return "showEmps"; 
}
}

8.showEmps.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

 
 
 emp list 
 
 
 
    
序号 编号 姓名 职位 领导编号 入职日期 工资 奖金 部门编号
${vs.count } ${emp.empno } ${emp.ename } ${emp.job } ${emp.mgr } ${emp.sal } ${emp.comm } ${emp.deptno }

9.参考文章

<1> Oracle存储过程,以游标的方式返回一个记录集
<2> mybatis调用oracle存储过程
<3> mybatis 调用存储过程 返回游标 实例
<4> Mybatis调用Oracle返回结果集存储过程

你可能感兴趣的:(SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例)