springmvc+mybatis 调用oacle 存储过程返回游标!

oracle存储过程如下:

HB_SAVE_MSG.P_QUERY_QUESTION_OF_QTA

  PROCEDURE P_QUERY_QUESTION_OF_QTA
        (
        v_PaperID         IN          NUMBER,
        v_myCursor        out         MYCURSOR,
        v_optCursor       out         MYCURSOR
        )
        IS
        BEGIN
            OPEN v_myCursor FOR
              SELECT A.QUESTION_ID,A.CONTENT,A.QTYPE_ID FROM T_QUESTION A INNER JOIN T_PQ_RELATION B ON A.QUESTION_ID=B.QUESTION_ID WHERE B.PAPER_ID=v_PaperID;
            OPEN v_optCursor FOR
            SELECT M.OPTION_ID,M.QUESTION_ID,M.OPTION_NO,M.OPTION_CONTENT,M.SCORE,M.SUB_QT_ID FROM T_OPTION M WHERE M.QUESTION_ID IN (SELECT N.QUESTION_ID FROM T_PQ_RELATION N WHERE N.PAPER_ID=v_PaperID) ORDER BY M.OPTION_ID;

        END P_QUERY_QUESTION_OF_QTA;

Java端:

根据查询结果新建bean

import java.util.List;
/**
 *
 *
 * 为了方便 HB_SAVE_MSG.P_QUERY_QUESTION_OF_QTA/HB_SAVE_MSG.P_READ_QUESTION_BY_ID存储过程创建的实体bean。
 *
 * @author ly
 *
 */
public class StrBoys {

    private Integer question_id;//题库id
    private String content;//标题
    private Integer qtype_id;//题型表id

        public Integer getQuestion_id() {
        return question_id;
    }
    public void setQuestion_id(Integer question_id) {
        this.question_id = question_id;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getQtype_id() {
        return qtype_id;
    }
    public void setQtype_id(Integer qtype_id) {
        this.qtype_id = qtype_id;
    }

}
/**
 *
 *
 * 为了方便 HB_SAVE_MSG.P_QUERY_QUESTION_OF_QTA/HB_SAVE_MSG.P_READ_QUESTION_BY_ID存储过程创建的实体bean。
 *
 * @author ly
 *
 */
public class Question {

    private Integer option_id;//选项ID
    private Integer question_id;//问题id
    private String  option_on;//选项编号A,B,C等,填空题为空
    private String option_content;//选项内容
    private Integer score;//分值
    private Integer sub_qt_id;//子问题id
    public Integer getOption_id() {
        return option_id;
    }
    public void setOption_id(Integer option_id) {
        this.option_id = option_id;
    }
    public Integer getQuestion_id() {
        return question_id;
    }
    public void setQuestion_id(Integer question_id) {
        this.question_id = question_id;
    }
    public String getOption_on() {
        return option_on;
    }
    public void setOption_on(String option_on) {
        this.option_on = option_on;
    }
    public String getOption_content() {
        return option_content;
    }
    public void setOption_content(String option_content) {
        this.option_content = option_content;
    }
    public Integer getScore() {
        return score;
    }
    public void setScore(Integer score) {
        this.score = score;
    }
    public Integer getSub_qt_id() {
        return sub_qt_id;
    }
    public void setSub_qt_id(Integer sub_qt_id) {
        this.sub_qt_id = sub_qt_id;
    }

}

mybatis :

<mapper namespace="com.ly.sa.dao.WjDao">

    <resultMap id="resultMap1" type="com.ly.sa.entity.StrBoys" >
        <result property="question_id" column="QUESTION_ID" />
        <result property="content" column="CONTENT"  />
        <result property="qtype_id" column="QTYPE_ID"   />
    </resultMap>

    <resultMap id="resultMap2" type="com.ly.sa.entity.Question" >
        <result property="option_id" column="OPTION_ID" />
        <result property="question_id" column="QUESTION_ID" />
        <result property="option_on" column="OPTION_NO" />
        <result property="option_content" column="OPTION_CONTENT" />
        <result property="score" column="SCORE" />
         <result property="sub_qt_id" column="SUB_QT_ID" />
    </resultMap>

