Hibernate3.x调用存储过程大揭密

Hibernate3.x调用存储过程大揭密

[ 收藏此页] [ 打印]
作者: IT168 Amigo  2007-05-14
<script>init_Nav();</script>

    【IT168 专稿】本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤,从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法。
如果底层数据库(eg. Oracle、mysql、sqlserver)等支持存储过程,可通过存储过程执行批量删除、更新等操作。本文以实例说明在hibernate3.x中如何调用存储过程。
   说明:本例hibernate所用版本为3.0,mysql所用版本为5.0,所用数据库驱动为mysql-connector-java-5.0.4-bin.jar。

一. 建表与初始化数据
  在mysql的test数据库中建立一张新表:tbl_user,建表语句如下:
  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;

  建表成功后,在该表中任意插入几条数据。

二. 建立存储过程
为测试hibernate3.x中存储过程的调用,我们在user表中建立getUserList、createUser、updateUser和deleteUser这四个存储过程,在mysql中建立存储过程的语句如下:
1. 获得用户信息列表的存储过程--getUserList
DROP PROCEDURE IF EXISTS `getUserList`;
CREATE PROCEDURE `getUserList`()
begin
     select * from  tbl_user;
end;

2. 通过传入的参数创建用户的存储过程--createUser
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 values(userid, name, blog);
end;

3. 通过传入的参数更新用户信息的存储过程--updateUser
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 = useridValue;
end;

4. 删除用户信息的存储过程--deleteUser
DROP PROCEDURE IF EXISTS `deleteUser`;
CREATE PROCEDURE `deleteUser`(IN useridValue int(11))
begin
    delete from tbl_user where userid = useridValue;
end;

三. 编码与测试
    在准备工作完成后,进入编码与测试阶段,本例演示了在hibernate3.0中调用mysql的存储过程的方法。

1、hibernate的配置文件
在hibernate的配置文件中包含数据库的连接信息,以及加入OR mapping的xml格式的映射文件,该文件如下(部分内容略):

 


   
…… <property name="connection.url">jdbc:mysql://localhost:3306/testproperty> <property name="connection.username">rootproperty> <property name="connection.password">rootproperty> <property name="connection.driver_class">com.mysql.jdbc.Driverproperty> <property name="dialect">org.hibernate.dialect.MySQLDialectproperty> <property name="show_sql">trueproperty> <mapping resource="com/amigo/proc/model/User.hbm.xml"/> ……

 

2、OR Mapping文件

    产生的OR Mapping文件有User.java以及其对应的hibernate映射文件User.hbm.xml。其中User.java的内容如下:
public class User implements java.io.Serializable {
 private static final long serialVersionUID = 1L;
 /** 用户id*/
 private String userid;
 /** 用户姓名*/
 private String name;
 /** 用户blog*/
 private String blog;
//省略get/set方法
}

User.hbm.xml文件的内容如下:

 


   
xml version="1.0"?> DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.amigo.proc.model"> <class name="User" table="tbl_user"> <id name="userid" column="userid"> <generator class="assigned"/> id> <property name="name" column="name" type="string" /> <property name="blog" column="blog" type="string" /> class> <sql-query name="getUserList" callable="true"> <return alias="user" class="User"> <return-property name="userid" column="userid"/> <return-property name="name" column="name"/> <return-property name="blog" column="blog" /> return> {call getUserList()} sql-query> hibernate-mapping>

 


    在该文件中需注意中的这段代码,调用的存储过程在其中定义,并定义了调用存储过程后将记录组装成User对象,同时对记录的字段与对象的属性进行相关映射。

