Проблема в том, что я хочу вызвать хранимую процедуру из java, используя mybatis / ibatis, эта процедура имеет несколько параметров OUT, 7 точно, 2 из них - Numbers, остальные 5 Varchars плюс один параметр IN Number
Существует огромное ограничение внутри контекста, который не имеет моделей, только карты и списки, хотя мы можем сделать исключение при вызове процедур при необходимости. Кроме того, решение должно быть сделано в Java, не используется XML.
У меня есть приложение springboot, есть служба отдыха, которая вызывает компонент службы, который вызывает интерфейс Mapper, который определяет вызов процедуры, которую я пытаюсь выполнить.
До сих пор я пытался в интерфейсе mapper отображать результат в Object, List, Maps, используя @Result, пытаясь отобразить конкретное поле класса результата по полю, но все не удалось, miserabl ... mybatis, кажется, выполняет процедура без ошибок, но, к сожалению, ничего не возвращается.
Я публикую свое последнее состояние, которое состояло в попытке сопоставить результат с пользовательским классом, похоже, что процедура выполняется, но возвращается ноль
//custom class
public class ProcClass {
Integer p_tipo_cliente;
Integer p_codigo_cliente;
String p_nombre_cliente;
String p_cuit_cliente;
String p_cuit_rp;
String p_razon_social_rp;
String p_domicilio;
// plus constructor, getters and setters
}
//Service method
public ProcClass callProcedure(String param){
return asociadoMapper.callProcedure(
Integer.getInteger(param),0,0,
"",",","","","");
}
//Mapper interface
@Repository
public interface AsociadoMapper extends Mapper {
@Select(value = AsociadoQueries.getDocumentoAsociadoCall)
@Options(statementType = StatementType.CALLABLE)
@Results(value = {
@org.apache.ibatis.annotations.Result
(property = "p_tipo_cliente", column = "p_tipo_cliente"),
@org.apache.ibatis.annotations.Result
(property = "p_codigo_cliente", column = "p_codigo_cliente"),
@org.apache.ibatis.annotations.Result
(property = "p_nombre_cliente", column = "p_nombre_cliente"),
@org.apache.ibatis.annotations.Result
(property = "p_cuit_cliente", column = "p_cuit_cliente"),
@org.apache.ibatis.annotations.Result
(property = "p_cuit_rp", column = "p_cuit_rp"),
@org.apache.ibatis.annotations.Result
(property = "p_razon_social_rp", column = "p_razon_social_rp"),
@org.apache.ibatis.annotations.Result
(property = "p_domicilio", column = "p_domicilio"),
})
ProcClass callProcedure(Integer p_id_grupo_familiar,
Integer p_tipo_cliente,
Integer p_codigo_cliente,
String p_nombre_cliente,
String p_cuit_cliente,
String p_cuit_rp,
String p_razon_social_rp,
String p_domicilio
);
//Util class
public class AsociadoQueries {
public static final String getDocumentoAsociadoCall = "{ CALL consultas_generales.get_detalle_cliente_gf(" +
"#{p_id_grupo_familiar, mode=IN, jdbcType=INTEGER}," +
"#{p_tipo_cliente, mode=OUT, jdbcType=INTEGER,},"+
"#{p_codigo_cliente, jdbcType=INTEGER},"+
"#{p_nombre_cliente, jdbcType=VARCHAR},"+
"#{p_cuit_cliente, jdbcType=VARCHAR},"+
"#{p_cuit_rp, jdbcType=VARCHAR},"+
"#{p_razon_social_rp, jdbcType=VARCHAR},"+
"#{p_domicilio, jdbcType=VARCHAR}"+
")}";
// Pom related dependencies
<!-- MySQL -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.dynamic-sql/mybatis-dynamic-sql -->
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.1.0</version>
</dependency>
Ожидаемый результат прост: либо возвращение списка, карты или пользовательского класса, содержащего значения параметров OUT, возвращаемых процедурой, прямо сейчас, все, что я получил, было нулевым или пустым списком ...