mybatis游标查询_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 pListCursor) is
oracle游标的使用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;
l
-- 注意:此处的id要设置成唯⼀的
-- 否认会出现如下异常:java.lang.IllegalArgumentException: resultMap3is ambiguous in Result Maps collection
{
call QUERYEMPSBYDEPTNO(
#{pdeptno,mode=IN,jdbcType=INTEGER},
#{result,jdbcType=CURSOR,mode=OUT,javaType=ResultSet, resultMap=resultMap3}
)
}
4.EmpMapper.java
package com.casic.dao;
import java.util.List;
import java.util.Map;
import del.Emp;
public interface EmpMapper {
/* * 根据部门编号加载员⼯信息列表 */
List queryEmpByDeptno(Map param );
}
5.EmpService.java
package com.casic.service;
import java.util.List;
import java.util.Map;
import del.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 del.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=(("result");
return empList;
}
7.EmpController.java
package ller;
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 del.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",Deptno());
//对于out参数 申明 param.put("result",OracleTypes.CURSOR);
List emps = empService.queryDeptEmps(param);
model.addAttribute("emps", emps);
return "showEmps";
}
}
8.showEmps.jsp
emp list
部门编号:
全部
10
30
40
序号编号姓名职位领导编号⼊职⽇期⼯资奖⾦部门编号${vs.count }${pno }${ame }${emp.job }${ }${emp.sal }${empm }${emp.deptno } 9.参考⽂章
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论