时间:2022-07-24 07:34:05
摘要:该文采用netbeans+GlassFish+JDK6为开发环境搭建struts2+hibernate开发模式,其中先对struts+hibernate的整合策略进行简述,再在netbeans环境中,从由架构的底层开始,由下而上,逐一进行讲解,并配有详细的代码及图例。
关键词:netbeans; 框架; glassfish; struts2; hibernate
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)15-3593-04
The Concordance of Struts2 and Hibernate in the Netbeans IDE
YI Wei-huan
(Software Institute of Hunan Vocational College of Science and Technology,Changsha 410118,China)
Abstract: In this paper, we use netbeans+GlassFish+JDK6 to setup truts2+hibernat development environment. At first, we give a brief introduction of struts+hibernate integration strategy. Then, we introduce each level of the architecture from the bottom to up under the evironment of netbeans, with detailed codes and figures for understanding.
Key words: netbeans; frame; glassfish; struts2; hibernate
NetBeans IDE是一个屡获殊荣的集成开发环境,可以方便的在Windows,Mac,Linux和Solaris中运行。NetBeans包括开源的开发环境和应用平台,可以使开发人员利用Java平台能够快速创建Web、企业、桌面以及移动的应用程序。NetBeans项目由一个活跃的开发社区提供支持, NetBean开发环境提供了丰富的产品文档和培训资源以及大量的第三方插件。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Struts和Hibernate几乎已经成了JavaEE应用的常规配置。
1 系统概述
1.1 配置环境
NetBeans+GlassFish+SQL2005+JDK6
1.2 数据库:Bank
表如图1:Product。
1.3整体结构
如图2所示。
2 struts2+hibernate整合策略
2.1 思想
一个好的系统一般都采用多层设计,四层架构如图3所示。
1)表现层:负责与用户交互,并通过调用业务逻辑层代码实现判断等。
2)业务逻辑层:专注于实现业务逻辑功能,通过调用持久层操作数据库。
3)持久层:专注于持久化操作,不涉及业务逻辑。
4)数据库层:即使用的数据库。
2.2 实现
1)表现层:JSP/struts。
2)业务逻辑层:JavaBean。
3)持久层:DAO+hibernate。
4)数据库层:SQL2005。
2.3 开发方向
自底向上。
3 搭建框架
3.1 新建Java web项目
添加struts2+hibernate框架(注:netbeans6.8中自带的是struts1.3,而使用struts2可从网上下载插件并添加到netbeans环境中),并配置hibernate,且需另外添加方言。
Hibernate.xml配置如下:
com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://localhost:1433;databaseName=Bank
sa
123456
org.hibernate.dialect.SQLServerDialect
3.2 建立hibernate逆向工程配置文件hibernate.reveng.xml
通过逆向工程文件,可以将数据库中表自动生成相应的映射文件及实体类。
3.3 建立POJO类及相应的映射文件,并手工在hibernate.cfg.xml中注册
3.3.1 映射文件:Product.hbm.xml
3.3.2实体类
package com.product.entity;
public class Productimplements java.io.Serializable {
private String id;
private String name;
private Double price;
….
数据封装
……
}
3.3.3 在hibernate.hbm.xml中注册
3.4 建立hibernate工具类
packagecom.product.util;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
}}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void closeSession(Session session){
if(session!=null){
session.close();
}}}
4 持久化层设计:包括DAO接口+DAO实现类+DAO工厂类+hibernate
4.1 DAO接口
packagecom.product.dao;
public interface ProductDAO {//定义对数据库操作的方法
public void save(Product p);//Product为数据表对应的实体类
public void delete(String id);
public void update(Product p);
public List queryAll();
public Product queryByID(String id);
}
4.2 DAO实现类
packaegecom.product.dao.implement;
public class ProductDAOImpl implements ProductDAO{
public void save(Product p) {
Session session=HibernateUtil.getSessionFactory().openSession();//在每个方法中因关闭了session,故需在每个方法中定义各自的session
session.beginTransaction();//启动事务
session.save(p);//保存对象
session.getTransaction().commit();//提交事务
HibernateUtil.closeSession(session);
}……
其它实现方法略
……
}
4.3 DAO工厂类
packagecom.product.dao.factory;
public class DaoFactory {
public static ProductDAO getDaoInstance(){
return new ProductDAOImpl();
}}
5 业务逻辑组件设计
与持久化层相似,但其中有业务逻辑判断,包含业务逻辑组件接口+实现类+工厂类。
5.1 业务接口
package com.product.service;
public interface ProductService {
public void addProduct(Product p);
public void deleteProduct(String id);
public void updateProduct(Product p);
public List queryAllProduct();
public Product queryProductByID(String id);
}
5.2 业务实现类
packagecom.product.service.impl;
public class ProductServiceImpl implements ProductService{
ProductDAO dao=DaoFactory.getDaoInstance();//由持久层工厂类产生实例
public void addProduct(Product p) {
if(dao.queryByID(p.getId())==null){//首先进行业务判断
dao.save(p);
}else{
System.out.println("不能插入同样的id");
}}
……
其它实现方法略
……
}
5.3 业务工厂类
Packagecom.product.service.factory;
public class ProductServiceFactory {
public static ProductService getServiceInstance(){
return new ProductServiceImpl();//返回业务实现类的对象
}}
6 表现层:整合应用
6.1 查询所有产品
6.1.1 action:com.product.action.ShowAllAction.java
public class ShowAllAction extends ActionSupport{
@Override
public String execute(){
ProductService ps=ProductServiceFactory.getServiceInstance();//调用业务层工厂类,ps为业务层的实现类对象
List all=ps.queryAllProduct();
ServletActionContext.getRequest().setAttribute("all", all);//将查询结果保存在request范围中
return SUCCESS;
}}
6.1.2 JSP:showAll.jsp
编号 产品名 价格 操作
">删除
&name=&price=">更新
添加产品
6.1.3 配置struts.xml
//解决从页面传来的汉字乱码问题
showAll.jsp
运行:localhost:8000/mypro/showAll.action
7 总结
本论文是本人在课堂教学中的总结,通过上述从理论到实践的讲解,课堂上气氛活跃,取得了良好的教学效果,在此发表出来与各位读者共享,以达到抛砖引玉的作用。
参考文献:
[1] 校本教材:Java企业应用[M].3版.2010:134-167.
[2] 叶键毅.精通Java EE[M].2版.北京:人民邮电出版社,2009:27-99.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文