Hibernate中使用Mysql存储过程
1、我使用了mysql-connector-java-5.0.0-beta-bin.jar(其实用老的mysql-connector-java-3.1.8-bin.jar也可以调用存储过程的)这个最新的mysql驱动。
2、数据库我使用了mysql-5.0.18-win32,安装后建立了一个简单的数据表。
sql如下:
|
create database testprocedure; use testprocedure; create table testtable (id int(11) AUTO_INCREMENT, content varchar(255), readcount int(11) DEFAULT 0,primary key (id)); desc testtable;(查看是否建立正确)
|
3、建立一个专用的用户(可选,建立时请使用具有grant权限的用户如root):
|
grant select,delete,update,create,alter,execute on testtable.* to testprocedure@"localhost" identified by "test";
|
用户名为testprocedure,密码test。注意权限中的execute,它就是执行call procedure的权限。在你的Hibernate配置中使用该帐户。
4、建立一个存储过程:
sql如下:
java代码: |
delimiter // (注意//是新的命令结束符,方便我们建立procedure) create procedure readcountplusone (inputid int) begin update testtable set readcount = readcount + 1 where id = inputid; end// (建立存储过程完毕) delimiter ; (恢复命令结束符为;)
|
5、测试一下存储过程:
java代码: |
insert into testtable values (null,'test',0); select * from testtable; call readcountplusone(1); select * from testtable;
|
应该看到原先readcount为0,call以后变成1,而且每次call都加1。
如果执行有错,可以删除procedure重新建立。
删除的命令为drop procedure readcountplusone;
6、开始在我们的Hibernate+Spring support项目中使用procedure:
HBM映射我们不说了,这里没有使用named query。Hibernate+Spring的配置这里也不多说了,应该可以搜寻到很多文章。
我的DAO是extends HibernateDAO,具体的使用方法可以参照其他很多讲Spring hibernate support的文章。
我们建立一个方法,比较丑陋(只是测试,大家有好方法可以提),假设对应testtable的pojo为TestPojo,它的getId()返回id对应的值:
java代码: |
public void readCountPlusOne(final TestPojo pojo) { getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) { try { Connection conn = session.connection();
String sql = "{call readcountplusone(?)}"; CallableStatement stmt = conn.prepareCall(sql); stmt.setLong(1, pojo.getId().longValue()); stmt.execute(); } catch (Exception e) { if(log.isDebugEnable){ log.debug("call DAO's readCountPlusOne() faild, with Exception:"); e.printStackTrace(); } }
return null; } }); }
|
7、然后我们在我们的bussiness中调用readCountPlusOne方法既可实现通过Hibernate调用一个简单的Mysql存储过程。
分享到:
相关推荐
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。...
CallableStatement 调用mysql5.0的存储过程和方法 配有创建存储过程和方法的源代码
MySQL 5.0 存储过程编程入门是数据库管理领域中的一个重要话题,它涉及到数据库的高级功能,使得数据库系统能够执行复杂的逻辑操作,提高数据处理的效率和安全性。存储过程是一组预先编译的SQL语句,可以在需要时被...
MySQL 5.0存储过程是数据库管理中的一个重要概念,它是一种预编译的SQL语句集合,可以在数据库中被封装并作为一个独立的可执行单元。存储过程极大地提高了数据库的性能和安全性,因为它减少了网络流量,使得多次使用...
根据提供的文档信息,本文将深入解析《MySQL 5.0 存储过程》这一主题,重点探讨存储过程的概念、特点以及在 MySQL 5.0 中的应用。存储过程是数据库管理系统中一项重要的功能,它允许开发者编写可重用的 SQL 代码块,...
### MySQL 5.0 存储过程核心知识点详解 #### 引言 随着数据库技术的发展,MySQL 5.0 版本引入了一系列重要的新特性,其中最值得关注的是**存储过程**的功能增强。这一功能不仅提高了数据库操作的灵活性,还极大地...
MySQL存储过程是数据库管理系统中的一个重要组成部分,特别是在MySQL 5.0版本中,它提供了一种组织和执行复杂SQL语句的高效方式。本资料集合包含了对MySQL 5.0官方存储过程的详细翻译,旨在帮助学习者深入理解并熟练...
10. **嵌套存储过程**:MySQL 5.0允许在一个存储过程中调用另一个存储过程,实现更复杂的逻辑结构。 通过了解和掌握这些特性,开发者能够更有效地利用MySQL 5.0存储过程来构建高效、可靠的数据库应用。提供的...
通过上述内容,我们对MySQL 5.0的存储过程有了全面的认识,包括它们的创建、调用、删除,以及在过程中如何使用条件语句、循环结构和各种函数。这不仅提高了数据库操作的效率,也简化了复杂的业务逻辑实现。
9. **存储过程和函数**:讲解如何创建、调用和管理存储过程和自定义函数,以及它们在数据库编程中的作用。 10. **触发器**:说明触发器的工作原理,如何定义触发器并在特定事件(如INSERT、UPDATE或DELETE)发生时...
MySQL 5.0是数据库管理系统领域中广泛应用的一个版本,它为开发者提供了强大的数据存储和管理功能。本手册旨在深入解析MySQL 5.0的各种特性和功能,帮助用户更好地理解和使用这个数据库系统。以下是对手册中可能包含...
在MySQL 5.0.4版本中,支持的特性可能包括那时MySQL数据库的所有最新功能,如事务处理、存储过程调用、预编译的SQL语句(PreparedStatement)以及连接池管理。然而,值得注意的是,随着时间的推移,更现代的MySQL...