`

IBatis调用ORACLE的存储过程、函数的返回结果集例子

阅读更多

/********************************************************************************


包中存储过程及函数 (database Oracle 10G)


********************************************************************************/

----包声明

CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE proc_findResult(u_cursor OUT myrctype, u_id NUMBER);
FUNCTION fun_findResult(u_id NUMBER) return myrctype;
END pkg_test;

 

----包主体的声明

CREATE OR REPLACE PACKAGE BODY pkg_test
  AS
  PROCEDURE proc_findResult(u_cursor OUT myrctype ,u_id NUMBER)
  IS
  sqlString VARCHAR2 (500);
  BEGIN
     IF u_id = 0 THEN
        OPEN u_cursor FOR SELECT userId, userName, password, groupName FROM user_account ORDER BY userId;
     ELSE
        sqlString :='SELECT userId, userName, password, groupName FROM user_account where userId=:w_id';
        OPEN u_cursor FOR sqlString USING u_id;
     END IF;
  END proc_findResult;

  function fun_findResult(u_id NUMBER) RETURN myrctype
  IS
  u_cursor myrctype;
  sqlString VARCHAR2 (500);
  BEGIN
     IF u_id = 0 THEN
        OPEN u_cursor FOR SELECT userId, userName, password, groupName FROM user_account ORDER BY userId;
     ELSE
        sqlString :='SELECT userId, userName, password, groupName FROM user_account where userId=:w_id';
        OPEN u_cursor FOR sqlString USING u_id;
     END IF;
     return u_cursor;
   END fun_findResult;

END pkg_test;

 

 

 

 

/********************************************************************************


IBatis SQLMap 中的配置


********************************************************************************/

    <resultMap id="userAccount" class="org.taink.entity.UserAccount" >
        <result property="userId" column="userId" columnIndex="1"/>
        <result property="userName" column="userName" columnIndex="2"/>
        <result property="password" column="password" columnIndex="3"/>
        <result property="groupName" column="groupName" columnIndex="4"/>
    </resultMap>

 

 

    <!-- call procedure parameter
    <parameterMap  id="parameterMap" class="java.util.HashMap">
        <parameter property="u_cursor" jdbcType="ORACLECURSOR"
         javaType="java.sql.ResultSet" mode="OUT" />
        <parameter property="u_id" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
    </parameterMap>
    -->
   
    <!--  call procedure
    <procedure id="test_cursor" parameterMap="parameterMap" resultMap="userAccount">
        {call pkg_test.proc_findResult(?,?)}
    </procedure>
    -->
   
   
    <!-- call function parameter     -->
    <parameterMap  id="parameterMap" class="java.util.HashMap">
        <parameter property="u_cursor" jdbcType="ORACLECURSOR"
         javaType="java.sql.ResultSet" mode="OUT" />
        <parameter property="u_id" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
    </parameterMap>
   
    <!--  call function     -->
    <procedure id="test_cursor" parameterMap="parameterMap" resultMap="userAccount">
        {? = call pkg_test.fun_findResult(?)}
    </procedure>

 

/********************************************************************************


Dao layer java code


********************************************************************************/

 

    @SuppressWarnings("unchecked")
    @Override
    public List findAllUserAccountByProcOrFun(Map parameterMap) {
        List result = null;
        try {
            result = super.sqlMapClient.queryForList("test_cursor",parameterMap);
        } catch (SQLException e) {
            System.out.println("-------------error-------------");
            e.printStackTrace();
        }
        return result;
    }

 

/********************************************************************************


java Test class


********************************************************************************/

public class TestProcOrFun {

    public static void main(String[] args) {

        IUserAccountDao userAccountDao = new UserAccountDaoImpl();

 

       // find all object by procedure or function  operation
        Map parameterMap = new HashMap();
        parameterMap.put("u_id", 15);
        List accountList =
            userAccountDao.findAllUserAccountByProcOrFun(parameterMap);
        if (accountList.size()>0 ) {
            for (Object temp : accountList) {
                if (temp != null) {
                    System.out.println(((UserAccount)temp).toString());
                }
            }
        } else {
            System.out.println("result is null");
        }

    }

}

分享到:
评论

相关推荐

    ibatis调用oracle的函数,存储过程的方法

    ibatis调用oracle的函数,存储过程的方法,从网上收集的,还没有整理。

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    NULL 博文链接:https://fengtiejun.iteye.com/blog/1603851

    Spring中文帮助文档

    使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8. 使用SimpleJdbcCall调用内置函数 11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6...

    Spring API

    使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8. 使用SimpleJdbcCall调用内置函数 11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6...

    最新Java面试宝典pdf版

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    Java面试宝典2010版

    22、用JDBC如何调用存储过程 23、JDBC中的PreparedStatement相比Statement的好处 24. 写一个用jdbc连接并访问oracle数据的程序代码 25、Class.forName的作用?为什么要用? 26、大数据量下的分页解决方法。 27、用...

    Java面试笔试资料大全

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    java面试宝典2012

    22、用JDBC如何调用存储过程 119 23、JDBC中的PreparedStatement相比Statement的好处 120 24. 写一个用jdbc连接并访问oracle数据的程序代码 121 25、Class.forName的作用?为什么要用? 121 26、大数据量下的分页解决...

    JAVA面试宝典2010

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    Java面试宝典-经典

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    java面试题大全(2012版)

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    Java面试宝典2012版

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页...

    Java面试宝典2012新版

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    Java 面试宝典

    39、下面的程序代码输出的结果是多少? ................................................................. 26 40、final, finally, finalize 的区别。 ..........................................................

Global site tag (gtag.js) - Google Analytics