分享
 
 
 

利用MyEclipse开发Struts+Hibernate的应用(一)

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

转载麻烦署上俺的名字:小兵 个人主页:www.xiebing.com

本文主要使用MyEclipse来开发整合了Struts和Hibernate的应用,重点在于对二者MyEclipse提供支持的工具的使用,如果对于Struts和Hibernate还没有了解的朋友,建议先了解一些Struts和Hibernate的相关概念。

1、首先新建一个J2EE的Web Project,具体的设置如图所示:

点击,完成,完成新建项目。

2、在mydb项目上点击右键,选择MyEclipse选项,为该项目增加Struts的特性。

弹出如下窗口,具体配置,如图所示:

只需修改包的名称,本例中修改为:com.xiebing.struts ,其他保持默认即可。点击完成,MyEclipse就会自动将Struts应用所需要的jar包和自定义标签文件,以及struts的配置文件和资源文件拷贝或创建到相应的目录。

3、创建数据库

在MySQL的test的数据库中创建表:vipdata

DROP TABLE IF EXISTS vipdata;

CREATE TABLE vipdata (

vipId int(11) NOT NULL AUTO_INCREMENT,

vipName varchar(20) NOT NULL,

vipTitle varchar(20) NOT NULL,

PRIMARY KEY (vipId))

TYPE=MyISAM;

4、打开MyEclipse Database Explorer视图,创建一个数据库的连接:

新建一个数据库连接:

在新的数据库连接的配置窗口中,填写如下配置:

其中Driver的配置,通过 窗口-首选项 MyEclipse Database Explorer Drivers来配置,如下图所示:

点击Edit按钮,对该选项进行配置,配置细节如下,Extra Class Path 要选中一个MySQL的JDBC驱动:

在DB Browser的窗口中连接数据库,连接成功后如图所示:

5、重新切换到MyEclipse视图,在项目上点击右键选择MyEclipse选项,为应用增加Hibernate特性,如图所示:

在出现的配置窗口中,选中“Add Hibernate 2.1 libraries to project?”,然后设定存放Hibernate库文件的目录为: /WEB-INF/lib 目录,默认会选择创建一个新的Hibernate配置文件hibernate.cfg.xml。

点击下一步,进入下面的Hibernate数据库连接配置界面,在Connection Profile选项中直接选择在MyEclipse Database Explorer中配置的vipdata选项,然后就会自动生成其他的配置,可以选择“Copy JDBC Driver and add to classpath”,这样就会将JDBC驱动拷贝到WEB-INF/lib目录中。:

点击下一步,来创建Hibernate的SessionFactory类,这是一个简单的集中管理Hibernate会话的工厂类,填写类的全名称。

点击完成,然后MyEclipse就会将Hibernate相关的jar包拷贝到lib目录下,同时会生成Hibernate的配置文件:hibernate.cfg.xml,和SessionFactory类(改类在下面我会给出简单说明)。

现在要利用MyEclipse Database Explorer视图中的工具来生成,Hibernate的映射文件。切换到MyEclipse Database Explorer视图,在表vipdata上点击右键,选择Create Hibernate Mapping,如图所示:

弹出如下配置界面,配置生成的持久化类和映射文件。

点击

Browse,选择生成的类和映射文件的包:com.xiebing.hibernate

ID Generator选项,选择native。(还有很多其他的选项可选,根据应用的需要具体选择),

点击完成,这样会生成持久化类Vipdata和它的父类AbstractVipdata(生成父类,有利于日后应用的扩展,工具会自动生成详细的equals方法和hashCode方法)以及映射文件Vipdata.hbm.xml。同时会修改Hibernate的配置文件hibernate.cfg.xml,会增加一行:

<mapping resource="com/xiebing/hibernate/Vipdata.hbm.xml"/>

6、使用MyEclipse Struts Editor打开Struts的配置文件:struts-config.xml,并切换到design面板。

选择面板上的Add Jsp Page标签,单击,我们来新建一个jsp页面。然后到design面板上单击:

出现如下所示的界面,具体设置如图所示:

修改AddVipData.jsp的代码如下:

<%@ page language="java" contentType="text/html; charset=gbk" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %>

<%@ page import="com.xiebing.hibernate.VipService" %>

<%@ page import="java.util.List" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html:html locale="true">

<head>

<title>Vip Example</title>

<html:base/>

</head>

<body bgcolor="white">

<h3>Vip Example</h3>

<html:errors/>

<%

/*

* 这里将产生一个Vipdata的集合

*/

List vipList = VipService.getInstance().getVipdataList();

request.setAttribute("vipdatas", vipList);

%>

<p>列出 <code>Vipdata</code>表中的所有信息.</p>

<table border=1>

