要调用存储过程,我们可以通过EntityManager对象的createNativeQuery()方法执行SQL 语句(注意:这里说的是SQL语句,不是HPQL), 调用存储过程的SQL格式如下:
{call 存储过程名称(参数1, 参数2, … )}
在EJB3 中你可以调用的存储过程有两种
1.无返回值的存储过程。
2.返回值为ResultSet(以select 形式返回的值)的存储过程(注意:EJB3不能调用以OUT参数返回值的存储过程。)
下面我们看看几种具有代表性的存储过程的调用方法.
调用无返回值的存储过程
首先创建一个名为AddPerson的存储过程,他的DDL 如下(注:本例使用的是MySql数据库):
CREATE PROCEDURE `AddPerson`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT into person(`PersonName`,`sex`,`age`) values('存储过程',1,25);
END;
下面的代码片断展示了无返回值存储过程的调用方法:
//调用无返回参数的存储过程
Query query = em.createNativeQuery("{call AddPerson()}");
query.executeUpdate();
调用返回单值的存储过程
先创建一个名为GetPersonName的存储过程,他有一个INTEGER类型的输入参数,存储过程的DDL如下(注:本例使用的是MySql数据库):
CREATE PROCEDURE `GetPersonName`(IN Pid INTEGER(11))
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select personname from person where `personid`=Pid;
END;
下面的代码片断展示了返回单值的存储过程的调用方法:
//调用返回单个值的存储过程
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();
调用返回表全部列的存储过程
先创建一个名为GetPersonList的存储过程,他的DDL如下(注:本例使用的是MySql数据库):
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;
下面的代码片断展示了返回表全部列的存储过程的调用方法,我们可以让EJB3 Persistence运行环境将列值直接填充入一个Entity的实例(本例填充进Person对象),并将实例作为结果返回.
//调用返回Person 全部列的存储过程
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
。。。
while( iterator.hasNext() ){
Person person= (Person)iterator.next();
。。。
}
调用返回部分列的存储过程
先创建一个名为GetPersonPartProperties的存储过程,他的DDL如下(注:本例使用的是MySql数据库):
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
下面的代码片断展示了返回部分列的存储过程的调用方法.
//调用返回部分列的存储过程
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();
。。。。
while( iterator.hasNext() ){
//取每一行
Object[] row = ( Object[]) iterator.next();
//数组中的第一个值是personid
int personid = Integer.parseInt(row[0].toString());
String PersonName = row[1].toString();
。。。。
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/totogogo/archive/2007/07/26/1708219.aspx
分享到:
相关推荐
本篇文章主要介绍了Spring Data JPA调用存储过程实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
EJB3JPA调用原生SQL和函数存储过程[归类].pdf
我们可以通过几种不同的方式调用Oracle存储过程。 使用 使用javax.persistence 。 我们在这种情况下使用了这种方法无论我们选择哪种方式,在使用spring-data时都应该设置一些关键方面/属性(尤其是当我们不让Spring...
中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...
该类中包含有多个方法对数据库中的clob字段进行查询、插入、事物处理、批处理、调用存储过程等操作。使用的是myeclipse8.6,oracle11g,测试的时候执行手动建个表xml_buffer,包含id、xmlcontent字段即可,然后在...
它提供RESTful服务来创建,更新和查看单个公司及其各自所有者,还提供检索和列出存储在下划线存储库中的所有公司和所有者的服务。 从Web浏览器查看时,客户端可以对所有这些服务进行AJAX调用,并可视化相应的响应。...
的存储库)、 Spring ORM(来自 Spring 框架的核心 ORM 支持) BPM: Activiti 5.15 嘲笑: Mockito 应用服务器(嵌入式): Tomcat 对象到 JSON 映射: Jackson 日期时间实用程序: Joda-Time 断言库: Hamcrest - ...
前端使用Vue3 + TypeScript,后端采用SpringCloud + SpringBoot + Spring Data JPA 。基于 Netty 使用 WebSocket 实现了正常的C/S通信模块。根据场景实现了:基础聊天、附近的人、个人信息编辑。并对各个模块拆分为...
这是一个使用带有Spring JPA存储库的嵌入式DB(PostgreSQL)的示例应用程序。 目前,没有任何数据可持久存储到实际的数据库中,但是一旦应用程序启动,该会话的值将持久保存。 Sample是一个图书馆系统,在该系统中...
由于骆驼路线被设置为后台服务,因此,例如JPA存储的其他扩展也可以调用这些路线以执行到S3和MongoDB的路线。 使用spring配置更改应用程序上下文 在$ {installation_path} / config文件夹中要配置的一些其他文件是...
用play.db.jpa.Blob存储上传文件 - 74 - 强制保存 - 75 - 更多公共类型generic typing问题 - 77 - 08.Play.libs库包 - 78 - 用XPath解析XML - 78 - Web Service client - 79 - Functional programming with Java功能...
前端使用Vue3 + TypeScript,后端采用SpringCloud + SpringBoot + Spring Data JPA 。基于 Netty 使用 WebSocket 实现了正常的C/S通信模块。根据场景实现了:基础聊天、附近的人、个人信息编辑。并对各个模块拆分为...
EclipseLink JPA2.1用于导入用于管理对 SQL 数据库的调用的 JPA 库。 MySQL-Connector 5.1.31用于访问 Java 应用程序中的 SQL 数据库。 JCalendar 1.4提供了一个易于使用的 GUI 界面,供用户选择项目的开始和结束...
创建Spring Boot项目:使用Spring Initializr创建一个新的Spring Boot项目,并添加相应的依赖,比如Spring Web、Spring Data JPA等。 编写实体类:根据数据库表结构,在Java中创建相应的实体类,用于映射数据库表。 ...
系统的数据存储使用MySQL数据库,通过JPA进行数据的持久化操作。系统的数据表包括用户表、菜品表、购物车表和订单表等。系统的开发环境为Java 8,开发工具为IntelliJ IDEA,数据库管理工具为Navicat。这款网上点餐...
技术特点:使用Spring Boot框架简化了开发过程,提高了开发效率。利用JPA技术实现对MySQL数据库的操作,简化了数据库操作代码。使用RESTful API设计,方便前端调用后端接口进行数据交互。采用前后端分离的架构,使得...
在开发过程中自动重新加载网站(gulp 功能) 使用JavaScript 单元测试 使用end2end 测试 使用REST 调用 编辑任务对象,包括子任务(1-n 关系) 列出任务对象和语言对象的修订版本(通过 Hibernate Envers 存储在...
无缝集成MongoDB数据库,提供对非结构型数据存储,解决关系型数据库瓶颈问题。集成swagger框架,实现自动API测试及调试功能,解决程序员最反感的编写技术文档的问题。数据源基于Druid,提供更高性能及SQL监控。框架...
前后端交互使用JWT验证权限,使用Redis调用lua脚本CAS的方式,并且在令牌刷新时,旧令牌续命30秒进行平滑过渡,丝般顺滑地达到了用户无感知动态刷新JWT的目的。 jpa`动态条件查询写起来麻烦`,`项目的逻辑复杂的...
SpringBoot服务端主要负责数据的处理和存储,以及提供API接口供前端调用。Vue客户端则主要负责页面的展示和用户交互。 在SpringBoot服务端,我们使用了JPA进行数据库操作,MyBatis进行SQL查询,Redis进行数据缓存,...