Java MyBatis 存储过程调用带 OUT 参数

2024-03-16

第一个问题:我试图返回一个 OUT 参数,而不是带注释的结果集。首先,这可能吗?如果是的话,人们会怎样做呢?

MyBatis:3.0.6

数据库:SQL Server 2008

以下是我在 UserDAO 中调用方法的语法示例:

@Select(value= "{ CALL saveUser( "
        + "#{userId, mode=IN, jdbcType=INTEGER},"
        + "#{firstname, mode=IN, jdbcType=VARCHAR},"
        + "#{lastname, mode=IN, jdbcType=VARCHAR},"
        + "#{message, mode=OUT, jdbcType=VARCHAR}"
        + ")}")
@Options(statementType=StatementType.CALLABLE)
public String saveUser(
        @Param("userId") int userId,
        @Param("firstname") String firstname,
        @Param("lastname") String lastname);

我从所有“保存”过程返回一条消息,因此我可以向用户返回响应:“用户保存成功”、“保存用户时出错”、“您无权保存此用户”等。我知道返回结果集可以解决问题,只是我不想更改我的所有程序!

第二个问题:是否可以返回由多个 OUT 参数填充的“SaveProcedureResponse”?例如:

@Select(value= "{ CALL saveUser( "
        + "#{userId, mode=IN, jdbcType=INTEGER},"
        + "#{firstname, mode=IN, jdbcType=VARCHAR},"
        + "#{lastname, mode=IN, jdbcType=VARCHAR},"
        + "#{message, mode=OUT, jdbcType=VARCHAR},"
        + "#{status, mode=OUT, jdbcType=VARCHAR},"
        + "#{returnCode, mode=OUT, jdbcType=INTEGER}"
        + ")}")
@Options(statementType=StatementType.CALLABLE)
public SaveProcedureResponse saveUser(
        @Param("userId") int userId,
        @Param("firstname") String firstname,
        @Param("lastname") String lastname);

豆子看起来像这样:

public class SaveProcedureResponse {
    private String message;
    private String status;
    private int returnCode;

    public SaveProcedureResponse(String message, String status, int returnCode) {
        this.message = message;
        this.status = status;
        this.returnCode = returnCode;
    }
}

Thanks!


第一个问题:我正在尝试返回一个 OUT 参数而不是 带注释的结果集。首先,这可能吗?如果是的话,如何 有人会这样做吗?

呃,有点。映射器不会returnout 参数,但是你可以让 Mybatis 将它们设置到参数对象上,或者将它们放入像这样的映射中this https://stackoverflow.com/questions/7817185/cannot-receive-out-parameter-from-oracle-procedure-executed-by-mybatis.

因此,给出一个简单的 java 对象,其中包含所有字段的 getter 和 setter。调用映射器后,输出参数将设置到对象上。