3. hibernate调用存储过程的测试类
本类是该例的核心类,在本类中,以实例清楚地说明了在hibernate中如何调用存储过程,例示了hibernate调用查询、更新、插入和删除这四类存储过程的方法,该类的内容如下:

 


   
// hibernate调用存储过程 public class ProcTest ... { public static void main(String[] args) throws Exception ...{ ProcTest proc = new ProcTest(); Session session = HibernateSessionFactory.getSession(); proc.testProcQuery(session); proc.testProcUpdate(session); System.out.println("update successfully"); proc.testProcInsert(session); System.out.println("insert successfully"); proc.testProcDelete(session); System.out.println("delete successfully"); session.close(); } // 测试实现查询的存储过程 private void testProcQuery(Session session) throws Exception ...{ //查询用户列表 List list = session.getNamedQuery("getUserList").list(); for (int i = 0; i < list.size(); i++) ...{ User user = (User) list.get(i); System.out.print("序号: " + (i+1)); System.out.print(", userid: " + user.getUserid()); System.out.print(", name: " + user.getName()); System.out.println(", blog: " + user.getBlog()); } } /**//** * 测试实现更新的存储过程 * @throws Exception */ private void testProcUpdate(Session session) throws Exception ...{ //更新用户信息 Transaction tx = session.beginTransaction(); Connection con = session.connection(); String procedure = "{call updateUser(?, ?, ?)}"; CallableStatement cstmt = con.prepareCall(procedure); cstmt.setString(1, "陈xx"); cstmt.setString(2, "http://www.blogjava.net/sterningChen"); cstmt.setString(3, "sterning"); cstmt.executeUpdate(); tx.commit(); } // 测试实现插入的存储过程 private void testProcInsert(Session session) throws Exception ...{ //创建用户信息 session.beginTransaction(); PreparedStatement st = session.connection().prepareStatement("{call createUser(?, ?, ?)}"); st.setString(1, "amigo"); st.setString(2, "阿蜜果"); st.setString(3, "http://www.wblogjava.net/amigoxie"); st.execute(); session.getTransaction().commit(); } // 测试实现删除的存储过程 private void testProcDelete(Session session) throws Exception ... { //删除用户信息 session.beginTransaction(); PreparedStatement st = session.connection().prepareStatement("{call deleteUser (?)} "); st.setString(1, "amigo" ); st.execute(); session.getTransaction().commit(); } }

 

    在本类中,调用查询类存储过程时,调用session.getNamedQuery("…")方法来获得User.hbm.xml中配置的查询存储过程。在其余的存储过程调用的测试中,首先通过hibernate的session获得connection,然后调用connection对象的相应方法来实现存储过程的调用。

五.总结
   本例提出了在hibernate3中调用mysql的存储过程的实现方案,从本例可以看出,hibernate提供了在*.hbm.xml中配置调用存储过程,并通过向用户提供session.getNamedQuery("…")方法来调用配置的调用查询相关的存储过程的方法,另外,hibernate还提供了取得sql的connection的方法,从而能够通过connection中存储过程调用相关的方法来实现存储过程的调用。

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?.docx 政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈? 立即下载

相关推荐

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Hibernate3 里调用存储过程

下面是Oracle 9i的存储过程示例: CREATE OR REPLACE FUNCTION selectAllEmployments RETURN SYS_REFCURSOR AS st_cursor SYS_REFCURSOR; BEGIN OPEN st_cursor FOR SELECT EMPLOYEE, EMPLOY...

jacklan1103的专栏 299

高校技术转移办公室人员在成果转化过程中如何快速提升技术推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Hibernate3.x调用存储过程

原文出处:http://tech.it168.com/j/d/2007-05-14/200705141007843.shtml说明:该文不得转载摘要:本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤,从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法.如果底层数据库(eg. Oracle、mysql、sqls...

ding_dq的博客 352

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

基于单片机的电动工程机械高压管理单元控制器设计.docx

基于单片机的电动工程机械高压管理单元控制器设计.docx

Hibernate操纵PostgreSQL数据库

Hibernate操纵PostgreSQL数据库 环境 java 12.0.1 Apache Maven 3.6.3 MySQL Server version: 5.7.18-20170830-log 20170531 hibernate-core-5.4.27.Final.jar PostgreSQL 12.4 IntelliJ IDEA 2020.2.3 (Ultimate Edition) Maven配置文件 <?xml version="1.0" encoding="UTF-8"?>

qq_44486439的博客 1888

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

Hibernate3.x调用存储过程大揭密(转)

【IT168 专稿】本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤,从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法。 如果底层数据库(eg. Oracle、mysql、sqlserver)等支持存储过程,可通过存储过程执行批量删除、更新等操作。本文以实例说明在hibernate3.x中如何调用存储过程。 说明:本例hibernate所用版本为3.0,mysql所用版本为5.0,所用数据库驱动为mysql

xiunai78的专栏 705

基于halcon的HSV颜色匹配实例

HSV颜色识别原图代码结果 原图 代码 dev_update_off () dev_close_window () *颜色数组 FuseColors := ['Orange','Red','Blue','Yellow','Green'] *画笔颜色数组 DisplayColors := ['coral','red','blue','goldenrod','forest green'] * HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 3

qq_39467811的博客 3544

如何处理MIGO取消物料凭证报错:“只是可能对有相同的价格控制进行倒记账(本月S,前月V)” & “仅在 QM 中修改物料质量检验库存”

