文档章节

hibernate 调用存储过程

吕兵阳
 吕兵阳
发布于 2015/10/17 11:35
字数 534
阅读 27
收藏 1
点赞 0
评论 0

笔者参考原文:http://www.iteye.com/topic/176032

使用hibernate 调用存储过程。

public class StuInfo {
	private int id;
	private String stuName;
	private String stuNo;
	private int stuAge;
	private String stuId;
	private String stuSeat;
	private String stuAddress;
setters();getters();
}

对应的数据库表:

if exists(select * from sysobjects where name='stuInfo')
drop table stuInfo
create table stuInfo /*创建学员信息表**/
(
 stuName varchar(20) not null,-- 姓名,非空
 stuNo char(6) not null,-- 学号,非空
 stuAge int not null,-- 年齡,int 默认为4个长度
 stuId numeric(18,0),
 stuSeat smallint ,-- 坐位车,使用自增
 stuAddress text -- 住址 可以为空
)
-- 给stuInfo添加一列
alter table stuInfo add id int identity(1,1) primary key;

创建存储过程:

-- 存储过程
if exists(select name from sysobjects where name='proc_stuInfo' and type='p')
drop proc proc_stuInfo
go
create proc proc_stuInfo
as
 select * from stuInfo
go
-- 调用存储过程
exec proc_stuInfo;

在hibernate 中调用存储过程的几种方法。

第一种:命名查询

<sql-query name="getStuInfo" callable="true">  
     <return alias="stuInfo" class="com.hkrt.domain.StuInfo">  
        <return-property name="id" column="id" />  
		<return-property name="stuName" column="stuName" />
		<return-property name="stuAge" column="stuAge" />
		<return-property name="stuNo" column="stuNo"/>
		<return-property name="stuSeat" column="stuSeat" />
		<return-property name="stuAddress" column="stuAddress"/>
		<return-property name="stuId" column="stuId"/>
     </return>  
     {call proc_stuInfo()}  
  </sql-query>

List li=session.getNamedQuery("getStuInfo").list();  
		System.out.println(li.get(0));
第二种:类型于jdbc

System.out.println("jdbc 调用-------------");
		Connection conn = session.connection();   
		ResultSet rs =null;  
		CallableStatement call;
		try {
			call = conn.prepareCall("{Call proc_stuInfo()}");
			rs = call.executeQuery(); 
		   	while(rs.next()){
		   		System.out.println(rs.getString(1));
		   		System.out.println(rs.getString(2));
		   		System.out.println(rs.getString(3));
		   		System.out.println(rs.getString(4));
		   		System.out.println(rs.getString(5));
		   		System.out.println(rs.getString(6));
		 		System.out.println(rs.getString(7));
		   		System.out.println("------------------");
		   	}
		} catch (SQLException e) {
			e.printStackTrace();
		}


第三种:最简单的一种

SQLQuery query =  session.createSQLQuery("{call proc_stuInfo()}").addEntity(StuInfo.class);  
	List list =query.list(); 
	System.out.println(list.get(0));

注:在第三种调用时,一定要加上addEntity();否则没有数据返回。

hibenate 调用带参的存储程

-- 带参数据的存储过程
if exists(select name from sysobjects where name='proc_find_stu' and type='p')
drop proc  proc_find_stu
go
create proc  proc_find_stu(@startId int,@endId int)
as
 select * from stuInfo where id between @startId and @endId;
go
exec proc_find_stu 1,4;

/**hibernate 调用带参的存储过程*/
	@SuppressWarnings("unchecked")
	@Test
	public void msTest2(){
		SessionFactory sf = SessionFactoyUtil.getSessionFactory();
		Session session = sf.openSession();
		SQLQuery query =   session.createSQLQuery("{CALL proc_find_stu(?,?)}").addEntity(StuInfo.class);
		query.setLong(0, 2);  
		query.setLong(1, 4);  
		List<StuInfo> list =query.list(); 
		 for(int i =0;i<list.size();i++){
			 System.out.println(list.get(i));
		 }
	}


结果信息:
Hibernate: 
    {CALL proc_find_stu(?,?)}
StuInfo [id=2, stuAddress=北京, stuAge=12, stuId=123456789012345687, stuName=李四, stuNo=112345, stuSeat=2]
StuInfo [id=4, stuAddress=北京, stuAge=12, stuId=123456789012345688, stuName=王五, stuNo=112345, stuSeat=3]



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

本文转载自:http://blog.csdn.net/liuc0317/article/details/6626192

共有 人打赏支持
吕兵阳
粉丝 81
博文 274
码字总数 104949
作品 0
郑州
后端工程师
hibernate sql 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。 SQL查...

DaDa-da ⋅ 04/23 ⋅ 0

hibernate中调用存储过程

我搭建的一个ssh1(spring2.5.6+hibernate3.4+struts1.3.8)框架中需要提供一个调用存储过程的公有方法。 原理:这个其实和ssh没啥关系,主要是我们的java.sql.Connection中已经提供了这样的...

索隆 ⋅ 2012/06/23 ⋅ 0

Hibernate 存储过程的调用

本文讲述的是Hibernate 存储过程的调用,首先给出了简单的Hibernate存储过程并附其Java代码,然后给出了调用方法的Java代码,及其它相应的Java代码。 下边是简单的Hibernate存储过程 Java代码...

鉴客 ⋅ 2010/08/23 ⋅ 1

hibernate调用mysql存储过程

 在mysql中创建两个存储过程,如下: 1、根据id查找某条数据: 1 CREATE PROCEDURE (IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end; 2、根据id查找某个字段,并返回 ...

开源中国-首席码农 ⋅ 2016/03/22 ⋅ 0

Hibernate调用存储过程示例(有参数,返回结果集)

1、存储过程 2、数据库客户端执行存储过程如下: 执行结果如下: 3、java代码通过hibernate调用存储过程 打印结果: FreezeMon:2017-09 meterid:0351-09768 4、hibernate取出存储过程的输出参...

ytangdigl ⋅ 2017/10/26 ⋅ 0

Hibernate SQL查询 addScalar()或addEntity()

Hibernate除了支持HQL查询外,还支持原生SQL查询。 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。该接口是Query接口的子接口。 执行S...

小和尚敲代码 ⋅ 2016/01/29 ⋅ 0

hibernate批量修改,批量删除

在Hibernate应用中如何处理批量更新和批量删除? 批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年...

Kerry_Han ⋅ 2013/08/30 ⋅ 0

Hibernate调用Oracle存储过程

因为每个设备都会采集的GPS数据,于是决定分表实现。最初想到的是用JDBC来实现,但是总会有意想不到的事情发生,很是郁闷(如摘要所言的问题)。所以思前想后还是把这种SQL操作的事情让存储过...

boonya ⋅ 2014/12/04 ⋅ 0

使用SQLQuery 在Hibernate中使用sql语句

session.createSQLQuery.转载 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。下面来描述如何使用这个API进行查询。 最基本的SQL查询就是...

无间道 ⋅ 2013/03/13 ⋅ 1

通过hibernate去调用存储过程

之前一直误以为用了hibernate之后就不可以使用存储过程了 可能是因为跨平台的考虑,好像这方面的资料还真的是上很少介绍(请允许我的孤陋寡闻) 说实话还真看不出来hibernate调用存储过程有什...

索隆 ⋅ 2012/06/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 10分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 12分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 23分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 25分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 27分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 28分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 59分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部