基于Struts+Hibernate+Spring的Web 应用开发Word格式.docx
《基于Struts+Hibernate+Spring的Web 应用开发Word格式.docx》由会员分享,可在线阅读,更多相关《基于Struts+Hibernate+Spring的Web 应用开发Word格式.docx(60页珍藏版)》请在冰豆网上搜索。
![基于Struts+Hibernate+Spring的Web 应用开发Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/22/18c66951-87f1-4acc-abec-859f657b0a77/18c66951-87f1-4acc-abec-859f657b0a771.gif)
Tomcat6.0
任务一Hibernate
1.1Hibernate基础知识
1.Hibernate简介
Hibernate是一种Java语言下的对象-关系映射解决方案,它是一种自由、开源的轻量级框架,用于将面向对象的对象模型映射到传统的关系数据库中。
Hibernate对JDBC进行了轻量级的对象封装,不仅提供从Java数据类型到SQL数据类型的ORM映射,还提供数据查询和数据缓存功能,大幅度减少开发时人工使用SQL和JDBC处理数据的时间,使得Java程序员可以完全使用面向对象的编程思维通过HibernataAPI操作关系数据库。
Hibernate还拥有完全面向对象的查询语言HQL。
因此,Hibernate将开发者从传统的数据库编程中解脱出来,为数据库外加了一层面向对象的外衣,这样开发人员不需要再编写繁琐的SQL语句,Java程序中所有对数据的操作都会交给Hibernate处理和完成。
Hibernate为轻量级的ORM开源框架,因此它兼具了轻量级框架技术和对象-关系映射技术的特点:
Hibernate是开放源代码的,允许开发人员在需要的时候研究源代码、改写源代码,并且具有详细的参考文档,便于学习和掌握。
简单灵活且易于扩展,Hibernate不像EJB那样需要很多的类和配置属性,它只需一个运行阶段的配置文件以及为每个要持久化的应用对象指定映射文件。
另外Hibernate框架无侵入性,应用程序不需要依赖该框架,不需要继承Hibernate中的类和其中特定的语义,只需创建Java对象和相关的映射文件,将持久化对象的工作交给Hibernate。
对容器的不依赖性。
Hibernate不同于EJB,Hibernate不需要特殊的容器,Hibernate可用于任何环境,从独立应用到企业应用服务器。
Hibernate框架封装了数据库持久层的大多数技术细节,如数据库连接、事务管理、SQL语句生成等。
持久层中大多数的编码都是些重复的工作,使用Hibernate框架可以将开发人员从大量重复的JDBC编码和SQL语句中解脱出来。
面向对象的设计。
Hibernate支持所有的面向对象特性,包括继承、多态、自定义对象类型和集合。
Hibernate还提供了面向对象的HQL语言,Hibernate框架自动将HQL语句编译成数据库特定的SQL语句,并缓存起来以便复用。
Hibernate中的映射机制将对象映射到了数据库表中,从而使得开发人员可以以面向对象的思想来操作关系数据库,而无需考虑关系数据库中的细节。
性能优秀。
Hibernate实现了很多持久层的机制,如数据缓存机制、对多种连接池的支持、批处理的优化机制以及延迟加载机制。
这些机制的实现对上层完全屏蔽,以可配置化的方式提供,开发人员无需关心其实现细节,只需添加配置项就可使用。
正确地使用这些机制可以大幅度提高系统的性能。
Hibernate可以与多种Web服务器、应用服务器良好集成,并且支持几乎所有流行的数据库服务器,并具有很好的移植性,只需要简单的修改配置文件,即可实现数据库之间的切换。
2.对象-关系映射
对象-关系映射是Hibernate框架中的理论基础。
对象-关系映射即将数据库中的关系表映射为持久化类,从而将对数据库表中的操作转换为对持久化类及其属性的操作,使得数据的操作和管理分离。
第一章介绍过对象模型和关系模型之间存在阻抗不匹配。
因此在持久层的设计时,需要将对象的状态映射到关系数据库的数据上,以便提供透明的持久化,对象-关系映射在这里充当的就是这两个模型之间的桥梁作用,来解决不匹配。
通常,对象模型中的持久化类会对应关系数据库中的表,而每个类的实例化对应着表中的一行,即一条记录,如表。
对象-关系映射
面向对象概念
面向关系概念
类
表
对象
表的行(记录)
属性
表的列(字段)
从表2-1中看到,类直接映射成数据库中的表,其中类的属性对应成数据库的列,而类的实例化对象对应到数据库中的记录。
这样以后程序开发过程中需要操作数据表时,只需操作相应类的实例,而不必关心所操作的数据表。
归纳起来,映射的基本原则如下:
Ø
对象模型中的类映射成数据库中的表
对象模型中的对象标识符映射成表中的主键。
对象模型中的类属性映射成数据库表中的列(字段)。
对象模型中的属性类型映射成表中的域。
对象模型中的类继承和关联关系映射成数据库中的多个相关表。
应当注意,由于对象模型和关系模型的原则不一样,因此对象模型中的类和关系模型中的表并不一定是一一对应的。
同样,类的属性和表的字段也不一定是一一对应的。
在Hibernate中,使用元数据来描述对象-关系映射,在XML映射文件定义实体类和数据表之间的关系,将对象自动持久化到关系数据库中
采用XML文件配置对象-关系具有以下优点:
软件人员可以独立设计成域模型,不必强迫遵守任何规范。
数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。
对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只要修改XML配置文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。
XML文件定义了对象-关系映射
Hibernate中使用的持久化类为普通的JavaBean(即POJO),并为映射的属性提供两种方法访问:
通过相应的get和set方法访问。
使用Java反射机制访问。
使用JavaBean同时也简化了Hibernate通过Java反射机制来获得持久化类访问方法的过程。
持久化类的访问
1.2Hibernate应用开发流程
本节中介绍如何使用MyEclipse创建一个Hibernate应用
开发步骤:
创建工程
切换到MyEclipseDatabaseExplorer透视图
在MyEclipseDatabaseExplorer透视图中完成数据连接并测试数据连接的正确性
为工程增加Hibernate支持
生成HibernateSessionFactory类
创建数据表USERINFO(Stringuserid,Stringpassword,Stringusername,Stringemail,
Stringaddress,Stringtelephone)
根据数据表USERINFO生成POJO和映射文件
测试HQL
编写测试文件,测试使用Hibernate生成类
1.先创建一个Java应用hibernate1
2.切换到MyEclipseDatabaseExplorer透视图
点击
图标
点击MyEclipseDatabaseExplorer打开透视图如下图
在这个透视图中我们可以完成连接数据库的操作
3.连接数据库
点击图标
打开如下的菜单
点击“New”弹出下面对话框,添加一个新的连接。
选择Drivertemplate为MicrosoftSQLServer2005
Drivername为:
sqlserver2005(这里的命名是任意的)
ConnectionURL:
jdbc:
sqlserver:
//localhost:
1433;
databaseName=test(这里的test是数据库名称,修改为你自己的数据库名)
Username和Password分别是数据库的用户名和密码
单击“AddJARs”添加数据库驱动程序(这里需要我们事先下载好相应的数据库驱动程序)
注:
点击“TestDriver”可以测试连接
点击“Next”
选择将要展示的数据表,可以选择展示所以得用户表或者部分表。
点击“Finish”完成数据库连接配置,结果如下:
显示连接sqlserver2005创建成功
在图标sqlserver2005上点击右键:
单击“Openconnection”
弹出对话框
填写密码后单击“OK”连接
连接成功显示:
可以查看连接数据库的表。
在该视图中可以执行SQL语句
如下图所示打开执行SQL语句窗口
SQLEditor窗口中可以执行SQL语句
将显示SQL语句的结果
前面的步骤中已经完成一个JavaProject工程的创建,设置了dababaseexplorer透视图的参数,并利用该视图完成数据库操作的测试。
下面完成Hibernate工程的创建。
切换至java透视图
4.为工程增加Hibernate支持
打开如下图所示的设置页面,选择Hibernte3.1,其它的采用默认选项。
使用默认选项
下一步后出现下图设置页面,为Hibernate指定数据库连接属性,DBDriver中选择databaseexplorer里已经设置的连接sqlserver2005。
设置用户名和密码。
按Next进入下一步如下图:
生成HibernateSessionFactory,这个类不是Hibernate范围的类,而是MyEclipse为了帮助我们使用Hibernate而提供的一个工具类。
帮助我们获取到Hibernate中的session对象。
设置HibernateSessionFactory类的创建位置,在Javapackage的右边点击“New”创建一个新的包com.njcit.hibernate如下图所示。
单击“Finish”后回到设置页面如下图:
JavaComplianceLevel采用默认选项Java5,点击Finish完成操作。
工程添加Hibernate支持后的文档结构如下图:
5、创建POLO:
(针对表通过逆向工程产生POLO类和映射文件)
切换到databaseexplorer视图
打开Connectedtosqlserver2005->
test->
dbo->
TABLE,在TABLE中找到表USERINFO,在USERINFO中单击右键选择“HibernateReverseEngineering”(Hibernate逆向工程)如下图:
打开POLO类创建页面如下:
选择Javasrcfolder(Java源文件存放位置)和Javapackage
勾选“CreatePOJO<
>
DBTablemappinginformation”自动生成映射文件
勾选“JavaDataObject(POJO<
DBTable)”自动生成POJO类
如图,其它采用默认选项。
单击”Next”进入下一步如图
此处采用默认设置
单击“Next”进入下一步。
采用默认配置,单击Finish完成。
回到Javaperspective(Java视图),展开工程视图看到刚才的创建过程添加了Userinfo.java和Userinfo.hbm.xml,并修改了hibernate.cfg.xml配置文件。
可以分别查看已经生成的POJO类:
Userinfo.java
映射文件:
Userinfo.hbm.xml
修改过的配置文件:
hibernate.cfg.xml
6.测试HQL语言
输入HQL语言示例:
fromUserinfo
有多少个记录则返回多少个对象
选中某个对象,在右边的properties中可以看到这个对象中具体属性的值
7.为了测试生成的POJO类,创建测试类UserTest
创建一个普通类
测试类UserTest.java代码为:
packagecom.njcit.hibernate;
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.Session;
importorg.hibernate.Transaction;
importcom.njcit.hibernate.HibernateSessionFactory;
publicclassHibernateTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Sessionsession=HibernateSessionFactory.getSession();
Transactiontrans=session.beginTransaction();
Userinfou=newUserinfo();
u.setUserid("
1111"
);
u.setUsername("
444"
u.setPassword("
222333"
u.setAddress("
111"
u.setEmail("
u.setTelephone("
222"
trans.begin();
System.out.println("
userid:
"
+u.getUserid());
username:
+u.getUsername());
session.save(u);
mit();
//===========================================
Userinfou2=(Userinfo)session.get(Userinfo.class,"
1006"
u2.setUsername("
newname"
session.saveOrUpdate(u2);
//==============================================
Userinfou3=(Userinfo)session.get(Userinfo.class,"
1001"
session.delete(u3);
Queryq=session.createQuery("
fromUserinfo"
Listlist=q.list();
for(Objecto:
list){
System.out.println(((Userinfo)o).getUserid()+((Userinfo)o).getUsername());
}
session.close();
}
}
测试类中分别完成数据插入,数据修改,数据删除,数据查询。
运行结果为:
调试小记:
✓创建数据连接时必须给出正确的URL,用户名,密码,并且正确引入数据库驱动包。
✓为工程引入hibernate支持时,引入版本3.1(3.2的配置中有稍许区别)
✓在databaseexplorer视图中创建POJO类时(该文档14页)采用默认设置,如果设置第14页为native则需要额外的配置,否则报错。
(设置为native则数据插入时报错)
✓在databaseexplorer视图中创建POJO类时,注意选择的表如果满足某种关联条件则生成的相应配置文件会引用其他的类,而这些类本身并不存在,运行时即报错。
这时需要修改配置文件*.hbm.xml
任务二Spring
1.1Spring基础知识
1.2Spring应用开发流程
开发Spring应用的步骤:
新建JavaProject
增加Spring支持
设置数据源对象
设置HibernateSessionFactory
设置SpringBean
编写测试文件,测试使用Spring的效果
Spring中对象是被管理的,可以通过上下文获得这个对象(不需要用NEW方法获得)。
1.创建Java项目spring1
2.为项目增加Spring支持
选择Spring类库的版本,使用默认选项。
选择Spring的配置文件的位置和名称,使用默认选项。
生产的目录结构为:
上面生成的applicationContext.xml就是Spring的配置文件
3.设置数据源对象
可以通过可视化方法为Spring应用设置数据源对象
在弹出的对话框中填写数据源名称,选择驱动,这里选择前面已经配置好的sqlserver2005.
点击”Finish”完成数据源配置
可以看到报错,这是因为缺少类库没有引入。
为工程引入类库
选择MyEclipseLibraries
选择Spring2.5PersistenceJDBCLibraries后报错消失。
数据源配置后将修改配置文件applicationContext.xml如上图。
4.设置HibernateSessionFactory
该对象可以对在Spring中使用Hibernate提供支持
在配置文件applicationContext.xml代码区域点击右键
选择Spring->
NewDataSource
设置HibernateSessionFactory后配置文件为:
设置LocalSessionFactoryBean可以很方便的获得Hibernate中的session对象,从而完成Spring和Hibernate的组合开发。
5.设置SpringBean
创建一个普通的类Message
在Spring配置文件中对这个类进行配置
填写BeanId,选择Beanclass为com.njcit.spring.Message
点击Finish完成
配置文件中增加:
<
beanid="
msgBean"
class="
com.njcit.spring.Message"
abstract="
false"
lazy-init="
default"
autowire="
dependency-check="
<
/bean>
/beans>
则Spring可以管理这个类了
在配置文件中按右键选择ShowInSpringExplorer.
可以用图形化方式展示配置的类
6、编写测试文件,测试使用Spring的效果
原来的测试类的调用如下
Messagemsg=newMessage();
msg.setContent("
System.out.println(msg.getContent());
现在的Spring调用为:
ClassPathXmlApplicationContextctx=newClassPathXmlApplicationContext("
/applicationContext.xml"
Messagemsg=(Message)ctx.getBean("
//Messagemsg=newMessage();
任务三Hibernate+Spring
1.创建工程Spring2
2.为工程增加Hibernate和Sping支持
不需要创建SessionFactory,这个类的功能后面由Spring的相关类来完成。
3.为项目增加Spirng项目开发的支持
选择Spring2.5CorePersistencesCoreLibraries.
最后一个步骤配置了sessionFactory
sessionFactory"
org.springframework.orm.hibernate3.LocalSessionFactoryBean"
propertyname="
configLocation"
value="
file:
src/hibernate.cfg.xml"
/property>
这个sessionFactory用来生成Hibernate的session对象
4.生成POJO类和配置文件
选择JavaDataAccessObject(DAO)(Hibernate3only)
选择SpringDAO(不要勾选GenerateprecisefindBymethods)
下一步:
使用默认选择
完成后目录结构如下:
生成POJO类Userinfo.java
SpringDAO类UserinfoDAO.java
POJO类配置文件Userinfo.hbm.xml
5.编写测试文件
packagecom.njci