SimpleJdbcCall的使用

java.lang.Object
  org.springframework.jdbc.core.simple.AbstractJdbcCall
      org.springframework.jdbc.core.simple.SimpleJdbcCall

 

  SimpleJdbcCall源自springframework,是一个多线程、可重用,用来调用存储过程或者存储函数的工具,它通过提供元数据的处理方式来简化对基本的存储过程和函数的访问。我们所需要做的就是提供执行存储过程或函数的名字和用Map表示的相应的参数,这些参数的名字将会与我们创建存储过程或者函数时定义的参数名进行匹配。
   元数据的处理方式是基于JDBC提供的DatabaseMetaData,这种处理方式只适用于提供元数据访问机制的数据库,像Derby, MySQL, Microsoft SQL Server, Oracle 和DB2都是可以的;对于其他不提供元数据访问的数据库,我们需要明确的定义所有参数,这一准则对所有数据库都是适用的。如果我们希望传入的参数名不要跟存储过程或者函数的名字进行匹配,我们需要显式关闭元数据的处理方式。
  Spring用了“RETURN_VALUE”这个关键字来存储执行存储过程或者函数的返回值。

 

package com.test.dao;

import java.sql.Types;
import java.util.HashMap;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

import com.test.base.UserInfo;
import com.test.constants.StoreProc;

public class UserDAO {
 SimpleJdbcCall simpleJdbcCall;
 private JdbcTemplate jdbcTemplate;
 
 public JdbcTemplate getJdbcTemplate() {
  return jdbcTemplate;
 }
 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
 }
 
 public int checkUserInfo(UserInfo user){
  simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate);
  simpleJdbcCall.withProcedureName(StoreProc.SP_CHECK_USER_INFO_STRING).withoutProcedureColumnMetaDataAccess().withReturnValue();
  // Declare parameter to save Stored Procedure return value
  simpleJdbcCall.declareParameters(new SqlOutParameter("RETURN_VALUE", Types.INTEGER));
  simpleJdbcCall.addDeclaredParameter(new SqlParameter("UserName", Types.VARCHAR));
  simpleJdbcCall.addDeclaredParameter(new SqlParameter("Password", Types.VARCHAR));
  simpleJdbcCall.addDeclaredParameter(new SqlOutParameter("Level", Types.VARCHAR));
  Map<String, Object> inParamsValue = new HashMap<String, Object>();
  inParamsValue.put("UserName", user.getUser());
  inParamsValue.put("Password", user.getUser());
  
  simpleJdbcCall.getJdbcTemplate().setResultsMapCaseInsensitive(true);
  simpleJdbcCall.getJdbcTemplate().setSkipUndeclaredResults(true);
  Map<String, Object> resultMap = simpleJdbcCall.execute(inParamsValue);
  int iRetValue = Integer.parseInt(resultMap.get("RETURN_VALUE").toString());
  if(iRetValue == 0){
   String userLevel = resultMap.get("Level").toString();
   user.setLevel(userLevel);
  }
  return iRetValue;
 }

}

  上述实例我们定义了一个UserDAO类,其中用一个函数checkUserInfo根据用户名和密码来检查用户的合法性,如果正确并返回用户的级别。程序首先用jdbcTemplate作为参数实例化了一个simpleJdbcCall对象,接着将常量定义的存储过程名SP_CHECK_USER_INFO_STRING传递给simpleJdbcCall对象并关闭的元数据的访问,返回值是需要我们显式声明的。整过过程非常明了,各个函数的作用我就不细说了,大家可以根据字面意思理解。希望看了这个实例后,大家对simpleJdbcCall的使用能有一个整体的把握。至于SimpleJdbcCall类的方法的详尽用法,请大家参考以下地址:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcCall.html#declareParameters

(org.springframework.jdbc.core.SqlParameter...)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值