Hibernate3.x 调用存储过程详解
需积分: 0 104 浏览量
更新于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的一些高级特性,如事务管理、缓存等,因此在实际开发中需要权衡利弊来选择合适的方法。
103 浏览量
点击了解资源详情
106 浏览量
2011-11-08 上传
158 浏览量
2009-05-10 上传
2021-11-22 上传
2022-08-08 上传
paterWang
- 粉丝: 1252
- 资源: 2259
最新资源
- MergeMarks-crx插件
- RMMapper(iPhone源代码)
- 淘宝新开店铺提取器.rar
- XinGePush:腾讯信鸽.NET SDK
- 多输入多输出MIMO系统广义奈奎斯特nyquist曲线绘制
- yashwanthkumarsuruneni:关于Y @ $ h
- 特效菜单 模块源码+例程-易语言
- sudoku
- 银河系访客
- Team-PI-Repo
- uCertify Proctoring-crx插件
- 智能巡检管理系统在电力线路巡检中的应用探究.rar
- 华南X79主板RAID驱动 适用于慢装系统.zip
- TRSDialScrollView(iPhone源代码)
- matlab代码字的大小-simLDPC:低密度奇偶校验码编码器和解码器仿真的MATLAB实现
- 测试