NetBeans IDE中整合struts2+hibernate

时间: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格式阅读原文

上一篇:浅谈计算机程序设计语言的课程改革 下一篇:基于3G的移动销售终端的设计及实现