[亲测可用]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();

相关文章
|
存储 Oracle 关系型数据库
Oracle存储过程插入临时表优化与慢查询解决方法
优化是一个循序渐进的过程,就像雕刻一座雕像,需要不断地打磨和细化。所以,耐心一点,一步步试验这些方法,最终你将看到那个让你的临时表插入操作如同行云流水、快如闪电的美丽时刻。
601 14
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
529 15
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
740 73
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
1192 5
|
Java Spring 容器
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
1053 2
|
SQL Java 编译器
深入理解 Spring Data JPA 的导入与使用:以 UserRepository为例
本文深入解析了 Spring Data JPA 中 `UserRepository` 的导入与使用。通过示例代码,详细说明了为何需要导入 `User` 实体类、`JpaRepository` 接口及 `@Repository` 注解。这些导入语句分别用于定义操作实体、提供数据库交互方法和标识数据访问组件。文章还探讨了未导入时的编译问题,并展示了实际应用场景,如用户保存、查询与删除操作。合理使用导入语句,可让代码更简洁高效,充分发挥 Spring Data JPA 的优势。
822 0
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
471 3
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
228 1

推荐镜像

更多