JavaHolder 2023-02-27 10:26 采纳率: 0%
浏览 96
已结题

Mybatis调用数据库存储过程,参数怎么根据数据库存储过程里面的参数动态提交

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里面。这样以后数据库修改存储过程后,后端不用跟着修改调用参数也能正常调用。

这个问题困扰了好几天,如能解决,感激不尽

  • 写回答

7条回答 默认 最新

  • 霸都小魔女 2023-02-27 10:30
    关注

    小魔女参考了bing和GPT部分内容调写:
    Mybatis调用数据库存储过程时,参数动态提交的方法有很多,下面介绍一种实现方式。

    首先,在Mybatis中,可以使用标签,来实现动态提交参数。可以通过在mapper.xml文件中定义一个list集合,然后再使用标签来遍历list集合,将list集合里面的参数动态传入到call里面。

    具体的实现步骤如下:

    1. 首先通过存储过程获取最新的参数和参数的顺序;
    2. 然后在mapper.xml文件中定义一个list集合,将最新的参数和顺序放入list集合中;
    3. 最后在调用存储过程时使用标签来遍历list集合,将list集合里面的参数动态传入到call里面。

    例如:

    <select id="callProcedure" parameterType="map" statementType="CALLABLE">
        {call bsp_CommRole(
            <foreach collection="paramList" item="item" index="index" open="" separator="," close="">
                #{item.paramName, mode = #{item.paramMode}, jdbcType = #{item.jdbcType}}
            </foreach>)}
    </select>
    

    以上就是Mybatis调用数据库存储过程时,根据数据库存储过程最新的参数动态提交的一种实现方式。
    回答不易,记得采纳呀。

    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起