要调用存储过程,我们可以通过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();
。。。。
}
分享到:
相关推荐
Spring Data JPA 提供了调用存储过程的能力,使得在Java应用中使用存储过程变得方便。 1. **存储过程** 存储过程是数据库中预编译的SQL语句集合,可以接受参数并返回结果。在本例中,我们有 `test_pkg` 包下的两个...
通过EJB3和JPA调用存储过程,可以使用`EntityManager`的`createStoredProcedureQuery()`方法,并设置参数,然后调用`execute()`执行。 总结,EJB3和JPA提供了灵活的数据库访问方式,包括使用原生SQL和调用存储过程...
EJB(Enterprise JavaBeans)是Java EE平台中的一个核心组件,用于...文档"EJB调用存储过程_1.doc"和"EJB调用存储过程_2.doc"可能包含更具体的示例代码和实际应用案例,阅读这些文档将进一步加深你对这一主题的认识。
调用存储过程的方法主要依赖于EntityManager对象的createNativeQuery()方法,该方法用于执行非JPA(Java Persistence API)的SQL语句。调用存储过程的SQL格式通常如下: ```sql {call 存储过程名称(参数 1, 参数 2,...
Java中调用SQL Server存储过程是一项常见的任务,特别是在开发企业级应用时,因为存储过程能够封装复杂的数据库逻辑,提高性能并降低网络流量。本篇文章详细介绍了如何通过Java调用SQL Server存储过程,涵盖了几种...
我们可以使用存储过程或者在Java代码中处理。例如,可以使用`findAllByOrderByParentIdAsc()`获取所有节点,然后在内存中遍历和构造树形结构。 最后,业务逻辑中调用`NodeRepository`的方法来操作树形结构。例如,...
10. **存储过程**:JPA 2.0允许调用数据库的存储过程,并将其结果映射到Java对象。 **源代码与JavaDoc** 源代码可以帮助开发者理解JPA 2.0内部的工作机制,对于学习和调试非常有价值。JavaDoc则提供了详细的API...
Spring Data JPA 也支持调用数据库存储过程,通过 `@Procedure` 注解进行声明。 3.5. **事务性** JPA 存储库的方法默认是事务性的,可以根据需要配置事务边界。 3.6. **锁定** 支持乐观锁和悲观锁机制,以处理并发...
7. **存储过程**:Spring Data JPA也支持调用数据库存储过程,并将其结果转换为Java对象。 8. **JPA实体**:学习如何定义实体类,使用`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等注解,以及如何处理关系(如`...
4. 使用`@Procedure`和`@Function`注解来调用数据库中的存储过程和函数。 通过上面的介绍,我们了解到SpringDataJPA不但提高了代码的复用性,还降低了ORM框架切换的成本。如果项目需要更换底层的数据持久化框架,只...
最后,Spring Data JPA也支持存储过程的调用,只需要在Repository接口上定义一个方法,并使用`@Procedure`注解。 通过阅读《Spring Data JPA从入门到精通》和《Spring Data JPA中文文档[1.4.3]》,读者将能全面了解...
总结,JPA批注参考涵盖了从基础的实体定义、主键策略、属性映射到复杂的关联关系、查询语言、存储过程调用、事务处理等多个方面,是Java开发中进行数据库操作的重要工具。通过合理运用批注,开发者能够高效地实现ORM...
- **Repository自定义操作**: 扩展JPA的默认行为,实现复杂查询或存储过程调用。 - **数据分页与排序**: 使用`Pageable`接口实现分页查询和排序。 - **异常处理**: 如`PersistenceException`, `...
在上面的例子中,我们成功地使用JPA调用了mysql函数将对象存储到数据库中。但是,如果我们想批量保存呢?如何使用@Query注解来实现批量保存? 一种可能的解决方案是使用@Query注解来定义一个批量保存方法: ```...
8. **存储过程的支持**:JPA2提供了调用存储过程的能力,扩展了JPA的功能范围。 9. **动态实体**:通过`EntityManager`的`createDynamicEntity`方法,可以创建临时的、运行时定义的实体,适用于动态数据模型的情况...
在描述的场景中,JPA连接数据库的过程是在`persistence.xml`配置文件中进行的。这个文件是JPA的配置中心,它定义了持久化单元(Persistence Unit),也就是数据库连接的相关信息。在这个例子中,配置文件内容如下: ...
- 可以调用数据库的存储过程,通过`StoredProcedure`注解和`NamedStoredProcedureQuery`配置。 10. **性能优化** - 使用JPA的缓存机制,如一级缓存(Entity Manager级别的缓存)和二级缓存(可选,如Hibernate的...
- 检查复杂查询,如JOINs、子查询,以及自定义SQL或存储过程的调用。 4. **性能测试** - 测试批量操作,如批处理插入和更新,评估JPA的性能。 - 分析延迟,测量从发出请求到接收响应的时间,找出可能的瓶颈。 -...
在本项目中,Spring Boot被用作构建微服务的基础,每个服务可能包含特定的业务逻辑和数据存储。 **5. 实现细节** 在项目"BackendSystem-master-27261c9e2639b52a0e1369ce48ead0c69cc8a047"中,我们可以看到以下几个...
Spring Boot简化了配置过程,使得MyBatis的集成变得非常容易。你需要在`pom.xml`文件中添加MyBatis和相关的依赖项,如MyBatis-Spring-Boot-Starter。接下来,在`application.yml`或`application.properties`中配置...