Struts2和Hibernate整合.docx
《Struts2和Hibernate整合.docx》由会员分享,可在线阅读,更多相关《Struts2和Hibernate整合.docx(14页珍藏版)》请在冰豆网上搜索。
![Struts2和Hibernate整合.docx](https://file1.bdocx.com/fileroot1/2023-3/31/830d21e2-b760-49ca-b29a-e2cbb2d4cc6d/830d21e2-b760-49ca-b29a-e2cbb2d4cc6d1.gif)
Struts2和Hibernate整合
实验五Struts2和Hibernate3整合应用
一、目的和要求
本实验是为了让学生对持久化技术有一个初步了解,并熟悉在Eclipse+Hibernate的集成环境下,如何建立一个持久化技术的简单的应用。
通过本实验
1.掌握在企业Java应用开发中Struts的作用;
2.熟悉在Eclipse+MyEclipse环境中综合使用Hibernate和Struts的方法和步骤;
3.掌握Hibernate的核心思想。
4.掌握Struts和Hibernate整合思想。
二、实验内容
创建数据库test,在数据库中创建一张表users,包括id,username和password,通过hibernate建立与表users对应的类Users。
在Struts框架创建的index.jsp的表单中输入users信息,将此信息转换成一个对象,通过struts的action将对象存入数据库中。
三、实验原理简介
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘),持久化的主要应用是将内存中的数据存储在关系型的数据库中。
要在Hibernate中实现数据的持久化,就是要建立对象中的属性与数据库中的表的映射关系,具体实现是利用两个xml配置文件,在其中的一个hibernate.cfg.xml文件中指定了数据库的连接的相关参数和映射文件的名称,而另一个文件*.hbm.xml(在此例中为users.hbm.xml)定义了对象(Users.class)中的属性与数据库表(Users)中的字段的对应关系。
这样当对象中的方法(在此例中对象的方法定义在Users.java中)对对象中的某些属性进行操作的时候,属性在数据库中对应的字段也就相应的发生了改变。
四、实验环境
实验室环境。
五、实验步骤
1.创建Web工程,名为TestS2H。
2.按实验四的实验步骤配置好struts2环境(参照实验四),例如添加Struts2所需的包,并配置web.xml,struts.xml,struts.properties,messageResource_zh_CN.properties,创建包和类等都和实验四相同。
3.在SQLServer2000中创建数据库test,和表users。
SQL脚本如下:
CREATEDATABASEtest;
USEtest;
CREATETABLE[dbo].[users](
[id][int]IDENTITY(1,1)NOTNULL,
[username][varchar](20)COLLATEChinese_PRC_CI_ASNOTNULL,
[password][varchar](20)COLLATEChinese_PRC_CI_ASNULL
)ON[PRIMARY]
GO
建立好的表结构如图5-1。
图5-1users表结构
4.打开myeclipse的databaseexplore透视图,如图5-2。
图5-2打开数据库浏览器透视图
5.新建数据库连接,如图5-3。
jtds-1.2.jar包在C:
\java\jdbcforSQLServer目录下可以找到。
点击AddJARS,把该包包含进去即可。
注意,实验室环境的密码是111111。
图5-3新建数据库连接
6.连接test数据库,如图5-4。
图5-4连接数据库
将test数据库展开后,如图5-5。
图5-5数据库连接展开后
7.生成映射文件。
操作如图5-6。
图5-6生成映射文件
8.Hibernate映射引擎,操作如图5-7.。
图5-7HibernateReverseEngineering
点击下一步,IDGenerater项选择native。
点击下一步,Finished。
9.切换到MyEclipse窗口,操作如图5-8。
图5-8切换到MyEclipse窗口
10.添加Hibernate所需的包以及创建Hibernate工程。
操作方法如图5-9到图5-13。
图5-9添加Hibernate所需的包
(1)
图5-10添加Hibernate所需的包
(2)
图5-11添加Hibernate所需的包(3)
图5-12NewHibernateProject
(1)
图5-13NewHibernateProject
(2)
11.添加日志配置。
在src/目录下添加文件:
log4j.properties。
其具体配置如下:
log4j.rootLogger=INFO,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d[%t]%-5p%c-%m%n
#PrintonlymessagesoflevelWARNoraboveinthepackagecom.foo.
#.foo=WARN
#log4j.logger.au.gov.sa.health.oacis=DEBUG
#log4j.logger.org.apache.struts2=DEBUG
#log4j.logger.org.apache=INFO
#log4j.logger.org.hibernate=INFO
#log4j.logger.ca.uhn=INFO
###logHQLqueryparseractivity
#log4j.logger.org.hibernate.hql.ast.AST=debug
###logjusttheSQL
log4j.logger.org.hibernate.SQL=debug
###logJDBCbindparameters###
log4j.logger.org.hibernate.type=INFO
#log4j.logger.org.hibernate.type=debug
###logschemaexport/update###
log4j.logger.org.hibernate.tool.hbm2ddl=DEBUG
###logcacheactivity###
#log4j.logger.org.hibernate.cache=debug
###logtransactionactivity
#log4j.logger.org.hibernate.transaction=debug
###logJDBCresourceacquisition
#log4j.logger.org.hibernate.jdbc=debug
###enablethefollowinglineifyouwanttotrackdownconnection###
###leakageswhenusingDriverManagerConnectionProvider###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
12.工程目录结构,如图5-14。
图5-14工程目录结构
13.修改LoginAction.java,源码如下:
packagecom.jee;
importcom.dao.Users;
importcom.opensymphony.xwork2.ActionSupport;
importorg.hibernate.HibernateException;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
publicclassLoginActionextendsActionSupport
{
privatestaticfinallongserialVersionUID=1L;
privateStringusername;
privateStringpassword;
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
publicStringexecute()throwsException
{
try{
//实例化SessionFactory
SessionFactorysf=newConfiguration().configure().buildSessionFactory();
//实例化Session
Sessionsession=sf.openSession();
//开始事务
Transactiontx=session.beginTransaction();
//创建消息实例
Usersuser=newUsers();
user.setUsername(getUsername());
user.setPassword(getPassword());
//将实例数据保存到数据库
session.save(user);
mit();
session.close();
returnSUCCESS;
}catch(HibernateExceptione){
e.printStackTrace();
returnERROR;
}
}
}
14.创建表现层。
将index.jsp改为如下:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
textname="loginPage"/>
将用户名和密码保存到数据库test中。
formaction="login">
textfieldname="username"key="user"/>
passwordname="password"key="pass"/>
submitkey="save"/>
form>
同时在messageResource_zh_CN.properties里添加一条:
save=保存,这样就会成功显示中文。
welcome.jsp修改为:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
textname="succPage"/>
欢迎,
propertyvalue="username"/>
数据已成功保存到数据库test。
error.jsp修改为:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
textname="errorPage"/>
你输入的用户名:
propertyvalue="username"/>
数据保存到数据库失败。
textname="failTip"/>
15.部署工程,启动服务器,测试工程。
16.总结:
Struts2和Hibernate的整合主要是Struts的Action调用持久层的数据库封装的操作方法。
在本实验中我们只使用了save方法,其实还有很多的对数据库添加、修改、删除的基本操作方法,例如publicvoiddelete(UserspersistentInstance);
publicUsersfindById(java.lang.Integerid);
publicListfindByExample(Usersinstance);
publicListfindByProperty(StringpropertyName,Objectvalue);
publicListfindByUsername(Objectusername);
publicListfindByPassword(Objectpassword);
publicListfindAll();
publicUsersmerge(UsersdetachedInstance);
publicvoidattachDirty(Usersinstance);
publicvoidattachClean(Usersinstance);
或者使用HQL语言也可以像SQL语句一样执行。
以上的这些方法都会相应的转化为对应的SQL语句,并在数据库中执行,并将执行的结果返回。
Hibernate的一个显著特点是O/R映射机制,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。
具体知识请参考其他资料。