您的位置:首页 > 编程语言 > Java开发

Spring Data JPA调用存储过程实例

2015-12-01 12:20 501 查看

Spring Data JPA调用存储过程实例

标签:
springspringdatadatajpajpa

2015-12-01 12:20
9428人阅读 评论(10)
收藏
举报


分类:
Spring(7)




作者同类文章X

JavaEE开发(128)




作者同类文章X

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。

目录(?)[+]
Spring Data JPA调用存储过程实例
作者chszs未经博主允许不得转载经许可的转载需注明作者和博客主页httpblogcsdnnetchszs

存储过程
NamedStoredProcedureQueries
创建Spring Data JPA数据库
调用
其它技巧
创建Repository实现类

Spring Data JPA调用存储过程实例

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs
JPA连接到数据库,调用存储过程,这样的需求很常见。本文就针对这一点,讲述如何使用spring
Data JPA调用存储过程的方法。

1、存储过程

假设存储过程如下:

CREATE OR REPLACE PACKAGE test_pkg AS
PROCEDURE in_only_test (inParam1 IN VARCHAR2);
PROCEDURE in_and_out_test (inParam1 IN VARCHAR2, outParam1 OUT VARCHAR2);
END test_pkg;
/
CREATE OR REPLACE PACKAGE BODY test_pkg AS
PROCEDURE in_only_test(inParam1 IN VARCHAR2) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('in_only_test');
END in_only_test;
PROCEDURE in_and_out_test(inParam1 IN VARCHAR2, outParam1 OUT VARCHAR2) AS
BEGIN
outParam1 := 'Woohoo Im an outparam, and this is my inparam ' || inParam1;
END in_and_out_test;
END test_pkg;

这里有两个存储过程:

1)in_only_test

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

2)in_and_out_test

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

2、@NamedStoredProcedureQueries

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

@Entity
@Table(name = "MYTABLE")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "in_only_test", procedureName = "test_pkg.in_only_test", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "inParam1", type = String.class) }),
@NamedStoredProcedureQuery(name = "in_and_out_test", procedureName = "test_pkg.in_and_out_test", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "inParam1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "outParam1", type = String.class) }) })
public class MyTable implements Serializable {
}

关键要点:

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

3、创建Spring Data JPA数据库

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

public interface MyTableRepository extends CrudRepository<MyTable, Long> {
@Procedure(name = "in_only_test")
void inOnlyTest(@Param("inParam1") String inParam1);

@Procedure(name = "in_and_out_test")
String inAndOutTest(@Param("inParam1") String inParam1);
}

关键要点:

@Procedure的name参数必须匹配@NamedStoredProcedureQuery的name
@Param必须匹配@StoredProcedureParameter注释的name参数
返回类型必须匹配:in_only_test存储过程返回是void,in_and_out_test存储过程必须返回String

4、调用

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

// 向存储过程传递参数并返回值
String inParam = "Hi Im an inputParam";
String outParam = myTableRepository.inAndOutTest(inParam);
Assert.assertEquals(outParam, "Woohoo Im an outparam, and this is my inparam Hi Im an inputParam");
// 向存储过程传递参数不返回值
myTableRepository.inOnlyTest(inParam);

5、其它技巧

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

定义自定义的Repository:

public interface MyTableRepositoryCustom {
void inOnlyTest(String inParam1);
}

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

public interface MyTableRepository extends CrudRepository<MyTable, Long>, MyTableRepositoryCustom {
}

6、创建Repository实现类

接着该创建Repository实现类了:

public class MyTableRepositoryImpl implements MyTableRepositoryCustom {

@PersistenceContext

private EntityManager em;

@Override
p
4000
ublic void inOnlyTest(String inParam1) {
this.em.createNativeQuery("BEGIN in_only_test(:inParam1); END;").setParameter("inParam1", inParam1)
.executeUpdate();
}

}

可以以常规的方式进行调用:

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

是不是很简单。



顶 1 踩 2
 
 
上一篇在Visual Studio Code配置GoLang开发环境

下一篇在Ubuntu 15.10搭建MEAN开发环境

  相关文章推荐


spring调用Oracle存储过程,并返回结果集的完整实例

【直播】70天软考冲刺计划--任铄

spring中文帮助文档,CHM版,中文离线版

【直播】打通Linux脉络 进程、线程、调度--宋宝华

Spring Data JPA调用存储过程实例

【直播】机器学习之凸优化--马博士

Spring2.5开发参考手册(中文版)

【套餐】MATLAB基础+MATLAB数据分析与统计--魏伟

spring-data-jpa 中文文档(2)

【课程】3小时掌握Docker最佳实战--徐西宁

spring framework开发手册

【课程】深度学习基础与TensorFlow实践--AI100

Spring中文帮助文档

Spring ORM+Hibernate?Out!换 Spring Data JPA 吧!

Oracle存储过程学习经典[语法+实例+调用]

oracle存储过程学习实例文档 创建调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jpa springdata