Ibatis调用Oracle存储过程,以及返回Cursor结果集的处理

时间:2022-08-15 21:40:35
最近一项目用Struts+Spring+Ibatis 
俺是新手,第一次用Ibatis 
于是网上查资料,下载DEMO,运行。。。。。 
开始比较顺利,无非就是些select/update/delete 
后来碰到一存储过程的调用,没办法,网上查,一步步试 

存储过程具体就不说了,那是DBA的事情 
传入一个或者几个Integer或者String 
传出来是ORACLECURSOR 
Ibatis配置文件ibatis.xml: 
Xml代码  Ibatis调用Oracle存储过程,以及返回Cursor结果集的处理
  1. <resultMap id="result-map" class="com.xxx.xxx.Table">  
  2.     <result property="rsId" column="id" />  
  3.     <!--在Java对象跟Oracle列之间转换 -->  
  4. </resultMap>  
  5. <parameterMap id="parameter-map" class="java.util.HashMap" >   
  6.     <parameter property="param1" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>   
  7.     <parameter property="param2" jdbcType="Integer" javaType="java.lang.Integer" mode="IN"/>   
  8.     <parameter property="result" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" />  
  9. </parameterMap>  
  10. <procedure id="testCur" resultMap="result-map" parameterMap="parameter-map">   
  11.     {call testProcedures(?, ?, ?)}   
  12. </procedure>  

再看java里面调用: 
Java代码  Ibatis调用Oracle存储过程,以及返回Cursor结果集的处理
  1. Map paramMap = new HashMap();  
  2. String str = request.getParameter(.....);  
  3. int n = request.getParameter(.....);  
  4. paramMap.put("param1",str);  
  5. paramMap.put("param2",n);  
  6. List detailList = null;   
  7. try{  
  8. detailList = getSqlMapClientTemplate().queryForList("testCur", paramMap);  
  9. //可以用getSqlMapClientTemplate().queryForObject("testCur", paramMap); 返回值是Object。  
  10. }catch(Exception ex){  
  11. ex.printStackTrace();  
  12. }  
  13. return detailList;  

detailList就是需要的结果集!