hibernate3.0使用mysql存储过程.docx_第1页
hibernate3.0使用mysql存储过程.docx_第2页
hibernate3.0使用mysql存储过程.docx_第3页
hibernate3.0使用mysql存储过程.docx_第4页
hibernate3.0使用mysql存储过程.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:本文以详尽的实例展示了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;建表成功后,在该表中插入如下4条初始数据,对应的sql语句如下:INSERT INTO tbl_user (userid,name,blog) VALUES (ant, 蚂蚁, /qixiangnj);INSERT INTO tbl_user (userid,name,blog) VALUES (beansoft, bean, /beansoft);INSERT INTO tbl_user (userid,name,blog) VALUES (sterning, 似水流年, /sterning);INSERT INTO tbl_user (userid,name,blog) VALUES (tom, tom , /tom);二 建立存储过程为测试hibernate3.x中存储过程的调用,我们在user表中建立getUserList、createUser、updateUser和deleteUser这四个存储过程,在mysql中建立存储过程的语句如下:1. 获得用户信息列表的存储过程-getUserList DROP PROCEDURE IF EXISTS getUserList;CREATE PROCEDURE getUserList()begin select * fromtbl_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. 通过传入的参数更新用户信息的存储过程-updateUserDROP 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. 删除用户信息的存储过程-deleteUserDROP PROCEDURE IF EXISTS deleteUser;CREATE PROCEDURE deleteUser(IN useridValue int(11)begin delete from tbl_user where userid = useridValue;end;三 编程前准备工作1. 建立工程在进入代码编写前,建立新的java工程proc, 目录结构如下:proc -lib -bin -src -com -amigo -proc -model2. 引入所需包 将hibernate3.0的包以及其相关包放入编译路径中,另注意:还需将mysql的数据库驱动jar包mysql-connector-java-5.0.4-bin.jar放入编译路径中。四 编码与测试在准备工作完成后,进入编码与测试阶段,本例演示了在hibernate3.0中调用mysql的存储过程的方法。1、hibernate的配置文件在hibernate的配置文件中包含数据库的连接信息,以及加入OR mapping的xml格式的映射文件,该文件如下(部分内容略):jdbc:mysql:/localhost:3306/testrootrootcom.mysql.jdbc.Driverorg.hibernate.dialect.MySQLDialecttrue2、OR Mapping文件产生的OR Mapping文件有User.java以及其对应的hibernate映射文件User.hbm.xml。其中User.java的内容如下:c.model;/*/*用户信息对象*/publicclassUserimplementsjava.io.SerializableprivatestaticfinallongserialVersionUID=1L;/*/*用户id*/privateStringuserid;/*/*用户姓名*/privateStringname;/*/*用户blog*/privateStringblog;/省略get/set方法User.hbm.xml文件的内容如下:callgetUserList()在该文件中需注意中的这段代码,调用的存储过程在其中定义,并定义了调用存储过程后将记录组装成User对象,同时对记录的字段与对象的属性进行相关映射。3. 管理hibernate的session以及事务的类HibernateSessionFactory该类包括打开session等方法,主要用于管理hibernate的session和事务。该类的内容如下(部分内容略):c;importjava.io.ByteArrayOutputStream;importjava.io.OutputStreamWriter;importorg.hibernate.HibernateException;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;/*/*Hibernate相关控制*/publicclassHibernateSessionFactory/*/*Hibernate配置文件*/privatestaticStringCONFIG_FILE_LOCATION=/hibernate.cfg.xml;/*/*存储一个单独的session实例*/privatestaticfinalThreadLocalthreadLocal=newThreadLocal();/*/*Hibernate配置相关的一个实例*/privatestaticConfigurationconfiguration=null;/*/*HibernateSessionFactory的一个实例*/privatestaticSessionFactorysessionFactory;/*/*Hibernate的字符编码集*/privatestaticStringcharSet;/*/*若Hibernate未设置字符编码集时,采用的字符编码集*/privatestaticfinalStringencoding=(newOutputStreamWriter(newByteArrayOutputStream().getEncoding();/*/*默认构造函数*/publicHibernateSessionFactory()/*/*打开Hibernate的数据库连接*/publicstaticfinalsynchronizedvoidopen()if(sessionFactory!=null)return;trysessionFactory=getConfiguration().buildSessionFactory();charSet=configuration.getProperty(hibernate.connection.charSet);if(charSet=null)charSet=encoding;return;catch(Throwablethrowable)thrownewExceptionInInitializerError(throwable);/*/*配置Hibernate数据库,并将其打开*/privatestaticsynchronizedvoidconfigure()throwsHibernateExceptionif(sessionFactory=null)if(configuration=null)getConfiguration().configure(CONFIG_FILE_LOCATION);open();/*/*获得配置实例*/publicstaticsynchronizedfinalConfigurationgetConfiguration()if(configuration=null)configuration=newConfiguration();returnconfiguration;/*/*功能说明:获得SessionFactory*/publicstaticfinalSessionFactorygetSessionFactory()returnsessionFactory;/*/*功能说明:获得session*/publicstaticfinalSessiongetSession()throwsHibernateExceptionconfigure();Sessionsession=null;if(threadLocal.get()=null)session=getSessionFactory().openSession();threadLocal.set(session);elsetrysession=(Session)threadLocal.get();catch(Exceptionex)session=getSessionFactory().openSession();threadLocal.set(session);returnsession;/其余方法略4 hibernate调用存储过程的测试类本类是该例的核心类,在本类中,以实例清楚地说明了在hibernate中如何调用存储过程,例示了hibernate调用查询、更新、插入和删除这四类存储过程的方法,该类的内容如下:c;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.util.List;c.model.User;importorg.hibernate.Session;importorg.hibernate.Transaction;/*/*hibernate调用存储过程*authorAmigoXie()*since2007/04/30*/publicclassProcTest/*/*paramargs*/publicstaticvoidmain(Stringargs)throwsExceptionProcTestproc=newProcTest();Sessionsession=HibernateSessionFactory.getSession();proc.testProcQuery(session);proc.testProcUpdate(session);System.out.println(updatesuccessfully);proc.testProcInsert(session);System.out.println(insertsuccessfully);proc.testProcDelete(session);System.out.println(deletesuccessfully);session.close();/*/*测试实现查询的存储过程*throwsException*/privatevoidtestProcQuery(Sessionsession)throwsException/查询用户列表Listlist=session.getNamedQuery(getUserList).list();for(inti=0;ilist.size();i+)Useruser=(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();/*/*测试实现更新的存储过程*throwsException*/privatevoidtestProcUpdate(Sessionsession)throwsException/更新用户信息Transactiontx=session.beginTransaction();Connectioncon=session.connection();Stringprocedure=callupdateUser(?,?,?);CallableStatementcstmt=con.prepareCall(procedure);cstmt.setString(1,陈xx);cstmt.setString(2,/sterningChen);cstmt.setString(3,sterning);cstmt.executeUpdate();mit();/*/*测试实现插入的存储过程*throwsException*/privatevoidtestProcInsert(Sessionsession)throwsException/创建用户信息session.beginTransaction();PreparedStatementst=session.connection().prepareStatement(callcreateUser(?,?,?);st.setString(1,amigo);st.setString(2,阿蜜果);st.setString(3,/amigoxie);st.execute();session.getTransaction().commit();/*/*测试实现删除的存储过程*throwsException*/privatevoidtestProcDelete(Sessionsession)throwsException/删除用户信息session.beginTransaction();PreparedStatementst=session.connection().prepareStatement(calldeleteUser(?);st.setString(1,amigo);st.execute();sessio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论