IBATIS调用oracle存储过程——获取返回值

                                               IBATIS调用oracle存储过程——获取返回值

          成百万数据量的表我们经常会加上表索引以方便查询,但是如果对这样的表经行数据批量修改的时候,一般我们用普通的update语句经行批量修改,这样的话大数据量造成修改上的性能问题是可想而知的。

         存储过程则更适合对数据库的更新,尤其是大量数据的更新。

         普通的sql接口更新数据库,如果更新复杂而频繁,那么可能需要频繁连接数据库。众所周知连接数据库是非常耗时和消耗资源的。如果所有工作都交由一个存储过程来完成,那么将大大将少数据库的连接频率,从而提高数据库的执行效率。

        有点跑题,现在需要说的是存储过程的返回值。

下边写的是一个简单的对用户表的修改存储过程:

create or replace procedure update_user_info(in_user_name in varchar2,
                                               in_user_age  in varchar2,
                                               S_RESULT     OUT VARCHAR2) AS

  begin
    update test_user_t t
       set t.user_name = in_user_name, t.user_age = in_user_age

    where t.user_id in('7', '51', '60');
    commit;
    S_RESULT := 'OK';
  EXCEPTION
    WHEN OTHERS THEN
      S_RESULT := 'NOOK';
      ROLLBACK;
  end update_user_info;

之后是用IBATIS写的一个sqlMap


<parameterMap id="updateParameters" class="map" >
    <parameter property="USER_NAME" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
	<parameter property="USER_AGE" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
	<parameter property="S_RESULT" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
	</parameterMap>
	<procedure id="UserDAO.update_user_info" parameterMap="updateParameters" >
		{call update_user_info (?, ?, ?)}
	</procedure>

再后是Javacode   Spring模板在DaoImpl层的代码——修改用户信息,红色的部分是测试存储过程返回值的代码。


 

public int updateUserInfo(HashMap param) throws DataAccessException {
		int count=0;
		try {
			 //getSqlMapClientTemplate().update("UserDAO.updateUserInfo", param);
			 //下边代码为测试存储过程修改表数据,存储过程适用于大数据量的修改。
			 HashMap map = new HashMap();
			 String  RESULT="";
			 map.put("USER_NAME", "zhanglujie");
			 map.put("USER_AGE", "25");
			 map.put("S_RESULT", RESULT);//存放map的返回值
			 getSqlMapClientTemplate().update("UserDAO.update_user_info", map);
			 System.out.println("returnValue:"+map.get("S_RESULT")+"-------------------");
			 count++;
			 return count;
		} catch (Exception e) {
			e.printStackTrace();
			logger.info("UserDAO.updateUserInfo------------------->出现异常");
		}
		return count;
	}


 执行成功结果是:returnValue:OK-------------------

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值