专栏首页灵儿的笔记[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法

[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法

一、前言

我们知道在plsql里可以通过下面方式执行存储过程,

begin P_ACCOUNT(202004270000) ; end;

--或者

call  P_ACCOUNT(202004270000)

但是在代码里如何调用存储过程呢,我试了一些网上大家提供的方法,基本没用效果,包括在@Query后面加{call P_ACCOUNT(?,?)} 什么存储过程名称的,或者各种接口、实现类互相调用的,都是千篇一律,不知道哪家copy哪家的,都没有任何效果 。 或者这些方法对他们的项目可能有用,亦是我的姿势可能不对,但是总的来说,下面这个方法是我亲测可用的,而且实现起来相对更简单,十行代码都不到就能实现

二、调用存储过程Demo

//公众号灵儿的笔记:zygxsq
    @Transactional
	@Modifying
	@Query
	public void callProcedureSend(Long Id){
		logger.info("调用存储过程P_ACCOUNT({})",new Object[]{Id});

		StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("P_ACCOUNT");

		storedProcedure.registerStoredProcedureParameter("A_ID", Long.class, ParameterMode.IN);
		storedProcedure.registerStoredProcedureParameter("result", String.class, ParameterMode.OUT);
		storedProcedure.setParameter("A_ID", Id);
		boolean execute = storedProcedure.execute();

        //博客原帖链接:https://blog.csdn.net/qq_27471405/article/details/105794591

		//获取返回结果
		String result = storedProcedure.getOutputParameterValue("result").toString();
	}
 

三、代码说明

P_ACCOUNT :就是在oracle中的存储过程名称

A_ID :就是入参,如果还有其他入参,就再写一行,

storedProcedure.registerStoredProcedureParameter("xxx参数", 参数类型, ParameterMode.IN);

我这里的入参id是一个number类型,所以这里用Long.class,如果是char类型,这里就用String.class

result:这里是自定义一个返回值的参数名称,如果存储过程有返回值返回,就加这行代码,如果没有的话,就不需要加这两行了

storedProcedure.registerStoredProcedureParameter("result", String.class, ParameterMode.OUT);
String result = storedProcedure.getOutputParameterValue("result").toString();

参考文章

https://www.it1352.com/956045.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 武汉疫情系列(工具类)|JAVA爬取丁香医生|腾讯新闻|新浪等全国新型肺炎疫情实时动态

    小小鱼儿小小林
  • 前端开发每天必学之HTML入门介绍

    这篇文章主要介绍了前端开发每天必学之HTML入门基础知识,介绍了学习web前端开发需要掌握的基础技术,感兴趣的小伙伴们可以参考一下

    小小鱼儿小小林
  • eclipse中向svn提交代码冲突的解决

    1. 点击提交,报错——‘SVN提交’has encountered a problem.

    小小鱼儿小小林
  • Spring mvc中统一对ResponseBody进行封装

    在一个前后端分离的项目中,需要对后端RestController里返回的ResponseBody进行统一的封装,让所有的API结果的都是json对象,带有是否成...

    大神带我来搬砖
  • B站:6.curd monogodb

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • Spring源码学习(五) 创建Bean过程中的扩展点

    绿色的部一般用于Spring内部扩展,黄色的部分可用于自定义实例化。 本文仅仅聊聊InitializingBean,对于绿色部分,建议您查看,其他人写的bl...

    温安适
  • 五分钟为HTTP接口提供Java/Scala SDK

    我现在要使用yarn的两个接口,一个是application 列表,一个是根据appId获取这个app的详情。对应的接口大约如此:

    用户2936994
  • python遍历一个目录,输出所有文件名

    python遍历一个目录,输出所有文件名 python os模块 os import os  def GetFileList(dir, fileList):...

    marsggbo
  • Dubbo协议帧概述

    在TCP协议栈中,每层协议都有自己的协议报文格式,比如TCP协议是网络七层模型中的传输层,有TCP协议报文格式;在TCP上层是应用层,应用层协议常见的有http...

    加多
  • 如何应对混合云网络的复杂性?

    在经过一番艰苦努力的之后,我最终调试解决了一个非常棘手的混合云网络问题。 虚拟私有云(VPC)提供了一个包含免费虚拟机(VM)使用时间的培训项目,学生可以跟随一...

    静一

扫码关注云+社区

领取腾讯云代金券