日期:2014-05-16  浏览次数:20471 次

SimpleJdbcCall的存储过程各种调用方法
存储过程:
CREATE PROCEDURE read_actor (
  IN in_id INTEGER,
  OUT out_first_name VARCHAR(100),
  OUT out_last_name VARCHAR(100),
  OUT out_birth_date DATE)
BEGIN
  SELECT first_name, last_name, birth_date
  INTO out_first_name, out_last_name, out_birth_date
  FROM t_actor where id = in_id;
END;

代码:
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcCall procReadActor;
public void setDataSource(DataSource dataSource) {
  this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
  this.procReadActor = new SimpleJdbcCall(dataSource)
      .withProcedureName("read_actor");
}
public Actor readActor(Long id) {
  SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
  Map out = procReadActor.execute(in);
  Actor actor = new Actor();
  actor.setId(id);
  actor.setFirstName((String) out.get("out_first_name"));
  actor.setLastName((String) out.get("out_last_name"));
  actor.setBirthDate((Date) out.get("out_birth_date"));
  return actor;
}

代码:
private SimpleJdbcCall procReadActor;
public void setDataSource(DataSource dataSource) {
  JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  jdbcTemplate.setResultsMapCaseInsensitive(true);
  this.procReadActor = new SimpleJdbcCall(jdbcTemplate)
    .withProcedureName("read_actor")
    .withoutProcedureColumnMetaDataAccess()
    .useInParameterNames("in_id")
    .declareParameters(
      new SqlParameter("in_id", Types.NUMERIC),
      new SqlOutParameter("out_first_name", Types.VARCHAR),
      new SqlOutParameter("out_last_name", Types.VARCHAR),
      new SqlOutParameter("out_birth_date", Types.DATE)
    );
  }
}


存储过程:
CREATE FUNCTION get_actor_name (in_id INTEGER)
RETURNS VARCHAR(200) READS SQL DATA
BEGIN
  DECLARE out_name VARCHAR(200);
  SELECT concat(first_name, ' ', last_name)
    INTO out_name
    FROM t_actor where id = in_id;
  RETURN out_name;
END;


代码:
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcCall funcGetActorName;
public void setDataSource(DataSource dataSource) {
  this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
  JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  jdbcTemplate.setResultsMapCaseInsensitive(true);
  this.funcGetActorName = new SimpleJdbcCall(jdbcTemplate)
    .withFunctionName("get_actor_name");
}
public String getActorName(Long id) {
  SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
  String name = funcGetActorName.executeFunction(String.class, in);
  return name;
}


存储过程:
CREATE PROCEDURE read_all_actors()
BEGIN
  SELECT a.id, a.first_name, a.last_name, a.birth_date FROM t_actor a;
END;


代码:
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcCall procReadAllActors;
public void setDataSource(DataSource dataSource) {
  this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
  JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  jdbcTemplate.setResultsMapCaseInsensitive(true);
  this.procReadAllActors = new SimpleJdbcCall(jdbcTemplate)
    .withProcedureName("read_all_actors")
    .returningResultSet("actors",+
      ParameterizedBeanPropertyRowMapper.newInstance(Actor.class));
  }
  public List getActorsList() {
    Map m = procReadAllActors.execute(new HashMap<String,Object>(0));
    return (List) m.get("actors");
  }
}