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/chszsJPA连接到数据库,调用存储过程,这样的需求很常见。本文就针对这一点,讲述如何使用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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统