Hibernate讲义1.docx
- 文档编号:8674955
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:216.09KB
Hibernate讲义1.docx
《Hibernate讲义1.docx》由会员分享,可在线阅读,更多相关《Hibernate讲义1.docx(14页珍藏版)》请在冰豆网上搜索。
Hibernate讲义1
Hibernate讲义
(1)
--Hibernate入门
Hibernate是一种强大高效的持久层查询服务器,它对JDBC进行了轻量级的封装,并以面向对象的思维方式,解决数据库的操作问题。
在基于MVC设计模式的JavaWeb应用中,Hibrenate可以作为应用的数据访问层。
1.1.1持久层与ORM
数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其比存活时间比创建该对象的进程时间要长。
在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前的一样。
一般持久化的实现通过各种关系数据库来完成。
持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道。
持久层在数据存储器中负责存储或获取数据的一组类和组件,持久层必须包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。
对象-关系映射(Object/RelationMapping,ORM)是随着面向对象的软件发方法发展而产生的,是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
本质上就是将数据表映射为对象类,从一种形式转换到另外一种形式。
1.1.2Hibernate3简介
Hibernate是非常优秀、成熟的O/RMapping框架,它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
Hibernate作为持久层的一项实现技术,运用DAO(DataAccessObject)设计模式来实现对象和关系数据库之间的映射,对JDBC进行了轻量级的对象封装,在Java应用和关系数据库之间建立桥梁,Java程序员可以完全使用面向对象的编程思维来操作关系数据库。
Hibernate为Java程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。
Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象),作为持久层的主流框架,Hibernate不仅可以应用在桌面应用程序开发,也可以用在WEB应用程序的开发。
Hibernate具有以下的优点:
①Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和AppServer、EJB没有什么必然的联系。
Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。
从这个意义上来说,Hibernate和EJB不是一个范畴的东西,也不存在非此即彼的关系。
②Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没有任何关系,也不存在兼容性问题。
③Hibernate不能用来直接和EntityBean做对比,只有放在整个J2EE项目的框架中才能比较。
并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是EntityBean的替代者出现的。
④对JDBC的轻量级封闭,内存消耗少,运行效率高。
⑤开发效率高,Eclipse、JBuilder等主流JAVA集成开发环境对Hibernate有很好的支持,在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人。
Hibernate体系结构如图所示,从中可以看出,Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。
图5-1Hibernate的体系结构
在分层体系架构中,Hibernate负责应用程序与数据库之间的数据交换,起ORM中间件的作用,使得应用程序通过Hibernate的API就可以访问数据库。
在应用中使用Hibernate,首先必须进行Hibernate与数据库连接设置、连接池参数设置及ORM映射文件的创建,使用Hibernate的开发步骤如下:
●设计:
一般首先进行领域对象的设计。
因为在Hibernate中,我们的领域对象可以直接充当持久化类。
●映射:
定义Hibernate的映射文件,实现持久化类和数据库之间映射。
●应用:
使用Hibernate提供的API,实现具体的持久化业务。
1.1.3第一个Hibernate3程序
要进行Hibernate开发,首先要进行开发环境的配置,主要有JDK(Java程序、Java服务器运行的基础)、Tomcat(Web服务器)、DBMS(数据库管理系统,如MSSQLServer)、MyEclipse(集成开发工具)等,这些工具的安装与使用在前面章节已有介绍,下面来看一下开发一个Hibernate程序的基本过程。
创建项目
首先创建一个Java工程hibernate3,并在MSSQLServer的hibdb数据库中创建数据表tb_userInfo,代码如下:
CREATE TABLE t_userInfo(
idintnotnull,
namevarchar(50)notnull,
passwordvarchar(50)notnull,
primarykey(Id)
);
⑵创建对数据库的连接
在使用Hibernate进行开发之前,需要一个能够访问的DatabaseExplorer连接配置。
选择菜单Window->OpenPerspective->MyEclipseDatabaseExplorer,如图5-2所示。
图5-2打开DatabaseExplorer连接配置
在打开的窗口左侧单击右键,选择“New”,弹出如图5-3所示的对话框,在其中进行数据库连接驱动设置,各项的设置如表5-1所示:
表5-1连接配置
项目名
设置值
设置说明
Drivertemplate
MicrosoftSQLServer
根据所使用的数据库指定不同值
Drivername
mysqlserver
用户自己指定
ConnectionURL
jdbc:
microsoft:
sqlserver:
//localhost:
1433;
DatabaseName=hibdb
根据所连接的数据库进行设置,此处连接到数据库hibdb
Username
sa
连接数据库的用户名
Password
123
连接数据库的密码
DriverJARs
msbase.jar;mssqlserver.jar;msutil.jar
添加DBMS的驱动,不同的DBMS有自己的JAR包
Driverclassname
com.microsoft.jdbc.sqlserver.SQLServerDriver
由前面的配置自动生成
设置完成,单击“Finish”结束,即创建了一个名为“mysqlserver”的连接,如图5-3所示。
图5-3数据库连接设置
图5-4成功连接数据库
⑶添加HibernateCapabilites到项目中
接下来在已创建的项目hibernate3中添加MyEclipseHibernate功能,通过向导来完成。
右键单击项目hibernate3,在弹出菜单中选择MyEclipse->AddHibernateCapabilites…来启动向导,如图5-5所示。
图5-5添加Hibernate框架
选择所需的类库,设置完成后单击“Next”,弹出如图5-6所示的对话框,设置配置文件的路径及名称,选择默认值,单击“Next”,在弹出的对话框中进行数据库连接的设置。
选择DBDriver为“mysqlserver”,则系统会自动根据连接填充相应值,如图5-7所示。
图5-6设置Hibernate的配置文件
图5-7数据库连接的详细信息
单击“Next”,弹出如图5-8所示的对话框,进行SessionFactory的创建,设置SessionFactory的路径及名字,在src下创建一个新包“chap5.hibernate”,单击“Finish”按钮结束。
图5-8创建SessionFactory
设置完毕后,在项目hibernate3中添加了HibernateJAR包、配置文件hibernate.cfg.xml以及类HibernateSessionFactory.java。
Hibernate的配置文件可以是hibernate.properties或hibernate.cfg.xml(二者任选其一),由于hibernate.cfg.xml配置的便捷与完整性,使之成为Hibernate配置文件之首选。
生成的hibernate.cfg.xml配置文件代码如下:
xmlversion='1.0'encoding='UTF-8'?
>
DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"
--GeneratedbyMyEclipseHibernateTools.-->
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=pubs
⑷编写相应的Java类
编写一个简单的持久化类UserInfo.java,这个类中包括需要持久化的属性,如主键id、用户名name、密码password,属性相关的setter和getter方法。
在包chap5.hibernate下创建类UserInfo,代码如下:
packagechap5.hibernate;
publicclassUserInfo{
privateIntegerid;
privateStringname;
privateStringpassword;
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
⑸编写对象关系映射文件
Hibernate的映射文件是实体对象与数据库关系表之间相互转换的重要依据,一般,一个映射文件对应数据库中一个关系表,关系表之间的关联关系也在映射文件中进行配置。
在包chap5.hibernate下,创建文件UserInfo.hbm.xml文件,编写代码如下:
xmlversion="1.0"encoding="utf-8"?
>
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"
--
MappingfileautogeneratedbyMyEclipsePersistenceTools-->
⑹编写测试类
创建一个新的Java类HibernateTest.java,向数据表t_login中插入一条记录,代码如下:
packagechap5.hibernate;
importorg.hibernate.Session;
importorg.hibernate.Transaction;
publicclassHibernateTest{
publicstaticvoidmain(String[]args){
UserInfoui=newUserInfo();
ui.setUserName("zhang");
ui.setPassword("123");
Sessions=HibernateSessionFactory.getSession();
Transactiont=s.beginTransaction();
s.save(ui);
mit();
System.out.println("恭喜,第一个Hibernate程序运行成功,记录已插入数据表t_login中!
");
s.close();
}
}
若数据表中没有记录,运行程序后,可以发现在数据表中插入了一条新记录“1zhang123”,主键值“1”由系统自动生成。
入门测试实例二:
Servlet中访问Hibernate
设计步骤:
1.创建一个Web项目:
hibernate_test3
2.增加Hibernate特性
3.利用反向工程生成:
UserInfo.java、配置文件等如下图所示:
4.创建一个Servlet类:
HibernateServlet.java
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.my.UserInfo;
importcom.my.ccit.HibernateSessionFactory;
importorg.hibernate.*;
publicclassHibernateServletextendsHttpServlet{
/**
*ThedoGetmethodoftheservlet.
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
*
*@paramrequesttherequestsendbytheclienttotheserver
*@paramresponsetheresponsesendbytheservertotheclient
*@throwsServletExceptionifanerroroccurred
*@throwsIOExceptionifanerroroccurred
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=gb2312");
PrintWriterout=response.getWriter();
UserInfouser=newUserInfo();
user.setName("王小二");
user.setPassword("123");
Sessionsession=HibernateSessionFactory.getSession();
Transactiontx=session.beginTransaction();
session.save(user);
mit();
out.println("保存用户成功啦!
");
System.out.println("保存用户成功啦!
");
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
测试结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 讲义