<logic:iterate id="element" name="vipdatas" scope="request" type="com.xiebing.hibernate.Vipdata" >

<tr>

<td><bean:write name="element" property="vipName" /></td>

<td><bean:write name="element" property="vipTitle" /></td>

</tr>

</logic:iterate>

</table>

<p>新增加一条数据:</p>

<html:form action="AddVipdata.do" method="post">

<table border=1>

<tr><td>name:</td><td><html:text property="vipName" /></tr>

<tr><td>description:</td><td><html:text property="vipTitle" /></td></tr>

</table><

br/>

<html:submit/>

</html:form>

</body>

</html:html>阿飞发送多幅发送给扶绥多给

此时加粗的部分会提示有问题(先不管他),因为还没有创建类:com.xiebing.hibernate.VipService

7、接下来就创建类:com.xiebing.hibernate.VipService。其主要就是完成我们的增删改查等具体业务逻辑的处理。

代码如下:

VipService.java

package com.xiebing.hibernate;

import java.util.List;

import net.sf.hibernate.HibernateException;

import net.sf.hibernate.ObjectNotFoundException;

import net.sf.hibernate.Query;

import net.sf.hibernate.Session;

import com.xiebing.hibernate.Vipdata;

/**

* 通过Hibernate来操作数据库的业务逻辑类

*

*/

public class VipService

{

private static VipService instance = null;

private VipService()

{

}

/**

* 得到VipService的单态实例

* @return <code>VipService</code> singleton.

*/

public static synchronized VipService getInstance()

{

if (instance == null)

{

instance = new VipService();

}

return instance;

}

/**

* 通过id来获得Vipdata

* @param id

* @return Vipdata

*/

public Vipdata getVipdata(Long id)

{

Session session = null;

try

{

//通过SessionFactory创建session实例

session = SessionFactory.currentSession();

//调用load方法加载数据

return (Vipdata) session.load(Vipdata.class, id);

}

catch (ObjectNotFoundException onfe)

{

return null;

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

finally

{

if (session != null)

{

try

{

//关闭session

session.close();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

}

}

}

/**

* 更新记录

*

* @param vipdata

*/

public void updateVipdata(Vipdata vipdata)

{

Session session = null;

try

{

session = SessionFactory.currentSession();

//执行update操作

session.update(vipdata);

session.flush();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

finally

{

if (session != null)

{

try

{

session.close();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

}

}

}

/**

* 得到所有的记录

*

* @return 记录的列表

*/

public List getVipdataList()

{

Session session = null;

try

{

session = SessionFactory.currentSession();

//创建一条HQL查询

Query query =

session.createQuery(

"select Vipdata from com.xiebing.hibernate.Vipdata Vipdata order by Vipdata.vipname");

return query.list();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

finally

{

if (session != null)

{

try

{

session.close();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

}

}

}

/**

* 添加一条新的记录

* @param data

*/

public void addVipdata(Vipdata data)

{

Session session = null;

try

{

session = SessionFactory.currentSession();

session.save(data);

session.flush();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

finally

{

if (session != null)

{

try

{

session.close();

}

catch (HibernateException e)

{

System.err.println("Hibernate Exception" + e.getMessage());

throw new RuntimeException(e);

}

}

}

}

}

8、顺便简单说一下工具自动生成的SessionFactory的代码,SessionFactory.java

package com.xiebing.hibernate;

import net.sf.hibernate.HibernateException;

import net.sf.hibernate.Session;

import net.sf.hibernate.cfg.Configuration;

public class SessionFactory {

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

/** 保持session对象为单态

* 初始化一个ThreadLocal对象

* */

private static final ThreadLocal threadLocal = new ThreadLocal();

private static final Configuration cfg = new Configuration();

private static net.sf.hibernate.SessionFactory sessionFactory;

/**

* Returns the ThreadLocal Session instance.

*

* @return Session

* @throws HibernateException

*/

public static Session currentSession() throws HibernateException {

//多线程情况下共享数据库链接是不安全的。ThreadLocal保证了每个线程都有自己的s(数据库连接)

Session session = (Session) threadLocal.get();

if (session == null) {

if (sessionFactory == null) {

try {

cfg.configure(CONFIG_FILE_LOCATION);

sessionFactory = cfg.buildSessionFactory();

}

catch (Exception e) {

System.err.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}

//创建一个数据库连接实例

session = sessionFactory.openSession();

//保存该数据库连接s到ThreadLocal中

threadLocal.set(session);

}

return session;

}

/**

* Close the single hibernate session instance.

*

* @throws HibernateException

*/

public static void closeSession() throws HibernateException {

Session session = (Session) threadLocal.get();

threadLocal.set(null);

if (session != null) {

session.close();

}

}

/**

* Default constructor.

*/

private SessionFactory() {

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有