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

mybatis调用存储过程返回游标,通过hashMap映射结果集 典型的应用就是,mapper中调用存储过程,配置一个resultMap,map中写明bean的属性名,和属性类型,以及游标中的字段名, 但是当后台新增或者修改一个字段的名字或者类型时,xml中就必须做相应的变化,很不方便,   写resultMap是很蛋疼的 之间用map接受就方便多了 网上找了好句没有找到,于是就自己摸索了一下 踩过的坑,就不要再踩二次了 bean: package... 阅读详情
1.创建一个包

此处创建一个包,是为了创建存储过程时,用游标作为out输出参数时声明为游标类型用的.

--创建一个包
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
<?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.casic.dao.EmpMapper">
    <resultMap id="resultMap3" type="com.casic.model.Emp">
        <result property="empno" column="empno"/>
        <result property="ename" column="ename"/>
        <result property="job" column="job"/>
        <result property="mgr" column="mgr"/>
        <result property="hiredate" column="hiredate"/>
        <result property="sal" column="sal"/>
        <result property="comm" column="comm"/>
        <result property="deptno" column="deptno"/>
   </resultMap>
    <!-- 根据部门编号 查询员工信息列表 -->
    <!-- 
        statementType="CALLABLE" :表明调用的是存储过程;
        parameterType="java.util.Map" :参数是一个map,所以在传参时需要传入一个map集合.(我尝试了其他的类型,比如int,不行!这点跟mysql不一样);
    -->
    <select id="queryEmpByDeptno" statementType="CALLABLE" parameterType="java.util.Map" >

    <!--传入传出参数要注明mode=IN/OUT 并要注明jdbcType(在网上可以查询mybatis支持哪些jdbcType类型),返回参数要注明对应的resultMap 
        注意:这里pdeptno,result都是参数map集合的key值.
    -->
       {call QUERYEMPSBYDEPTNO(#{pdeptno,mode=IN,jdbcType=INTEGER},#{result,jdbcType=CURSOR,mode=OUT,javaType=ResultSet, resultMap=resultMap3})}
    </select>
 </mapper>
4.EmpMapper.java
package com.casic.dao;

import java.util.List;
import java.util.Map;

import com.casic.model.Emp;

public interface EmpMapper {

    /*
     * 根据部门编号加载员工信息列表
     */
    List<Emp> queryEmpByDeptno(Map<String, Object> 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<Emp> queryDeptEmps(Map<String, Object> 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<Emp> queryDeptEmps(Map<String, Object> param) {
        //查询的过程中,已经将结果集封装到了param集合中
        empMapper.queryEmpByDeptno(param);
        //根据key获取到结果集,并进行强转
        List<Emp> empList=(List<Emp>)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<String, Object> param = new HashMap<String, Object>();
        //对于in参数赋值
        param.put("pdeptno",emp.getDeptno());
        //对于out参数 申明
        param.put("result",OracleTypes.CURSOR);
        List<Emp> 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" %>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>emp list</title>
    </head>
    <body>
        <table cellspacing="1" bordercolor="#990000" cellpadding="1" border="1px">
            <tr>
                <td>
                    <form action="queryEmp" method="get">
                        <label>部门编号:</label>
                        <select name="deptno">
                            <option value="0">全部</option>
                            <option value="10">10</option>
                            <option value="20">20</option>
                            <option value="30">30</option>
                            <option value="40">40</option>
                        </select>
                        <input type="submit" value="Research">
                    </form>
                </td>
            </tr>
            <tr>
                <th>序号</th>
                <th>编号</th>
                <th>姓名</th>
                <th>职位</th>
                <th>领导编号</th>
                <th>入职日期</th>
                <th>工资</th>
                <th>奖金</th>
                <th>部门编号</th>

            </tr>
            <c:forEach items="${emps}" var="emp" varStatus="vs">
                <tr>
                    <td>${vs.count }</td>
                    <td>${emp.empno }</td>
                    <td>${emp.ename }</td>
                    <td>${emp.job }</td>
                    <td>${emp.mgr }</td>
                    <td><fmt:formatDate pattern="yyyy-MM-dd" value="${emp.hiredate}" /></td>
                    <td>${emp.sal }</td>
                    <td>${emp.comm }</td>
                    <td>${emp.deptno }</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>
9.参考文章
  1. Oracle存储过程,以游标的方式返回一个记录集
  2. mybatis调用oracle存储过程
  3. mybatis 调用存储过程 返回游标 实例
  4. Mybatis调用Oracle返回结果集存储过程
MD01和MD01N比较 摘要:MD01(传统MRP)与MD01N(MRP Live)是SAP系统不同版本的物料需求计划事务码。核心差异包括:MD01N取消MRP列表、简化计划规则、合并MPS/MRP操作、采用BAdI技术等,体现S/4HANA平台简化、标准化和智能化的演进方向。MD01N通过优化参数配置、增强筛选功能、利用HANA实时计算能力,实现了更高效的物料计划流程,代表了新一代计划引擎的技术革新。 阅读详情

相关推荐

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

mybatis调用oracle存储过程 返回结果集

一、ORACLE 1、创建包 CREATE OR REPLACE PACKAGE pkg_test IS TYPE v_cur IS REF CURSOR; PROCEDURE p_test ( param1 IN VARCHAR2, param2 IN VARCHAR2, p_cur ...

小划乐的博客 1785

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2535

mybatis调用Oracle存储过程,并接收返回值(游标类型)

初次学习存储过程调用,写得不是很好,有不对的地方大家多多指教,希望能对您有所帮助。1.普通返回值:Oracle存储过程:/*测试用存储过程*/create or replace procedure p_test(v_slid in varchar2,v_sm out varchar2,v_sm2 out varchar2) authid current_user is begin declar...

anle1022的博客 1万+

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1820

XPe开发初体验(一)XPe概述

XP Embedded是微软Windows Embedded产品线中非常重要的一环,不过比起大名鼎鼎的Windows Embedded CE,XPe显得过于低调了。在接下来的一段时间里,我希望能够用六篇的篇幅来描述一下XPe的整个开发过程。这个系列文章主要是针对有Windows编程经验,但是没有嵌入式开发经验的开发者,提供一些概念和开发过程的初步介绍。XP Embedded是一个基于Windo

aawolf = new Mobile.MVP 1万+

Mybatis调用Oracle存储过程返回游标结果集

Spring Mybatis调用Oracle存储过程返回游标结果集

CJW的博客 1167

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】

qq_45776114的博客 3534

mybatis调用oracle11g存储过程/函数

mybaits调用oracle11g存储过程/函数pom依赖log4j.propertiesentity实体类Mapper接口mybatis-config.xmlDeptMapper.xmloracle中的存储过程FindAllDeptById()find_all_dept()测试类DeptMapperTest pom依赖 oracle数据库版本为 11g,jdk1.8 <dependency> <groupId>org.projectlombok</groupId&g

输入技术、输出想法 2506

Ubuntu零基础入门到精通【1.1讲】:什么是 Ubuntu?一文带你彻底搞懂!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 5834

海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)

海洋CMS admin_notify.php 接口处存在远程代码执行漏洞,经过身份验证的远程攻击者可利用该漏洞执行任意代码,写入后门文件,进而控制整个web服务器。

0xSec 2714

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

之前一直都是用SSM+Mysql数据库做开发,突然一下子要换成Oracle数据库,感到非常不熟悉.虽然学过Oracle数据库,但由于使用Oracle数据库,牵涉到写存储过程等,所以相对复杂些.根据网上散落的资料,自己在学习之后,做出来的一个示例,分享给大家,以供交流学习.1.定义包头oracle存储过程返回结果集需要自定义一个CURSOR(游标变量)性质的变量,这个要在包头定义,所以此处首先创建一...

weixin_39648432的博客 640

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2567

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

原文参考:https://www.jianshu.com/p/0ae6d9d66d61?tdsourcetag=s_pctim_aiomsg 1.创建一个包 此处创建一个包,是为了创建存储过程时,用游标作为out输出参数时声明为游标类型用的. --创建一个包 create or replace package types as type empListCursor is ref curso...

雪儿的博客 2108

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SSM-Mybatis调用Oracle存储过程返回结果集(游标):从配置到验证的完整实践

SSM 项目用 Mybatis 调 Oracle 游标存储过程返回结果集,关键在 Mapper XML 的 statementType=CALLABLE、jdbcType=CURSOR、javaType=ResultSet 与 resultMap 四件套,parameterType 必须为 Map。本文从建包建过程到 Service 回填、Controller 验证逐步给出可复制配置,并整理 invalid column type、ORA-06550 等报错排查。排障可借助 TaoToken 模型对话解释报

weixin_35987118的博客 170

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ssm框架下使用java代码调用oracle存储过程查询单表返回结果集记录

对于存储过程语法这里不再详细解说,请自行百度。 ** 1.创建存储过程mydemo08(返回int类型数据),其中输入参数为ids,输出参数为bmode。 ** create or replace procedure mydemo08(ids in varchar,bmode out int) as begin select Y_MODE into bmode from REC_BALANCE...

北冥有雨 480

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SSM框架下,MyBatis中调用Oracle数据库的存储过程、函数、以及使用序列做自增列添加

本文主要整理了关于mybatis框架中调用Oracle数据库中的函数、存储过程等操作。以及SSM框架连接Oracle数据库的使用。业务逻辑仅供测试参考使用。 一、Oracle数据库端创建表格、序列、存储过程procedure、有返回值函数function 1 表结构如下: <!--1、试题表--> create table question( qid number(4,0) primary key,--试题ID que varchar2(50) not null,.

weixin_49702090的博客 2286

SSM调用oracle存储过程实现权限菜单

Oracle数据库存储过程 /*获取主菜单存储过程定义*/        create or replace procedure getMainMenu(        userAccount t_user.user_account%TYPE,        userPassword t_user.user_password%TYPE,        right_cursor out s

f4qiankehua的博客 500

ssm调用后台oracle存储过程统计分析数据

笔者所在项目需要一个统计本机构近6月收入情况(分两种)、本机构下级机构收入情况的需求,数据量为百万级。 具体需求是时间、机构都不确定,可为入参。 综合考虑后决定使用后台存储过程统计。 基础表结构如下:(本功能只用到红框部分) 1.创建用于返回数据的游标: create or replace package clf_yxfx as type type_cursor is re...

weixin_30752377的博客 281

oracle写存储过程ssm中调用存储过程

在package中定义存储过程 create or replace package PEIS_ReportPictureManage is type ref_cur is ref cursor; procedure YW_QueryPic(paraTJH000 in varchar2, paraBMBH00 in varchar2, ...

WY001的博客 731

SSM(MyBatis+Spring+SpringMVC)Oracle存储过程应用实战

      存储过程可以让我们的数据库操作的效率变高,因为存储过程是提前编译好了。不同于我们发送一条SQL,每次都需要经历系列步骤(语法检查——语义分析——编译——缓存——执行),使用存储过程的话直接就是执行编译好的内容,这样有利于提升系统的性能,尤其是在高并发的情况下这样的效果应该是最为明显的。那么接下来我就分享一下我是如何使用Oracle的存储过程的吧!...

muzi木子 583

spring mvc调用mysql存储过程_spring+springMvc+mybatis 调用oracle 存储过程

最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键,接下来整理代码:首先构建存储过程getSequence,一个输入,输出参数。省略数据库表的创建。create or replaceprocedure getSequence(tableName in varchar...

weixin_35950078的博客 266

bat 存储过程返回值_使用Mybatis过程中遇到的坑

常规SSM框架开发中,mybatis遇到的坑是最多的,把以下几点坑记录下来防止以后再遇到同样的情况。1、mybatis 若果在mapper中返回值没有配置resultMap而是使用resultType直接返回的话,那么当心默认配置中的驼峰匹配规则,参考以下配置文件。该情况适用于bean属性字段和数据库完全一致且字段名带有下划线如(user_menu)这样的字段时<?xml version="...

weixin_39620943的博客 289

java事务 存储过程 事务_SpringMVC与Mybatis集合实现调用存储过程、事务控制实例...

在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下:1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回):CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2,NewRecNo out Number) as...

weixin_39859954的博客 313

SpringMVC与Mybatis集合实现调用存储过程、事务控制

在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下: 1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回): CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2,

木头若愚 1万+

Mybatis调用Oracle中的函数有返回值

本身这个项目后台是用SSM框架,试了网上好多种有返回值的方法返回都是空; 下面是我调用方法: 这是我的函数 我在Mybatis的写法是: SELECT DEAL_EBOND_ICODE_DATA(#{iCode,jdbcType=VARCHAR}) AS A from dual 在DAO层 这种写法可以直接获取返回值,而且和其他一般的方法没什么区别! 转载于:http...

weixin_30908707的博客 554
上一篇: Invalid bound statement (not found)
下一篇: SpringMVC Controller层接收表单提交的数据时,发生Sring转换为Date异常
javaee_sunny
博客等级 码龄11年 90粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值