<update id="someProcedure" statementType="CALLABLE">
    {call some procedure(
            #{someInParamA, mode=IN},
            #{someInParamB, jdbcType=ARRAY, mode=IN},
            #{someOutParamA, javaType=Boolean, jdbcType=NUMERIC, mode=OUT },
            #{someOutParamB, javaType=Object, jdbcType=ARRAY, jdbcTypeName=SOMEJDBCTYPE, mode=OUT})}
</update>

因此,要获取输出参数,它看起来像这样。

mapper.getSomeProcedure(someBean);
//out params populated on the object passed to the mapper :)
String outA = bean.getSomeOutParamA();

有点难以解释,这有道理吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java MyBatis 存储过程调用带 OUT 参数 的相关文章

随机推荐

  • Django 中不同应用程序的不同数据库[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我的 Django 站点中有多个应用
  • 组织 Javascript 库和 CSS 文件夹结构的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何在 Web 应用程序中组织 js 和 css 文件夹 我当前的项目结构是这样的 root assets js lib css img ind
  • Apache Commons JCI 重新加载类加载器

    有人有使用 Apache Commons JCI API 的 ReloadingClassLoader 的经验吗 唯一的使用示例可以在以下页面中找到 http commons apache org jci usage html http c
  • 如何在 UIWebview 中保存本地加载的 HTML 文件

    我正在使用 UIWebView 编写一个富文本编辑器 为此 我使用了一个模板文件作为启动器 然后 当用户完成编辑但尚未发布时 我想将当前内容保存到备份 html 文件中 以防应用程序损坏 我怎么做 给你 伙计 NSFileHandle fi
  • 有没有办法阻止 HTML access key="" 被激活?

    I tried preventDefault 但我还没有成功 我缺少什么吗 如果可能的话 我会尝试全局禁用它 例如在window 似乎没有办法阻止事件触发 唯一的选择似乎是在您不希望它们工作时暂时删除 accesskey 属性 就是这样jQ
  • csproj 文件中 元素的用途是什么

    当我编辑 Web 应用程序项目时 Visual Studio 2017 15 3 1 添加
  • Angular 4 setTimeout() 具有可变延迟和等待

    我有一个事件列表timestamp 我想要的是根据timestamp 添加延迟 delay timestamp t 1 timstamp t 我知道这不太适合setTimeout 但是有一个解决方法 如果超时是恒定的 但在我的情况下不是 是
  • 创建 Openstreetmap 提取的 mbtiles 文件的最简单方法?

    我正在创建一个使用在线和离线地图的 iPhone 旅行应用程序 对于离线地图 我希望允许用户下载他们感兴趣的区域 例如伦敦 的 mbtiles 文件 该地图应包含已在 OpenStreetmap 中找到的道路等信息 我知道以下网站http
  • pandas groupby 根据条件替换

    我有一个数据集结构如下 index country city Data 0 AU Sydney 23 1 AU Sydney 45 2 AU Unknown 2 3 CA Toronto 56 4 CA Toronto 2 5 CA Ott
  • Flutter:升级Play商店版本号

    我已经使用 flutter 在 Play 商店上发布了一个应用程序 现在我想上传该应用程序的新版本 我正在尝试更改版本代码 flutter 构建 apk build name 1 0 2 build number 3 或像这样更改 loca
  • 如何在 Java 中检查文件权限(独立于操作系统)

    我有以下代码片段 public class ExampleClass public static void main String args throws FileNotFoundException String filePath args
  • 加载 word2vec 时出现 UnicodeDecodeError 错误

    详细描述 我开始使用词嵌入 并发现了大量有关它的信息 到目前为止 我知道我可以训练自己的词向量或使用以前训练过的词向量 例如 Google 或 Wikipedia 的词向量 这些向量可用于英语 但对我来说没有用 因为我正在处理以下语言中的文
  • WSO2 Identity Server 5.1.0 未在 SAML 响应中返回用户声明

    在尝试新版本的 WSO2 Identity Server 5 1 0 时 我在返回 SAML 响应中的声明时遇到问题 虽然这在 WSO2 IS 5 0 0 SP1 中有效 我已经映射了所需的声明并将它们添加到我的 SP 此外我还配置了 SP
  • 使用 go 处理文件上传

    我最近才开始玩围棋 所以我还是个菜鸟 如果我犯了太多错误 抱歉 我已经尝试解决这个问题很长时间了 但我只是不明白发生了什么 在我的 main go 文件中 我有一个主要函数 func main http HandleFunc handler
  • 使用 FactoryGirl 时不断收到 record_invalid

    很多时候 当我在规范中使用 FactoryGirl 时 我不断收到如下错误 Failure Error f FactoryGirl build my model ActiveRecord RecordInvalid translation
  • 使用“sort”命令按多列对 CSV 文件进行排序

    我有一个类似 CSV 的文件 我想按列优先级对其进行排序 例如SQL 中的 ORDER BY https dev mysql com doc refman 8 0 en sorting rows html 例如 给定以下行 3 1 2 1
  • 如何使用 python urllib 忽略 Windows 代理设置?

    我希望 Python 在使用时忽略 Windows 代理设置urllib 我设法做到这一点的唯一方法是禁用 Internet Explorer 上的所有代理设置 有什么程序化的方式吗 os environ no proxy 不是一个好的选择
  • Symfony 3 根据远程 API 对用户进行身份验证

    我有一个应用程序 其中后端和前端由不同的主机提供服务 并且是两个不同的应用程序 均基于 Symfony 3 其中之一 后端ofc 处理业务逻辑并将用户及其角色保存在其数据库中 后端提供REST API供前端使用 我无法修改后端代码 因为它不
  • 如何选择所有列以及 Oracle 11g 中 CASE 语句的结果?

    我想选择 而不必键入所有单独的列 但我还想包含带有 case 语句的自定义列 我尝试了以下方法 select case when PRI VAL 1 then High when PRI VAL 2 then Med when PRI VA
  • Java MyBatis 存储过程调用带 OUT 参数

    第一个问题 我试图返回一个 OUT 参数 而不是带注释的结果集 首先 这可能吗 如果是的话 人们会怎样做呢 MyBatis 3 0 6 数据库 SQL Server 2008 以下是我在 UserDAO 中调用方法的语法示例 Select