zoukankan      html  css  js  c++  java
  • ibatis 调用存储过程

    返回系统游标集合

    示例一:多个参数,手动映射返回字段

      第一步:参数配置(入参、出参)

    <!-- property属性指定HashMap的具体键,虽然Map是无序的但是存储过程的入参顺序会按照parameter标签的排列顺序执行,mode属性指定入参或返回值 -->
    <parameterMap class="java.util.HashMap" id="SHEHE_ERROR_Map">
        <parameter property="FRCODE" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
        <parameter property="FORGID" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
        <parameter property="START" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN" />
        <!-- 当oracle数据库参数是number类型时,必须得指定java与oracle数据类型的对应关系 -->
        <parameter property="END" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN" />
        <!-- 当oracle数据库参数是游标时,必须得指定java与oracle数据类型的对应关系 -->
        <parameter property="out_cur" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" />
    </parameterMap>  

      第二步:返回值,将返回值封装到HashMap中

    <resultMap class="java.util.HashMap" id="directoryMonitor_out_cursor">
        <!-- column代表的是返回的字段,property代表的是HashMap的键,指定具体的键负责接收 -->    
        <result property="FORGID" column="FORGID"/>
        <result property="FORGNAME" column="FORGNAME"/>
        <result property="FCENNAME_TEM_COUNT" column="FCENNAME_TEM_COUNT"/>
        <result property="ISNULLCENCODE_COUNT" column="ISNULLCENCODE_COUNT"/>
        <result property="TOTALCOUNT" column="TOTALCOUNT"/>
    </resultMap>

      第三步:调用存储过程

    <!-- ?号的个数须与<parameter>标签的个数保持一致 -->
    <procedure id="getSHEHE_ERROR_DATA" parameterMap="SHEHE_ERROR_Map" resultMap="directoryMonitor_out_cursor">
           <![CDATA[
              {call PRC_DIAITEM_MONITOR(?,?,?,?,?)}
           ]]>
    </procedure>

    2020/04/18

      说明:参数映射parameterMap的步骤不能省略(第一步);

      返回值映射可以省略(第二步);

      另外,mode的值:IN或者OUT必须大写;

      只有当数据库的字段是varchar2类型时,可以和java的String类型自动匹配,也就是不用声明javaType和jdbcType,否则其他数据类型都得指定匹配对象。

      不然就会报这个错。

    示例二:只有一个参数,自动映射返回数据

    <!-- 指标三级查询 -->
    <!-- ?映射,和?数量保持一致 -->
    <parameterMap class="java.util.HashMap" id="indexMap">
        <!-- 游标cursor必须声明属性javaType和jdbcType,并设置值 -->
        <parameter property="OUT_CURSOR" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
    </parameterMap>
    <!-- parameterMap必须映射,resultMap可以不做映射,直接用resultClass接收返回的数据 -->
    <procedure id="getIndexDetail" parameterMap="indexMap" resultClass="java.util.HashMap">
        <![CDATA[
            {call PRC_INDEX_SEARCH(?)}
        ]]>
    </procedure>
    

    20200616

      说明:当只有一个问号?,用于接收存储过程返回结果时,可以使用resultClass接收,不用映射返回数据,否则,返回的数据都要进行映射!!!

      不管是parameterMap还是resultMap,都可以做数据类型转换映射,这个视情况需要而改。

  • 相关阅读:
    Redis数据库概述
    分布式爬虫(一)------------------分布式爬虫概述
    Spark环境搭建(五)-----------Spark生态圈概述与Hadoop对比
    错误解决记录------------rhel安装Mysql软件包依赖 mariadb组件
    rhel 7安装Mysql
    Linux虚拟机搭建本地yum源
    rhel配置网络yum源
    Spark环境搭建(四)-----------数据仓库Hive环境搭建
    冲销会计凭证:FBRP与FB08的区别
    xk01创建供应商保存的时候,提示错误“科目800001已经存在”
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9483566.html
Copyright © 2011-2022 走看看