`

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

阅读更多
 
import java.io.Serializable;  
import java.util.Date;  
  
public class User implements Serializable{  
    private static final long serialVersionUID = -6919964218508186044L;  
    private int id;  
    private String name;  
    private Date birthday;  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Date getBirthday() {  
        return birthday;  
    }  
    public void setBirthday(Date birthday) {  
        this.birthday = birthday;  
    }  
}  


<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD iBatis Mapper 3.0 //EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">  
<mapper namespace="org.yhb.ibatis.dao.UserDAO">  
    <!-- 表结构  
        create table IBATIS_USER  
        (  
          ID       NUMBER not null,  
          NAME     VARCHAR2(20) not null,  
          BRITHDAY DATE not null  
        )  
    -->  
      
    <!-- 存储过程  
        create or replace procedure getAllUser(userList out sys_refcursor)  
        as  
        begin  
           open userList for select * from ibatis_user;  
        end;  
     -->  
       
    <!-- resultMap -->  
    <resultMap type="User" id="userMap">  
        <id column="id" property="id" />  
        <result column="name" property="name" />  
        <result column="birthday" property="birthday" />  
    </resultMap>  
  
    <!-- 调用存储过程 -->  
    <select id="getAllUser" statementType="CALLABLE">  
        {call  
          getAllUser(#{userList,<!-- 参数 -->  
                       mode=OUT,<!-- 参数类型 -->  
                       javajavaType=java.sql.ResultSet,<!-- 参数java类型 -->  
                       jdbcType=CURSOR,<!-- 参数jdbc类型 -->  
                       resultMap=userMap<!-- ResultSet需要resultMap参数 -->  
                       })}  
    </select>  
</mapper>  


@Test  
public void testProcedure() throws Exception {  
    Reader reader = null;  
    reader = Resources.getResourceAsReader("configuration.xml");  
    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);  
    reader.close();  
      
    SqlSession session = ssf.openSession();  
    Map map = new HashMap();  
    session.selectOne("org.yhb.ibatis.dao.UserDAO.getAllUser", map);  
    System.out.println(map);  
    //返回的集合被放入了map中  
    List<User> userList = (List<User>) map.get("userList");  
    System.out.println(userList);  
    session.close();  
}  



---------------------------------------------------------------------
--定义包声明
create or replace package pkg_stu
as
type list_stu is ref cursor;--定义游标,通过游标将数据模型结果集返回给关系模型
procedure proc_findStuList(stulist out list_stu,s_id number);
function fun_findStuList(s_id number) return list_stu;
end pkg_stu;

--包主体声明
create or replace package body pkg_stu
  as
  procedure proc_findStuList(stulist out list_stu,s_id number)--实现查找所有学生的存储过程
    is
            sqlString varchar2(500);
    begin
            if s_id = 0 then
               open stulist for select sid,sname,major,birth,socre from student order by sid;
            else
               sqlString := 'select sid,sname,major,birth,socre from student where sid=:sid';
               open stulist for sqlString using s_id;
            end if;
    end proc_findStuList;
  function fun_findStuList(s_id number)   --实现查找所有学生的函数
  return list_stu
  is
         stulist list_stu;
         sqlString varchar2(500);
  begin
         if s_id = 0 then
            open stulist for select sid,sname,major,birth,socre from student order by sid;
         else
            sqlString := 'select sid,sname,major,birth,socre from student where sid=:sid';
            open stulist for sqlString using s_id;
         end if;
         return stulist;
  end fun_findStuList;
end pkg_stu;

<!-- 声明结果集类型参数 -->
	<resultMap class="Student" id="stuAccount">
		<result property="sid" column="SID" columnIndex="1"/>
		<result property="sname" column="SNAME" columnIndex="2"/>
		<result property="major" column="MAJOR" columnIndex="3"/>
		<result property="birth" column="BIRTH" columnIndex="4"/>
		<result property="socre" column="SOCRE" columnIndex="4"/>
	</resultMap>
	
	<!--  -->
	<parameterMap  id="parameterMap" class="java.util.HashMap">
        <parameter property="stulist" jdbcType="ORACLECURSOR" 
         javaType="java.sql.ResultSet" mode="OUT" />
        <parameter property="s_id" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
    </parameterMap>
    
    <!-- 存储过程的调用方式 -->
    <procedure id="pkgPro_stu_cursor" parameterMap="parameterMap" resultMap="stuAccount">
        {call pkg_stu.proc_findStuList(?,?)}
    </procedure>
    
    <!-- 函数的调用方式 -->
    <procedure id="fun_stu_cursor" parameterMap="parameterMap" resultMap="stuAccount">
    	{? = call pkg_stu.fun_findStuList(?) }
    </procedure>


	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
//存储过程的调用
		
//		IStudentDAO dao = new IStudentDAOImpl();
//		
//		Map parameterMap = new HashMap();
//		parameterMap.put("s_id", 0);
//		List<Student> accoutList = dao.queryPkgProStudentList(parameterMap);
//		if(accoutList.size()>0){
//			for(Student temp:accoutList){
//				if(temp!=null){
//					System.out.println(temp.getBirth().toLocaleString()+"---"+temp.getMajor());
//				}
//			}
//		}
//		System.out.println("-------------------------");
//		System.out.println("size:"+accoutList.size());

//函数的调用		
		IStudentDAO dao = new IStudentDAOImpl();
		
		Map parameterMap = new HashMap();
		parameterMap.put("s_id", 0);
		List<Student> accoutList = dao.queryFunStudentList(parameterMap);
		if(accoutList.size()>0){
			for(Student temp:accoutList){
				if(temp!=null){
					System.out.println(temp.getBirth().toLocaleString()+"---"+temp.getMajor());
				}
			}
		}
		System.out.println("-------------------------");
		System.out.println("size:"+accoutList.size());
	}
	
	@Override
	public List queryFunStudentList(Map parameterMap) {
		List result = null;
		try {
			result = sqlMapClient.queryForList("fun_stu_cursor",parameterMap);
			System.out.println("size:"+result.size());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
@Override
	public List queryPkgProStudentList(Map parameterMap) {
		// TODO Auto-generated method stub
		List result = null;
		try {
			result = sqlMapClient.queryForList("pkgPro_stu_cursor",parameterMap);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
0
1
分享到:
评论

相关推荐

    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