介绍
公共接口MyTableRepository延伸CrudRepository MyTableRepositoryCustom {}
这篇文章给大家介绍利弹簧数据用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
<强> 6,创建库实现类强>
接着该创建库实现类了:
@ autowired MyTableRepository MyTableRepository;//调用存储过程 myTableRepository.inOnlyTest (inParam1);
关于弹簧数据利用JPA如何实现调用存储过程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。