记录一次处理MM模块的报错。这次连续处理了两个错误,“只是可能对有相同的价格控制进行倒记账(本月S,前月V)” & “仅在 QM 中修改物料质量检验库存”。把过程和操作步骤记录下一。方便日后回头查找。

IT小职员 6232

复习资料

我的博客电子书 httpClient与HtmlParser等技术札记 这是开发远程数据获取时学的新知识记录! 查看目录 1. java软件 1.1 HttpClient 1.2 Htmlparse解析HTML文档(例) 1.3 Log4J使用完全手册 1.5 htmlParser收集记录 1.6 HSSF接口学习记录 1.7 htmlParser收集记录(2) ...

技术交流 256

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

测试

xsSymbian CEO:招人五大要求,首先得会C++ 国际观点:Java会灭亡吗(Will Java Die?) 00年小本毕业月薪6K,现在25岁在国外做程序员月薪40K人民币 揭密征途赚钱模式:史玉柱在赚谁的钱 印度:中国软件这个亚洲对手落后3至5年 Silverlight:你需要知道的十件事情 8.29【国际热点】 程序员成为最稀缺的“日用品” 硅谷招聘流行搞

luckyso999的专栏 438

MQTT阿里云OTA 调试记录

2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。

qq_42585211的博客 1231

PINN疲劳寿命预测优化

本项目基于物理信息神经网络(PINN)构建材料疲劳寿命预测模型,通过融合Paris裂纹扩展方程与实验数据,实现裂纹扩展行为的精准预测。核心方法包括:1)将Paris方程作为物理约束嵌入神经网络训练;2)生成含噪声的模拟数据并进行归一化处理;3)采用PINN-GA联合优化框架,以裂纹扩展速率最小化为目标优化材料参数。该方案通过物理规律与数据驱动的结合,显著提升预测模型的泛化能力,为工程材料寿命评估提供新思路。

huanghm88的专栏 146

170本应该看的java书(转载)

Java 语言规格说明 用于Rails的RJS模板 理解AJAX:使用JavaScript创建丰富多采的Internet应用程序 Java移动媒体API Pro EJB 3: Java Persistence API (Pro) Pro Java EE 5性能管理和优化 精通EJB3.0(第4版) rich apps with java ajax AJAX.Creating.Web...

幸福着迈向国荣 272

实测!Gemini+ChatGPT赋能学术写作:我的论文写作SOP(附提示词)

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。为什么ChatGPT逻辑清晰却写不长?为什么Gemini能深入分析但废话连篇?这其实是两种模型架构的本质差异,GPT系列擅长指令跟随和语言精炼,而Gemini原生支持超长上下文,适合深度文本生成。两者在深度生成与精炼表达上形成了天然互补。我们可以将它们组合起来使用发挥他们各自的特长。

智能AI让学术科研更容易 521

解决Hibernate连接postgresql数据库慢的问题

博主最近写了一个大数据的项目,数据库采用的是greenplum,他是基于postgresql的,里面有几千张数据库表,每张表都有上亿的数据,在用Hibernat启动时连接postgresql的时候很慢,大概需要半小时的时间,这让博主怎么受的了,就 一步一步追踪代码,最后发现问题出在postgresql驱动的PgDatabaseMetaData类里面,他的源码是这样的:/* * Copyright

李熠专用博客_白帽子一枚,人称低危终结者。免费收徒,有意者私信!!! 5219

基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台

电动汽车的动力总成(Powertrain)是车辆的核心系统,包括动力电池、电机控制器、逆变器和驱动电机等关键部件。动力总成的控制策略直接影响车辆的动力性能、能耗效率和驾驶体验。为了验证和优化这些控制策略,基于MATLAB/Simulink的仿真平台成为一种高效且经济的解决方案。本项目旨在构建一个完整的基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台,涵盖控制策略建模、性能评估以及参数标定等功能模块,并通过仿真验证系统的有效性。

xiaoheshang_123的博客 177

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hibernate3 调用存储过程

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33717298的博客 134

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JPA中调用含有IN、OUT、INOUT参数的存储过程

上篇文章提到过在JPA中调用Mysql分页的存储过程,经过查找资料,发现JPA中有@NamedStoredProcedureQuery注解来专门处理JPA对存储过程的调用,并包含了对存储过程中IN、OUT、INOUT参数的处理。现整合了一个 SpringBoot + JPA + fastJSON 的Demo,实现了对Mysql存储过程的调用。用fastJSON 纯属为了将返回的分页数据封装成类...

CQHaveADream的博客 3784

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Pitfalls of converting to InnoDB
下一篇: 使用 Spring 框架调用 DB2 存储过程
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值