`
ssydxa219
  • 浏览: 622343 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JPA调用存储过程

    博客分类:
  • jpa
 
阅读更多

要调用存储过程,我们可以通过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
  

要调用存储过程,我们可以通过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调用存储过程实例代码

    Spring Data JPA 提供了调用存储过程的能力,使得在Java应用中使用存储过程变得方便。 1. **存储过程** 存储过程是数据库中预编译的SQL语句集合,可以接受参数并返回结果。在本例中,我们有 `test_pkg` 包下的两个...

    EJB3JPA调用原生SQL和函数存储过程[归类].pdf

    通过EJB3和JPA调用存储过程,可以使用`EntityManager`的`createStoredProcedureQuery()`方法,并设置参数,然后调用`execute()`执行。 总结,EJB3和JPA提供了灵活的数据库访问方式,包括使用原生SQL和调用存储过程...

    EJB调用存储过程源码

    EJB(Enterprise JavaBeans)是Java EE平台中的一个核心组件,用于...文档"EJB调用存储过程_1.doc"和"EJB调用存储过程_2.doc"可能包含更具体的示例代码和实际应用案例,阅读这些文档将进一步加深你对这一主题的认识。

    EJB3.0实例教程如何调用存储过程.doc

    调用存储过程的方法主要依赖于EntityManager对象的createNativeQuery()方法,该方法用于执行非JPA(Java Persistence API)的SQL语句。调用存储过程的SQL格式通常如下: ```sql {call 存储过程名称(参数 1, 参数 2,...

    Java中调用SQL Server存储过程详解

    Java中调用SQL Server存储过程是一项常见的任务,特别是在开发企业级应用时,因为存储过程能够封装复杂的数据库逻辑,提高性能并降低网络流量。本篇文章详细介绍了如何通过Java调用SQL Server存储过程,涵盖了几种...

    jpa单表递归树形结构实现

    我们可以使用存储过程或者在Java代码中处理。例如,可以使用`findAllByOrderByParentIdAsc()`获取所有节点,然后在内存中遍历和构造树形结构。 最后,业务逻辑中调用`NodeRepository`的方法来操作树形结构。例如,...

    JPA 2.0jar包及JPA2.0源代码

    10. **存储过程**:JPA 2.0允许调用数据库的存储过程,并将其结果映射到Java对象。 **源代码与JavaDoc** 源代码可以帮助开发者理解JPA 2.0内部的工作机制,对于学习和调试非常有价值。JavaDoc则提供了详细的API...

    Spring Data JPA1.7中文文档

    Spring Data JPA 也支持调用数据库存储过程,通过 `@Procedure` 注解进行声明。 3.5. **事务性** JPA 存储库的方法默认是事务性的,可以根据需要配置事务边界。 3.6. **锁定** 支持乐观锁和悲观锁机制,以处理并发...

    Spring Data JPA中文文档[1.4.3].zip

    7. **存储过程**:Spring Data JPA也支持调用数据库存储过程,并将其结果转换为Java对象。 8. **JPA实体**:学习如何定义实体类,使用`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等注解,以及如何处理关系(如`...

    springdatajpa.pdf

    4. 使用`@Procedure`和`@Function`注解来调用数据库中的存储过程和函数。 通过上面的介绍,我们了解到SpringDataJPA不但提高了代码的复用性,还降低了ORM框架切换的成本。如果项目需要更换底层的数据持久化框架,只...

    Spring Data JPA从入门到精通

    最后,Spring Data JPA也支持存储过程的调用,只需要在Repository接口上定义一个方法,并使用`@Procedure`注解。 通过阅读《Spring Data JPA从入门到精通》和《Spring Data JPA中文文档[1.4.3]》,读者将能全面了解...

    JPA 批注 参考

    总结,JPA批注参考涵盖了从基础的实体定义、主键策略、属性映射到复杂的关联关系、查询语言、存储过程调用、事务处理等多个方面,是Java开发中进行数据库操作的重要工具。通过合理运用批注,开发者能够高效地实现ORM...

    jpa 全面学习资料

    - **Repository自定义操作**: 扩展JPA的默认行为,实现复杂查询或存储过程调用。 - **数据分页与排序**: 使用`Pageable`接口实现分页查询和排序。 - **异常处理**: 如`PersistenceException`, `...

    使用SpringBoot-JPA进行自定义保存及批量保存功能

    在上面的例子中,我们成功地使用JPA调用了mysql函数将对象存储到数据库中。但是,如果我们想批量保存呢?如何使用@Query注解来实现批量保存? 一种可能的解决方案是使用@Query注解来定义一个批量保存方法: ```...

    Pro JPA2 书籍 代码

    8. **存储过程的支持**:JPA2提供了调用存储过程的能力,扩展了JPA的功能范围。 9. **动态实体**:通过`EntityManager`的`createDynamicEntity`方法,可以创建临时的、运行时定义的实体,适用于动态数据模型的情况...

    JPA连接数据库,非常详细

    在描述的场景中,JPA连接数据库的过程是在`persistence.xml`配置文件中进行的。这个文件是JPA的配置中心,它定义了持久化单元(Persistence Unit),也就是数据库连接的相关信息。在这个例子中,配置文件内容如下: ...

    spring-data Jpa Jar包

    - 可以调用数据库的存储过程,通过`StoredProcedure`注解和`NamedStoredProcedureQuery`配置。 10. **性能优化** - 使用JPA的缓存机制,如一级缓存(Entity Manager级别的缓存)和二级缓存(可选,如Hibernate的...

    jpa测试用例(很详细的介绍)

    - 检查复杂查询,如JOINs、子查询,以及自定义SQL或存储过程的调用。 4. **性能测试** - 测试批量操作,如批处理插入和更新,评估JPA的性能。 - 分析延迟,测量从发出请求到接收响应的时间,找出可能的瓶颈。 -...

    springboot微服务项目加jpa

    在本项目中,Spring Boot被用作构建微服务的基础,每个服务可能包含特定的业务逻辑和数据存储。 **5. 实现细节** 在项目"BackendSystem-master-27261c9e2639b52a0e1369ce48ead0c69cc8a047"中,我们可以看到以下几个...

    springboot整合mybatis整合jpa使用entityManger

    Spring Boot简化了配置过程,使得MyBatis的集成变得非常容易。你需要在`pom.xml`文件中添加MyBatis和相关的依赖项,如MyBatis-Spring-Boot-Starter。接下来,在`application.yml`或`application.properties`中配置...

Global site tag (gtag.js) - Google Analytics