Java 在返回多行的jdbc模板中调用存储过程
如果我使用返回多行数据的Jdbc模板调用存储过程。例如,存储过程根据某些业务规则返回200条记录。如何一次迭代和处理这些1,我们可以使用自定义行映射器吗 在这里,我可以为一名员工打电话。但我需要一份清单Java 在返回多行的jdbc模板中调用存储过程,java,stored-procedures,jdbc,spring-jdbc,simplejdbccall,Java,Stored Procedures,Jdbc,Spring Jdbc,Simplejdbccall,如果我使用返回多行数据的Jdbc模板调用存储过程。例如,存储过程根据某些业务规则返回200条记录。如何一次迭代和处理这些1,我们可以使用自定义行映射器吗 在这里,我可以为一名员工打电话。但我需要一份清单 SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getEmployeeeRecord"); SqlParameterSource in = new MapSql
SimpleJdbcCall jdbcCall = new
SimpleJdbcCall(dataSource).withProcedureName("getEmployeeeRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("emp_id", id);
Map<String, Object> out = jdbcCall.execute(in);
Employee employee = new Employee();
employee.setId(id);
employee.setName((String) out.get("out_name"));
employee.setAge((Integer) out.get("out_age"));
return employee ;
SimpleJdbcCall jdbcCall=new
SimpleJDBCall(数据源).withProcedureName(“GetEmployeeRecord”);
SqlParameterSource in=new-MapSqlParameterSource().addValue(“emp_id”,id);
Map out=jdbcCall.execute(in);
员工=新员工();
employee.setId(id);
employee.setName((String)out.get(“out_name”);
employee.setAge((整数)out.get(“out_age”);
返回员工;
我做了这样的东西:
@PostConstruct
public void init() {
jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("name_of_procedure")
.withCatalogName("catalog_name")
.withSchemaName("schema_name")
.declareParameters(
new SqlParameter("@NIT", Types.VARCHAR));
}
public List<Student> invocar(Param parameters) {
jdbcCall.setFunction(false);
List<Student> listResult = new ArrayList<>();
MapSqlParameterSource valueParams = new MapSqlParameterSource();
valueParams.addValue("@NIT", parameters.getNit());
Map<String, Object> resultStoreProcedure = jdbcCall.execute(valueParams);
List<LinkedCaseInsensitiveMap<String>> linkedCaseInsensitiveMapList =
(ArrayList<LinkedCaseInsensitiveMap<String>>) resultStoreProcedure.get("#result-
set-1");
for (LinkedCaseInsensitiveMap<String> linkedCaseInsensitiveMap :
linkedCaseInsensitiveMapList) {
listResult.add(ResumenInversionesSalidaSpTo
.builder()
.name(linkedCaseInsensitiveMap.get("name"))
.lastName(linkedCaseInsensitiveMap.get("last_name"))
.age(linkedCaseInsensitiveMap.get("age"))
.nit(linkedCaseInsensitiveMap.get("nit"))
.build());
}
return listResult;
}
@PostConstruct
公共void init(){
jdbcall=newsimplejdbccall(jdbcTemplate)
.withProcedureName(“程序名称”)
.withCatalogName(“目录名称”)
.withSchemaName(“schema_name”)
.申报参数(
新的SqlParameter(“@NIT”,Types.VARCHAR));
}
公共列表invocar(参数){
jdbcCall.setFunction(false);
List listResult=新建ArrayList();
MapSqlParameterSource valueParams=新的MapSqlParameterSource();
valueParams.addValue(“@NIT”,parameters.getNit());
Map resultStoreProcedure=jdbcCall.execute(valueParams);
列表linkedCaseInsensitiveMapList=
(ArrayList)resultStoreProcedure.get(“#result-
第1组“;
对于(LinkedCaseInsensitiveMap LinkedCaseInsensitiveMap:
linkedCaseInsensitiveMapList){
listResult.add(ResumeInVersionEssalidAspto
.builder()
.name(linkedCaseInsensitiveMap.get(“名称”))
.lastName(linkedCaseInsensitiveMap.get(“姓氏”))
.age(linkedCaseInsensitiveMap.get(“age”))
.nit(linkedCaseInsensitiveMap.get(“nit”))
.build());
}
返回列表结果;
}
它针对SQL server数据库工作。我制作了如下内容:
@PostConstruct
public void init() {
jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("name_of_procedure")
.withCatalogName("catalog_name")
.withSchemaName("schema_name")
.declareParameters(
new SqlParameter("@NIT", Types.VARCHAR));
}
public List<Student> invocar(Param parameters) {
jdbcCall.setFunction(false);
List<Student> listResult = new ArrayList<>();
MapSqlParameterSource valueParams = new MapSqlParameterSource();
valueParams.addValue("@NIT", parameters.getNit());
Map<String, Object> resultStoreProcedure = jdbcCall.execute(valueParams);
List<LinkedCaseInsensitiveMap<String>> linkedCaseInsensitiveMapList =
(ArrayList<LinkedCaseInsensitiveMap<String>>) resultStoreProcedure.get("#result-
set-1");
for (LinkedCaseInsensitiveMap<String> linkedCaseInsensitiveMap :
linkedCaseInsensitiveMapList) {
listResult.add(ResumenInversionesSalidaSpTo
.builder()
.name(linkedCaseInsensitiveMap.get("name"))
.lastName(linkedCaseInsensitiveMap.get("last_name"))
.age(linkedCaseInsensitiveMap.get("age"))
.nit(linkedCaseInsensitiveMap.get("nit"))
.build());
}
return listResult;
}
@PostConstruct
公共void init(){
jdbcall=newsimplejdbccall(jdbcTemplate)
.withProcedureName(“程序名称”)
.withCatalogName(“目录名称”)
.withSchemaName(“schema_name”)
.申报参数(
新的SqlParameter(“@NIT”,Types.VARCHAR));
}
公共列表invocar(参数){
jdbcCall.setFunction(false);
List listResult=新建ArrayList();
MapSqlParameterSource valueParams=新的MapSqlParameterSource();
valueParams.addValue(“@NIT”,parameters.getNit());
Map resultStoreProcedure=jdbcCall.execute(valueParams);
列表linkedCaseInsensitiveMapList=
(ArrayList)resultStoreProcedure.get(“#result-
第1组“;
对于(LinkedCaseInsensitiveMap LinkedCaseInsensitiveMap:
linkedCaseInsensitiveMapList){
listResult.add(ResumeInVersionEssalidAspto
.builder()
.name(linkedCaseInsensitiveMap.get(“名称”))
.lastName(linkedCaseInsensitiveMap.get(“姓氏”))
.age(linkedCaseInsensitiveMap.get(“age”))
.nit(linkedCaseInsensitiveMap.get(“nit”))
.build());
}
返回列表结果;
}
它可以针对SQL server数据库工作。从API中可以看出,它不受支持。它仅支持单行结果或参数中的结果集。如果您想要处理返回结果集的存储过程,那么您可能应该直接使用
JdbcTemplate
(但该API似乎也表明它实际上并不期望可调用语句返回结果集)。据我从该API所知,它不受支持。它仅支持单行结果或参数中的结果集。如果您想要处理返回结果集的存储过程,那么您可能应该直接使用JdbcTemplate
(但该API似乎也表明它实际上并不期望可调用语句返回结果集)。