Hibernate讲义1文档格式.docx
《Hibernate讲义1文档格式.docx》由会员分享,可在线阅读,更多相关《Hibernate讲义1文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
④对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.-->
hibernate-configuration>
<
session-factory>
propertyname="
connection.username"
sa<
/property>
connection.url"
DatabaseName=pubs<
dialect"
org.hibernate.dialect.SQLServerDialect<
myeclipse.connection.profile"
mysqlserver<
connection.password"
123<
connection.driver_class"
com.microsoft.jdbc.sqlserver.SQLServerDriver<
<
mappingresource="
chap5/hibernate/UserInfo.hbm.xml"
/>
/session-factory>
/hibernate-configuration>
⑷编写相应的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-->
hibernate-mapping>
classname="
chap5.hibernate.UserInfo"
table="
t_login"
>
idname="
id"
type="
integer"
columnname="
/>
generatorclass="
native"
/generator>
/id>
username"
string"
name"
length="
50"
not-null="
true"
password"
/class>
/hibernate-mapping>
⑹编写测试类
创建一个新的Java类HibernateTest.java,向数据表t_login中插入一条记录,代码如下:
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.<
br>
*
*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("
Sessionsession=HibernateSessionFactory.getSession();
Transactiontx=session.beginTransaction();
session.save(user);
out.println("
保存用户成功啦!
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
doGet(request,response);
测试结果: