当前位置:文档之家› Struts2和Hibernate整合

Struts2和Hibernate整合

Struts2和Hibernate整合
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.在SQL Server 2000中创建数据库test,和表users。SQL脚本如下:

CREATE DATABASE test;

USE test;

CREATE TABLE [dbo].[users] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[username] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

建立好的表结构如图5-1。

图5-1 users表结构

4.打开myeclipse的database explore透视图,如图5-2。

图5-2 打开数据库浏览器透视图

5.新建数据库连接,如图5-3。jtds-1.2.jar包在C:\java\ jdbc for SQL Server目录下可

以找到。点击Add JARS,把该包包含进去即可。注意,实验室环境的密码是111111。

图5-3 新建数据库连接6.连接test数据库,如图5-4。

将test数据库展开后,如图5-5。

图5-5 数据库连接展开后7.生成映射文件。操作如图5-6。

图5-6 生成映射文件8.Hibernate映射引擎,操作如图5-7.。

图5-7Hibernate Reverse Engineering 点击下一步,ID Generater项选择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-12 New Hibernate Project(1)

图5-13 New Hibernate Project(2)

11.添加日志配置。在src/目录下添加文件:log4j.properties。

其具体配置如下:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

https://www.doczj.com/doc/9214769842.html,yout=org.apache.log4j.PatternLayout

https://www.doczj.com/doc/9214769842.html,yout.ConversionPattern=%d [%t] %-5p %c - %m%n

# Print only messages of level WARN or above in the package com.foo. # https://www.doczj.com/doc/9214769842.html,.foo=WARN

#https://www.doczj.com/doc/9214769842.html,.sa.health.oacis=DEBUG

#https://www.doczj.com/doc/9214769842.html,.apache.struts2=DEBUG

#https://www.doczj.com/doc/9214769842.html,.apache=INFO

#https://www.doczj.com/doc/9214769842.html,.hibernate=INFO

#log4j.logger.ca.uhn=INFO

### log HQL query parser activity

#https://www.doczj.com/doc/9214769842.html,.hibernate.hql.ast.AST=debug

### log just the SQL

https://www.doczj.com/doc/9214769842.html,.hibernate.SQL=debug

### log JDBC bind parameters ###

https://www.doczj.com/doc/9214769842.html,.hibernate.type=INFO

#https://www.doczj.com/doc/9214769842.html,.hibernate.type=debug

### log schema export/update ###

https://www.doczj.com/doc/9214769842.html,.hibernate.tool.hbm2ddl=DEBUG

### log cache activity ###

#https://www.doczj.com/doc/9214769842.html,.hibernate.cache=debug

### log transaction activity

#https://www.doczj.com/doc/9214769842.html,.hibernate.transaction=debug

### log JDBC resource acquisition

#https://www.doczj.com/doc/9214769842.html,.hibernate.jdbc=debug

### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ###

#https://www.doczj.com/doc/9214769842.html,.hibernate.connection.DriverManagerConnectionProvide r=trac e

12.工程目录结构,如图5-14。

图5-14 工程目录结构

13.修改LoginAction.java,源码如下:

package com.jee;

import https://www.doczj.com/doc/9214769842.html,ers;

import com.opensymphony.xwork2.ActionSupport;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

public class LoginAction extends ActionSupport

{

private static final long serialVersionUID = 1L;

private String username;

private String password;

public String getUsername()

{

return username;

}

public void setUsername(String username)

{

https://www.doczj.com/doc/9214769842.html,ername = username;

}

public String getPassword()

{

return password;

}

public void setPassword(String password)

{

this.password = password;

}

public String execute() throws Exception

{

t ry{

//实例化SessionFactory

SessionFactory sf = new

Configuration().configure().buildSessionFactory();

//实例化Session

Session session = sf.openSession();

//开始事务

Transaction tx = session.beginTransaction();

//创建消息实例

Users user = new Users();

user.setUsername(getUsername());

user.setPassword(getPassword());

//将实例数据保存到数据库

session.save(user);

https://www.doczj.com/doc/9214769842.html,mit();

session.close();

return SUCCESS;

}catch (HibernateException e) {

e.printStackTrace();

return ERROR;

}

}

}

14.创建表现层。

将index.jsp改为如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<s:text name="loginPage"/>

将用户名和密码保存到数据库test中。


同时在messageResource_zh_CN.properties里添加一条: save=保存,这样就会成功显示中文。

welcome.jsp修改为:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<s:text name="succPage" /></p><p>

欢迎,


数据已成功保存到数据库test。

error.jsp修改为:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<s:text name="errorPage"/>

你输入的用户名:

数据保存到数据库失败。

15.部署工程,启动服务器,测试工程。

16.总结:

Struts2和Hibernate的整合主要是Struts的Action调用持久层的数据库封装的操作方法。在本实验中我们只使用了save方法,其实还有很多的对数据库添加、修改、删除的基本操作方法,例如public void delete(Users persistentInstance) ;

public Users findById(https://www.doczj.com/doc/9214769842.html,ng.Integer id) ;

public List findByExample(Users instance) ;

public List findByProperty(String propertyName, Object value) ;

public List findByUsername(Object username) ;

public List findByPassword(Object password) ;

public List findAll() ;

public Users merge(Users detachedInstance) ;

public void attachDirty(Users instance) ;

public void attachClean(Users instance) ;

或者使用HQL语言也可以像SQL语句一样执行。以上的这些方法都会相应的转化为对应的SQL语句,并在数据库中执行,并将执行的结果返回。

Hibernate的一个显著特点是O/R映射机制,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。具体知识请参考其他资料。

相关主题
文本预览
相关文档 最新文档