从java调用oracle存储过程时在mybatis mapper中映射多个out参数
问题是,我想从java调用一个存储过程,使用mybatis/ibatis,这个过程有多个OUT参数,精确地说是7个,其中2个是数字,另外5个是varchar,加上一个IN Number参数 上下文中有一个巨大的限制,即没有模型,只有映射和列表,尽管我们可以在必要时调用过程时例外。此外,解决方案必须用java完成,没有使用xml 我有一个springboot应用程序,有一个rest服务,它调用一个服务bean,它调用映射器接口,该接口定义了对我试图执行的过程的调用 到目前为止,我已经尝试在mapper接口中将结果映射到对象、列表、映射,使用@result尝试逐字段映射到特定的结果类,但一切都失败了。。。mybatis似乎在执行过程时没有出现错误,但不幸的是没有返回任何内容 我正在发布我的最新状态,其中包括尝试将结果映射到自定义类,它似乎在执行过程,但返回null从java调用oracle存储过程时在mybatis mapper中映射多个out参数,java,oracle,mybatis,ibatis,spring-mybatis,Java,Oracle,Mybatis,Ibatis,Spring Mybatis,问题是,我想从java调用一个存储过程,使用mybatis/ibatis,这个过程有多个OUT参数,精确地说是7个,其中2个是数字,另外5个是varchar,加上一个IN Number参数 上下文中有一个巨大的限制,即没有模型,只有映射和列表,尽管我们可以在必要时调用过程时例外。此外,解决方案必须用java完成,没有使用xml 我有一个springboot应用程序,有一个rest服务,它调用一个服务bean,它调用映射器接口,该接口定义了对我试图执行的过程的调用 到目前为止,我已经尝试在mapp
//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>
//自定义类
公共类{
整数p_tipo_客户;
整数p_codigo_客户;
字符串p_nombre_cliente;
字符串p_cuit_客户;
字符串p_cuit_rp;
字符串p_razon_social_rp;
字符串p_住所;
//加上构造函数、getter和setter
}
//服务方式
公共ProcClass调用过程(字符串参数){
返回asociadoMapper.callProcedure(
getInteger(参数),0,0,
"",",","","","");
}
//映射器接口
@存储库
公共接口AsociadoMapper扩展映射器{
@选择(值=AsociadoQueries.getDocumentoAsociadoCall)
@选项(statementType=statementType.CALLABLE)
@结果(值={
@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=“客户”,column=“客户”),
@org.apache.ibatis.annotations.Result
(property=“p\u cuit\u rp”,column=“p\u cuit\u rp”),
@org.apache.ibatis.annotations.Result
(property=“p\u razon\u social\u rp”,column=“p\u razon\u social\u rp”),
@org.apache.ibatis.annotations.Result
(property=“p_domincilio”,column=“p_domincilio”),
})
ProcClass调用过程(整数p_id_grupo_),
整数p_tipo_客户,
整数p_codigo_客户,
字符串p_nombre_客户,
字符串p_cuit_客户,
字符串p_cuit_rp,
字符串p_razon_social_rp,
字符串p_住所
);
//Util类
公共类AsociadoQueries{
public static final String getDocumentoAsociadoCall=“{调用consultas\u generales.get\u detalle\u cliente\u gf(”+
#{p_id_grupo_熟悉,mode=IN,jdbcType=INTEGER}+
“{p_tipo_cliente,mode=OUT,jdbcType=INTEGER,}”+
#{p_codigo_cliente,jdbcType=INTEGER}+
“{p#u nombre_cliente,jdbcType=VARCHAR},”+
“{p#u cuit_cliente,jdbcType=VARCHAR}”+
“{p#u cuit_rp,jdbcType=VARCHAR}”+
“{p#u razon_social_rp,jdbcType=VARCHAR},”+
#{p_domicilio,jdbcType=VARCHAR}+
")}";
//Pom相关依赖项
org.mybatis.spring.boot
迈巴蒂斯弹簧靴起动器
2.0.0
org.mybatis
mybatis
3.5.0
org.mybatis.dynamic-sql
mybatis动态sql
1.1.0
预期的结果很简单,要么返回一个列表、映射,要么返回一个包含过程返回的OUT参数值的自定义类,现在,我得到的只是null或一个空列表…哦,我只是设法弄明白了,我想我必须回答自己,以防它对其他人有帮助…,结果我终于设法得到了ou通过只发送1个映射作为参数,并在服务方法中设置之前的IN值来设置t参数…此外,映射程序现在返回void,这意味着mybatis正在动态地将所有额外的out参数添加到映射中。我还对call语句进行了一些更改,可能那里也有错误 代码的结尾如下:
//service call
public Map<String, Object> callProcedure(String param){
Map<String, Object> map = new HashMap<String, Object>();
Integer privilegesCount = 0;
map.put("p_id_grupo_familiar", Integer.valueOf(param));
asociadoMapper.callProcedure(map);
return map;
}
//mapper
@Select(value = AsociadoQueries.getDocumentoAsociadoCall)
@Options(statementType = StatementType.CALLABLE)
void callProcedure(Map<String,Object> params);
// Call statement
public static final String getDocumentoAsociadoCall = "{ CALL consultas_generales.get_detalle_cliente_gf(" +
"#{p_id_grupo_familiar, jdbcType=NUMERIC ,javaType=java.lang.Integer ,mode=IN}," +
"#{p_tipo_cliente, jdbcType=NUMERIC,javaType=java.lang.Integer ,mode=OUT,},"+
"#{p_codigo_cliente, jdbcType=NUMERIC ,javaType=java.lang.Integer ,mode=OUT},"+
"#{p_nombre_cliente, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+
"#{p_cuit_cliente, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+
"#{p_cuit_rp, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+
"#{p_razon_social_rp, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+
"#{p_domicilio, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT}"+
")}";
//服务调用
公共映射调用过程(字符串参数){
Map Map=newhashmap();
整数privilegesCount=0;
map.put(“p_id_grupo_熟悉”,Integer.valueOf(param));
asociadoMapper.callProcedure(map);
返回图;
}
//制图员
@选择(值=AsociadoQueries.getDocumentoAsociadoCall)
@选项(statementType=statementType.CALLABLE)
void callProcedure(映射参数);
//调用语句
public static final String getDocumentoAsociadoCall=“{调用consultas\u generales.get\u detalle\u cliente\u gf(”+
#{p_id_grupo_熟悉,jdbcType=NUMERIC,javaType=java.lang.Integer,mode=IN}+
#{p_tipo_cliente,jdbcType=NUMERIC,javaType=java.lang.Integer,mode=OUT,}+
“{p_codigo_cliente,jdbcType=NUMERIC,javaType=java.lang.Integer,mode=OUT}”+
{p#u nombre_cliente,jdbcType=VARCHAR,javaType=java.lang.String,mode=OUT}+
#{p_cuit_cliente,jdbcType=VARCHAR,javaType=java.lang.String,mode=OUT}+
“{p#cuit#rp,