Hibernate3.x 调用存储过程详解
需积分: 0 162 浏览量
更新于2024-08-03
收藏 7KB TXT 举报
"hibernate调用存储过程"
在Java的持久化框架Hibernate中,调用数据库的存储过程是常见的需求。本示例将详细介绍如何在Hibernate 3.x版本中实现对存储过程的调用,包括获取数据、插入数据和更新数据。这里假设我们使用的数据库是MySQL,版本为5.0,并且已经配置了合适的驱动(如mysql-connector-java-5.0.4-bin.jar)。
首先,我们创建一个简单的用户表`tbl_user`,包含`userid`(主键)、`name`和`blog`字段:
```sql
DROP TABLE IF EXISTS `user`;
CREATE TABLE `tbl_user` (
`userid` varchar(50) NOT NULL,
`name` varchar(50) DEFAULT '',
`blog` varchar(50) DEFAULT '',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
```
接下来,我们为这个表创建三个存储过程,分别用于获取所有用户信息(`getUserList`)、插入新用户(`createUser`)和更新用户信息(`updateUser`):
1. 获取所有用户信息的存储过程`getUserList`:
```sql
DROP PROCEDURE IF EXISTS `getUserList`;
CREATE PROCEDURE `getUserList`()
BEGIN
SELECT * FROM tbl_user;
END;
```
2. 通过输入参数插入新用户的存储过程`createUser`:
```sql
DROP PROCEDURE IF EXISTS `createUser`;
CREATE PROCEDURE `createUser`(IN userid varchar(50), IN name varchar(50), IN blog varchar(50))
BEGIN
INSERT INTO tbl_user (userid, name, blog) VALUES (userid, name, blog);
END;
```
3. 更新用户信息的存储过程`updateUser`:
```sql
DROP PROCEDURE IF EXISTS `updateUser`;
CREATE PROCEDURE `updateUser`(IN nameValue varchar(50), IN blogValue varchar(50), IN useidValue varchar(50))
BEGIN
UPDATE tbl_user SET name = nameValue, blog = blogValue WHERE userid = useidValue;
END;
```
在Hibernate中调用这些存储过程,我们需要创建对应的`SQLQuery`对象并设置参数。以下是如何在Java代码中调用这些存储过程的示例:
```java
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
// 调用getUserList存储过程
session.createSQLQuery("CALL getUserList()").addEntity(User.class).list(); // User是对应实体类
// 调用createUser存储过程
session.createSQLQuery("CALL createUser(:userid, :name, :blog)")
.setParameter("userid", "newUserId")
.setParameter("name", "NewUser")
.setParameter("blog", "http://newuser.blog.com")
.executeUpdate();
// 调用updateUser存储过程
session.createSQLQuery("CALL updateUser(:nameValue, :blogValue, :useidValue)")
.setParameter("nameValue", "UpdatedName")
.setParameter("blogValue", "http://updateduser.blog.com")
.setParameter("useidValue", "userIdToUpdate")
.executeUpdate();
session.close();
HibernateUtil.shutdown();
```
在上述代码中,`User`是映射到`tbl_user`表的实体类,`addEntity(User.class)`将查询结果映射为User对象的列表。`setParameter`方法用于设置存储过程中的输入参数。
注意,由于Hibernate主要是面向对象的ORM框架,而存储过程是SQL语句的一部分,因此在调用存储过程时,通常需要使用`createSQLQuery`而不是`createQuery`或`createCriteria`。此外,虽然可以直接通过SQLQuery调用存储过程,但这种方式丢失了Hibernate的一些高级特性,如事务管理、缓存等,因此在实际开发中需要权衡利弊来选择合适的方法。
2009-01-16 上传
2010-04-06 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
![](https://profile-avatar.csdnimg.cn/b56e5541a8314675b4316e390a8f4aa0_wchg21131.jpg!1)
paterWang
- 粉丝: 1103
- 资源: 1439
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解