春天数据利用JPA如何实现调用存储过程

  介绍

这篇文章给大家介绍利弹簧数据用JPA如何实现调用存储过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

JPA连接到数据库,调用存储过程,这样的需求很常见。本文就针对这一点,讲述如何使用弹簧数据JPA调用存储过程的方法。

<强> 1,存储过程

假设存储过程如下:

 test_pkg创建或替换包
  过程in_only_test (inParam1 VARCHAR2);
  过程in_and_out_test (inParam1 VARCHAR2, outParam1 VARCHAR2);
  test_pkg结束;/身体test_pkg创建或替换包
  过程in_only_test (inParam1 VARCHAR2)
  开始
  DBMS_OUTPUT.PUT_LINE (& # 39; in_only_test& # 39;);
  in_only_test结束;
  过程in_and_out_test (inParam1 VARCHAR2, outParam1 VARCHAR2)
  开始
  outParam1:=& # 39; outparam哦吼我,这是我inparam & # 39;| | inParam1;
  in_and_out_test结束;
  test_pkg; 

这里有两个存储过程:

1) in_only_test

它需要一个输入参数inParam1,但不返回值

2) in_and_out_test

它需要一个输入参数inParam1,且返回值outParam1

<强> 2,@NamedStoredProcedureQueries

我们可以使用@NamedStoredProcedureQueries注释来调用存储过程。

@ entity   @ table (name=癕YTABLE")   @NamedStoredProcedureQueries ({   @NamedStoredProcedureQuery (name=癷n_only_test" procedureName=皌est_pkg.in_only_test",参数={   @StoredProcedureParameter(模式=ParameterMode。name=癷nParam1", type=String.class)}),   @NamedStoredProcedureQuery (name=癷n_and_out_test" procedureName=皌est_pkg.in_and_out_test",参数={   @StoredProcedureParameter(模式=ParameterMode。在name=癷nParam1"、类型=String.class),   @StoredProcedureParameter(模式=ParameterMode。name=皁utParam1",类型=String.class)})})   公共类MyTable实现Serializable {   }

关键要点:

    <李>存储过程使用了注释@NamedStoredProcedureQuery,并绑定到一个JPA表。 <李> procedureName是存储过程的名字 <李>名称是JPA中的存储过程的名字 <李>使用注释@StoredProcedureParameter来定义存储过程使用的/出参数

<强> 3,创建春JPA数据数据库

下面我们来创建春JPA数据数据库:

公共接口MyTableRepository延伸CrudRepository{
  @Procedure (name=癷n_only_test")
  空白inOnlyTest (@Param (“inParam1")字符串inParam1);
  
  @Procedure (name=癷n_and_out_test")
  字符串inAndOutTest (@Param (“inParam1")字符串inParam1);
  }

关键要点:

    <李> @Procedure的名字参数必须匹配@NamedStoredProcedureQuery的名字李 <李> @Param必须匹配@StoredProcedureParameter注释的名字参数 <李>返回类型必须匹配:in_only_test存储过程返回是空白,in_and_out_test存储过程必须返回字符串

<强> 4,调用

我们可以这样调用存储过程:

//向存储过程传递参数并返回值
  字符串inParam=班薎m inputParam";
  字符串outParam=myTableRepository.inAndOutTest (inParam);
  断言。assertequal (outParam“outParam哦吼我,这是我inparam嗨Im inputParam");//向存储过程传递参数不返回值
  myTableRepository.inOnlyTest (inParam); 

<强> 5,其它技巧

如果上面的代码不工作,可以这么解决。定义自定义的库来调用存储过程昨晚本地查询。

定义自定义的存储库:

公共接口MyTableRepositoryCustom {
  空白inOnlyTest (String inParam1);
  }

然后要确保主库类继承了这个接口。

代码如下:
公共接口MyTableRepository延伸CrudRepository MyTableRepositoryCustom {}

<强> 6,创建库实现类

接着该创建库实现类了:

 @ autowired
  MyTableRepository MyTableRepository;//调用存储过程
  myTableRepository.inOnlyTest (inParam1); 

关于弹簧数据利用JPA如何实现调用存储过程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

春天数据利用JPA如何实现调用存储过程