    <select id="wjdas" statementType="CALLABLE" parameterType="java.util.HashMap">
    <![CDATA[
     {call HB_SAVE_MSG.P_QUERY_QUESTION_OF_QTA(#{v_paperid,mode=IN,jdbcType=INTEGER},
     #{v_mycursor,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=resultMap1},
     #{v_optcursor,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=resultMap2}
     )}
    ]]>
    </select>

Service:

    public void wjdas(Map<String, Object> map) {
        wjDao.wjdas(map);
    }

Controller 关键代码:

Map<String, Object> map = Maps.newHashMap();
        try {
            map.put("v_paperid", pid);
            map.put("v_mycursor",oracle.jdbc.OracleTypes.CURSOR);
            map.put("v_optcursor",oracle.jdbc.OracleTypes.CURSOR);
            wjserver.wjdas(map);//传入存储过程参数调用dao。
            List<Question> dage=(List<Question>) map.get("v_mycursor");//获取游标返回的数据。

刚开始学mybatis ,希望大家可以一起交流、

时间: 2024-10-10 14:24:19

springmvc+mybatis 调用oacle 存储过程返回游标!的相关文章

mybatis调用mysql存储过程返回多结果集(完整)

最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的.中午抽空特地搜了下,整合完整示例如下: 1.创建测试存储过程 delimiter $$ CREATE PROCEDURE sp_multi_resultset(IN p_operator_company_no int, IN p_operator_no int, OUT p_error_code v

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

存储过程中经常需要返回结果集. Mysql 中直接用 select 即可返回结果集.而 oracle 则需要使用游标来返回结果集.这一点 Mysql 相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP procedure IF EXISTS pro_sql_data1 $$ CREATE procedure pro_sql_data1(in sear_name varchar(2000)) BEGIN if sear_name is not null

Mybatis调用PostgreSQL存储过程实现数组入参传递

注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递  > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: CREATE OR REPLACE FUNCTION "public"."func_arr_update"(ids _int4)... 1 如上所示,参数是一个int数组,Mybatis提

mybatis 调用存储过程 返回游标 实例

存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_cursor out sys_refcursor) is ……………… ---返回统计结果 open v_Cursor for select s.plan_code, s.plan_dept, s.plan_amount, s.exec_amount, p.cname as plan_name, d.cnam

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

/** 调用Oracle存储过程 */ public ResultSet queryForAllJSD_NEWEST(final String hpCode, final String id) { System.out.println("hpCode:"+hpCode+",id:"+id); ResultSet rs = (ResultSet)this.jdbctemplate.execute("{call pro_querybcb_newest(? ,

ibatis调存储过程返回游标

http://blog.sina.com.cn/s/blog_6f3ca78f01010pmj.html iBatic调用与JAVA调用很类似,只是JAVA把参数的注册放到了类里面,而iBatis把参数的注册放到了XML配置文件里,下面两个例子,第一个是返回普通数据,第二个是返回游标. 1:返回普通数据 Map map = new HashMap(); map.put("username", "JACK"); sqlMapClient.queryForObject(

mybatis调用oracle存储过程

存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的存储过程 我写了一个比较简单的,需要注意的是Oracle无参存储过程不能写括号 CREATE OR REPLACE Procedure cascadeoperation As Begin  Delete From teacher Where id=1;  Update studentdetail S

Springmvc+mybatis 调用存储过程源码

刚开始学springmvc . 期间参考jeesite ,等优秀开源框架. 谢谢作者开源精神. 看图 源码打包了   http://yunpan.cn/cctLmadujMfEV (提取码:2cff) 具体调用过程可以参考上一篇帖子!

python 调用mysql存储过程返回结果集

存储过程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = imid and user = iuser; end; | delimiter ; python调用: import mysql.connector cnx = mysql.connector.connect( user='test',p