Mybatis调用数据库存储过程时,怎么根据数据库存储过程最新的参数,来动态调整call里面的参数。
现在是数据库存储过程里面入参和出参会随时修改,也会调整入参和出参顺序。现在数据库那里要求,后台Mybatis在调用存储过程,需要根据最新的参数和顺序动态调整。但前提是不能修改代码,不能重新发布。必须在调用数据库存储过程前,通过一个通用方法来获取存储过程最新的参数和顺序。然后将最新的参数和顺序传到mapper.xml文件中
这是之前的写法,通过字段名和数据库存储过程一一对应
call bsp_CommRole;8(
#{action,mode=IN,jdbcType=VARCHAR},
#{lan_id,mode=IN,jdbcType=INTEGER},
#{branch_id,mode=IN,jdbcType=VARCHAR},
#{column_title,mode=OUT,jdbcType=VARCHAR},
#{column_length,mode=OUT,jdbcType=VARCHAR},
#{column_align,mode=OUT,jdbcType=VARCHAR}
)
现在通过 [sys].[sp_procedure_params_100_managed] @procedure_name=N'存储过程名' 可以获取最新的参数字段及输入输出类型,但是需要将最新的参数动态传到call bsp_CommRole;8里面
现在在调用存储过程,里面参数名和mode不能直接写死,需要在接口调用的地方,先通过上面的sp_procedure_params_100_managed获取最新的参数,然后不管通过什么方法把最新的参数传到call里面。这样以后数据库修改存储过程后,后端不用跟着修改调用参数也能正常调用。
这个问题困扰了好几天,如能解决,感激不尽