当前位置:文档之家› Eclipse从入门到精通(第二版)_ch37

Eclipse从入门到精通(第二版)_ch37

Eclipse从入门到精通(第二版)_ch37
Eclipse从入门到精通(第二版)_ch37

第37章 在Eclipse中使用Hibernate

本章将把Hibernate应用到myweb项目中,对数据库层的代码进行改造,同时还会介绍一些Hibernate工具的使用。

37.1 概述

37.1.1 持久化框架产生的背景和现状

什么叫持久化?数据在内存中,关机后就会丢失。而如果把数据保存到后台的数据库中,就能达到“持久”保存数据的目的。而持久化框架的目的就是为了帮助用户更好地使用数据库。

在Java数据库项目中,由于数据库是关系型而非面向对象的。很多时候,用面向对象方法完成了前期的设计和分析,到了数据库层编程时就会变得很别扭,其中最痛苦的就是写面向过程的SQL语句。

J2EE开发主要由JSP、Servlet、JavaBean和EJB 4部分组成。其中EJB是J2EE中一个比较重要的部分,它提供了企业级开发所需的分布式支持。但现实中的大部分项目都是单服务器的轻量级项目,一般都不会涉及分布式的开发环境,这时用EJB就像大炮打蚊子,蚊子没打到,房子却被打破个洞。EJB的笨重和复杂一直让开发者很不满,其中EJB中Entity Bean受到的批评最多,现实项目中鲜有使用Entity Bean的成功范例。

开发者急切地需要一种符合Java编程习惯的、适合轻量级开发的、易于使用的数据库持久化解决方案。在这个背景下就产生了轻量级的数据库持久化技术,其中最主要的就是Hibernate、JDO。

Hibernate是一个民间开源项目,有点像一个草莽英雄,但Hibernate从实用出发的设计思路,使得它脱颖而出成为最流行的持久化技术。Hibernate的作者Gavin King也一举成名,现已成为EJB 3.0专家组的成员,并且在EJB 3.0的Entity Bean部分,将采用和Hibernate 类似的设计方案。因此,Hibernate是开发者学习和使用持久化技术的一个比较好的选择,即使以后EJB 3.0一统天下,所学的Hibernate知识也不会浪费。

JDO 2.0是经JCP(Java规范管理委员会,由SUN、IBM、Oracle等共同参与)承认的一个正式规范,所以也受到了开发者很大的关注。估计未来3年内,持久化技术将以EJB 3.0、Hibernate和JDO 2.0为主,成三足鼎立之势。

第37章 在Eclipse 中使用Hibernate

·507·

37.1.2 Hibernate 简介

Hibernate 把开发者从数据库编程中隔离开来,它在数据库外裹了一层面向对象的外衣,Java 程序中所有进出数据库的操作都交给Hibernate 来处理,它会自动生成SQL 语句操作数据库。

有了Hibernate 后,程序员不再要写繁琐的SQL 语句,也不再要把实体对象一个个字段拆开又组装。说通俗一点,Hibernate 就像一位卖苦力的民工,脏活累活它全包了。

图37.1是Hibernate 的示意图。Hibernate 提供了一个和SQL 类似的HQL 语句,但结合Hibernate 后功能更强大,而且Hibernate 能够根据实体对象的状态来自动对数据库进行更新和插入,很智能化。

图37.1 Hibernate 的示意图

HQL 语句操作数据库其实也是要转化成标准的SQL 语句的,Hibernate 根据用户所编写的XML 映射文件来实现HQL 到SQL 的自动转化。XML 映射文件是Hibernate 中最关键的配置文件,它定义了实体类和数据表之间的关系,架起了两者间的桥梁,掌握XML 映射文件的编写是掌握Hibernate 的关键。

Struts 提供视图和控制层的支持,Hibernate 提供数据层的支持,两者是一个很不错的开发组合。Struts 只能用于Web 开发,而Hibernate 还可用于Application (包括Eclipse 插件)的开发。

37.1.3 本章说明

网上有Hibernate 的中文帮助文档(以后简称为Hibernate 文档),由国内的Hibernate 粉丝们翻译。此

Hibernate 文档内容权威而全面,加上翻译得也很不错,所以它是学习Hibernate 的必看文档。读者可以用Google 搜索关键字“hibernate 3.2 中文”找到这份文档。不足之处是:由于内容较多,主线不够突出,而且缺乏一个较为系统的实例。

Hibernate 的使用很灵活,但有一些用法是常用的、主要的,有一些则是生僻的、很少用的。Hibernate 应该掌握的重点内容是:Session 概念、XML 映射文件的配置、HQL 的语法。本章用一个实例做主线来贯穿这些Hibernate 的核心知识,读者可以顺着这条主线并结合Hibernate 文档来学习。

Eclipse 从入门到精通(第2版)

·508· 本章的数据库表和数据模型来自于第4篇的实例代码。

37.2 Hibernate 的下载和安装

37.2.1 下载

具体步骤如下:

(1)如图37.2所示,访问Hibernate 官方网站https://www.doczj.com/doc/1311491188.html, ,单击左边菜单的Download 超链接,在下载页面中下载Hibernate Core 和Hibernate Tools 。前者是Hibernate

的核心软件包,后者是一个用于辅助Hibernate 开发的Eclipse 插件。

图37.2 Hibernate 的下载页

(2)直正的下载页面会转到著名开源社区https://www.doczj.com/doc/1311491188.html, ,如图37.3所示。选择下载ZIP

格式压缩包hibernate-3.2.2.ga.zip ,解压后的目标结构如图37.4所示。

图37.3 下载文件选择 图37.4 Hibernate 解压后的目标结构

主要目录及文件解释:

hibernate3.jar 文件是Hibernate 的核心jar 包。

lib 目录中有一些Hibernate 运行需要依赖的第三方jar 包,安装时也要用到。

src 目录中是Hibernate (hibernate3.jar )的源文件。

第37章在Eclipse中使用Hibernate ·509·

etc目录中有一些可以参考的例子文件。

doc目录中包含Hibernate文档。

37.2.2 安装

1.复制jar包

将解压目录中的hibernate3.jar和lib目录下的jar包,全部复制到项目的Web-INF/lib目录,如果提示有同名文件(commons-logging-1.0.4.jar),覆不覆盖则都一样。其他说明如下: 其实并不需要复制lib目录下的所有jar包,本文只是为了安装上的方便。如果在正式发布程序时,希望只包括真正用到的包,则可以参考解压目录lib中的

_README.txt,里面有详细描述。或者参考Hibernate文档,里面也有部分描述。

注意不要将这些jar包复制到%TOMCAT_HOME%/common/lib目录下,那是Tomcat全局库所在目录,有可能引起包冲突。

检查一下lib目录中是否有重复包(不同版本),如有,则只保留一个最新版的包,否则很可能会引起类冲突。因此要把antlr-2.7.2.jar删除,保留antlr-2.7.6.jar。

2.创建log4j.properties

Hibernate用log4j包来做日志输出,这就要求项目中创建一个log4j的配置文件log4j.properties,否则有些运行日志就无法看到(不会影响程序运行),另外Eclipse控制台视图会输出如下两条警告信息。

log4j:WARN No appenders could be found for logger (org.apache.catalina.startup.TldConfig).

log4j:WARN Please initialize the log4j system properly.

如果读者熟悉log4j,可以自己创建log4j.properties,定义自己想要的日志配置。如果不熟悉log4j,可以直接将解压目录etc下的log4j.properties,复制到项目的“Java Resourcess:src”下。注意,由于J2EE透视图拒绝直接复制文件到“Java Resourcess:src”下,所以可以转到Java透视图再复制。

37.3 一个简单的Hibernate实例(V005)

37.3.1 创建Hibernate配置文件:hibernate.cfg.xml

在“Java Resourcess:src”下创建一个hibernate.cfg.xml文件如下。

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"https://www.doczj.com/doc/1311491188.html,/hibernate-configuration-3.0.dtd">

Eclipse 从入门到精通(第2版)

·510·

java:comp/env/jdbc/mysql

org.hibernate.dialect.MySQL5Dialect

true

thread

配置说明:

connection.datasource 设定所用的连接池。

dialect 告诉Hibernate 使用哪种SQL 数据库方言(dialect )。不同数据库的SQL 语

法都有一些差异,Hibernate 会根据设置的方言来适应这些差异。想知道其他数据的方言名称,可以利用Eclipse 的代码提示功能,在Java 程序中输入“org.hibernate.dialect.”然后按“Alt+/”快捷键。

show_sql 设定在控制台是否显示Hibernate 生成的SQL 语句,开发期间设为true ,

便于调试。

model.hbm.xml 是一个XML 映射文件,这个文件创建在model 目录下(内容将在

以后给出)。注意,这里用的是相对路径,cn 字串前面是没有“/”的。

hibernate.cfg.xml 还有一种hibernate.properties 的写法,在Hibernate 的解压目录etc

可找到它的例子。两种写法选一种即可,本文选前一种。

某些属性对Hibernate 的性能影响很大,比如batch_size 项设置成0和30,性能相

差会有4倍以上。属性会有一个默认值,但如果所开发的项目需要作性能优化,则可根据实际情况来重新设置。如果想了解

hibernate.cfg.xml 中更多的属性设置,可以参考Hibernate 文档的“表3.3 Hibernate 配置属性”,那里有属性的说明和建议值,本文不再复述。

37.3.2 创建XML 映射文件:model.hbm.xml

Hibernate 之所以能够智能地判断实体类和数据表之间的对应关系,就是因为有XML 映射文件。本小节先在https://www.doczj.com/doc/1311491188.html,.chengang.sms.model 包下创建一个名为model.hbm.xml 的XML 映射文件,其内容如下。

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"https://www.doczj.com/doc/1311491188.html,/hibernate-mapping-3.0.dtd">

第37章 在Eclipse 中使用Hibernate

·511·

配置说明:

model.hbm.xml 可以任意命名及放置于其他目录下,当然hibernate.cfg.xml 文件也

要做相应修改。笔者建议将它和它所对应的实体类放在一个包下,并用包名做文件名。

项定义了实体类和数据表之间的关系:name 是实体类(用类全名),table

是对应的数据表(表名不分大小写)。可以省略掉table 属性,这时默认表名和实体类同名。在model.hbm.xml 文件中可以设置多个项,笔者建议将一个包中的所有实体类都集中在一个*.hbm.xml 文件中。

项定义了主键id 字段所用的键值生成方法,identity 是一种MSSQL 、DB2、

MySQL 通用的主键值生成方法(Oracle 不能用identity ,可换成sequence )。要了解更多内容,可以查阅Hibernate 文档。

子项定义了实体类和表字段的关联。本例只设置了定义类字段的name

属性,还有一个column 属性是定义数据库表字段名的,本例没有设置。Hibernate 正是通过这里的设置建立起实体类和数据库表之间的字段对应关系。本例没有设置column ,则Hibernate 会默认为它和name 属性同名。假如,想将Grade 实体类的name 字段对应于数据库表的grade_name 字段,并将表字段的长度定义成16、不允许空值,则可以按照如下设置:

体现Hibernate 的友好性:它可以设置得很详细,也可以很简洁,当设

置简洁时,Hibernate 会采用默认值。要了解更多关于设置的内容,可以参阅Hibernate 文档。

37.3.3 创建HibernateUtil 类

HibernateUtil 类用于得到一个SessionFactory ,而SessionFactory 可以得到Session 。Session 是Hibernate 中最重要和使用最频繁的一个对象,实体对象都是通过它来和数据库交互。这个Session 和JSP 的Session 不同,但是有一点类似于JDBC

的Connection ,即Session 比Connection 包含的内容更多,功能范围更广。在Hibernate 的编程中将不会再使用Connection ,而是通过Session 来和数据库交互。

HibernateUtil 类的内容如下:

Eclipse 从入门到精通(第2版)

·512· package https://www.doczj.com/doc/1311491188.html,.chengang.sms.db;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {

try {

// 实例化一个SessionFactory 对象

sessionFactory = new Configuration().configure().buildSessionFactory();

} catch (Throwable ex) {

System.err.println("Initial SessionFactory creation failed." + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

程序说明:

HibernateUtil 可以任意取名。它是一个静态方法类,即类中的方法都是静态方法。 SessionFactory 是一个静态变量,它由static {…}静态代码块来初始化一个实例。

注意,static{…}代码块比较特殊,它既不是方法也不是变量。生成一个SessionFactory 对象很耗费时间和资源,所以在这里整个Web 系统共用一个SessionFactory 。而生成一个Session 对象的代价很小,在编程中千万不要把Session 写成单例模式来进行实例共享,对Session 的使用原则是用完就关闭,而且要尽量早关闭。

对于旧版本的Hibernate ,此类还有将Session 保存/剥离到当前线程中的两个方法。但现在已经不需要了,因为这里在新版本的

hibernate.cfg.xml 中用current_session _context_class 属性打开了Hibernate 的Session 自动管理机制。

37.3.4 创建GradeManager 类

GradeManager 类似于DbOperate ,它主要提供数据库操作方法。在这里编写了向Grade 表插入一条记录的方法,以及取出Grade 表中id 值大于2的所有记录的方法。代码如下:

package https://www.doczj.com/doc/1311491188.html,.chengang.sms.db;

public class GradeManager {

public void insertGrade() throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Grade grade = new Grade();// 生成一个年级对象

grade.setName("高四");

session.save(grade); // 将这个对象保存到数据库

session.getTransaction().commit();

第37章 在Eclipse 中使用Hibernate

·513· }

public List getGrades() throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

// 创建一个条件查询语句

String hql = "from Grade as g where g.id > :id";

Query query = session.createQuery(hql); // 创建查询对象

query.setInteger("id", 2); // 设置查询参数

List result = query.list(); // 从数据库取出数据,并自动封装到List 集合中

//也可以三句合为一句:session.createQuery(hql).setInteger("id", 2).list();

session.getTransaction().commit();// 提交

return result;// 返回数据集

}

public void close(){

HibernateUtil.getSessionFactory().close();

}

}

程序说明:

在Session 中,每个数据库操作都是在一个事务(Transaction )中进行的,这样可

以隔离开不同的操作。Hibernate 的事务是JDBC 事务的更高层次的抽象,它提供了更好的灵活性和适应性。 无论session.getTransaction().commit()

提交,或session.getTransaction().rollback()回

滚都会自动关闭session 。

以前都是将实体对象的字段一个个拆散并组合成SQL 语句,或者从数据库取出数

据后将字段值一个个封装到实体对象。现在用了Hibernate ,就再也不必这么处理数据了,这是Hibernate 有魅力的一面。

getGrades 方法中用到的hql 字串不是JDBC 的SQL 语句,而是Hibernate 自有的

HQL 语句。关于HQL 的更多内容,可查阅Hibernate 文档。

37.3.5 创建hibernateTest.jsp

hibernateTest.jsp 使用GradeManager 类来获得数据,并将数据显示在页面上。代码如下: <%@ page contentType="text/html; charset=utf8"%>

<%@ page import="https://www.doczj.com/doc/1311491188.html,.chengang.sms.db.GradeManager"%>

<%@ page import="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.Grade"%>

<%

GradeManager mgr = new GradeManager();

//插入一个年级对象

mgr.insertGrade();

//取出所有年级对象,并显示在页面上

Eclipse 从入门到精通(第2版)

·514· for (Grade g : mgr.getGrades())

out.print(g.getId() + " " + g.getName() + "
");

mgr.close();

%>

37.3.6 总结及实践建议

以上5

步完成了一个简单的Hibernate 实例,用浏览器运行hibernateTest.jsp 的效果如 图37.5所示。

图37.5 hibernateTest.jsp 的运行效果

本节用从底层到高层的次序来完成了一个实例的讲解,它虽然简单,但也反映了一个典型Hibernate 程序的编写框架:

HibernateUtil 一经完成之后即可系统通用,以后很少改动。

XML 映射文件是项目前期要做的最重要的工作,在项目开发后期就很少会改动它。

对初学者来说,编写XML 映射文件也是难点所在。

GradeManager 是数据库操作类,这相当于以前的DbOperate 类的功能。但它不再

直接操作数据库,而是通过Hibernate 去访问,所以在GradeManager 类中看不到涉及JDBC 的代码。

最后,就是位于最高层的JSP 文件hibernateTest.jsp ,这个文件主要使用

GradeManager 类来操作数据库。

实践建议:

Lomboz 支持XML 映射文件的热修改,当XML 映射文件改动之后,Lomboz 会将

它重新装入。不过这可能需要一两秒钟时间,具体时间要视读者所用电脑性能 而定。

在Java 编程中要时刻注意区分大小写,这是编程中出错较多的原因。

37.4 继续深入使用Hibernate (V006)

在Hibernate 中最主要的就是写XML 映射文件和HQL 查询语句。HQL 和SQL 相似,有过SQL 经验的人可以很轻松地掌握HQL ,所以Hibernate 的难点集中在

XML 映射文件的编写上。为了让读者从实例中迅速掌握Hibernate 的核心知识,本节将用Hibernate 的知识来继续改写原有的用户登录程序。

第37章在Eclipse中使用Hibernate ·515·37.4.1 修改XML映射文件

在本步将把年级、班级、课程和用户4个实体类和表的映射关系设置清楚,这其中涉及多对一关系、一对多关系、继承式实体类(用户类)等知识,关于用户类的设计方案及代码,可参阅26.3节。

给出XML映射文件model.hbm.xml的完整内容如下:

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"https://www.doczj.com/doc/1311491188.html,/hibernate-mapping-3.0.dtd">

name="id">

class="identity"/>

name="id">

class="identity"/>

class="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.Grade"

name="grade"

column="grade_id" update="false" insert="false" />

name="id">

class="identity"/>

name="id">

class="identity"/>

type="character"/>

column="type"

name="password"/>

·516·

Eclipse从入门到精通(第2版)

name="name"/>

name="latestOnline"/>

name="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.Student" discriminator-value="B">

name="schoolclass"

class="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.SchoolClass" column="schoolclass_id"/>

name="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.Teacher" discriminator-value="A">

column="iuser_id"/>

class="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.Course"

column="course_id"/>

代码说明:

(1)初学者在设置XML映射文件时常常被一对多、多对一等关系搞得很迷糊,感觉这些关系的设置很难捉摸。这里给出一个重要的口诀,即“以实体类的字段为依据来配置

XML映射文件:类的字段有则映射有、类的字段无则映射无”。

(2)年级实体类的设置中,把原来的table="grade"去掉了,没有table属性,则默认为表和类同名。这也是当初创建表时为什么用类名做表名的原因:一是名称相同方便记忆,二是配置XML映射文件时也方便简洁。

(3)班级实体类的第三个字段“grade”是年级实体类的类型,一个年级有多个班级,

所以班级对年级是多对一的关系。设置多对一关系的字段不再用项,而是用

项来设定,如下:

update="false" insert="false" />

其中name属性是班级实体类中的字段名grade;class属性是grade字段的类型(全类

名);column属性对应班级数据表的字段名。

update、insert两项属性的默认值是true,本处设为false。如果设成true,则Hibernate 在更新班级实体对象所对应的数据库数据的同时,也会自动更新年级表数据。但一般都不会通过班级实体对象来自动更新年级表,因为年级表基本是不会动的,这种更新不仅没什么用处,反而影响效率。注意,设为false之后,并不是指不能更新年级表,而是指不通过班级实体来自动更新年级表。

有些读者在这里也许会问:“班级对年级是多对一关系,反过来,年级对班级就是一

对多关系。为什么只在设置班级实体时,指定了关系,而在设置年级实体时,

没有反过来指定关系呢?”

第37章 在Eclipse 中使用Hibernate

·517·

年级对班级是一对多关系,没错。但正如前面所说的口诀,年级实体类中并没有指向班级的字段,所以在XML 映射中就不设置它的一对多关系。假设在年级实体类中增加一个字段“private List schoolClasses ”,用来存放年级下的所有班级,这时就应该用来设置这种一对多关系了,否则班级记录就不会自动通过Hibernate 被抓取到schoolClasses 字段中。

(4)用户类是典型的继承式实体类,它的XML 映射设置如下:

项定义接口IUser 时多加了一个discriminator-value="I"。

是指增加一个名为type 的character

型字段,这个字段用来区分不同的子类。

在设置IUser 时定义好共同字段。

项定义各子类的独有字段,其中discriminator-value 属性要求各不相

同,此值将存入表的type 字段中。

关于这种继承式实体设置的更多内容,可参阅Hibernate 文档的“第9章 继承映射”,此文档中共有3种方案,本文选择的是“所有用户类合用一个表”的第一种方案。在本书第26章设计用户表时,也提到了这3种方案,大家可以参照阅读,以便加深理解。

(5)学生类有一个班级字段,学生和班级是多对一关系,所以也用了来设置此字段。

(6)老师类的设置,代码如下:

老师类和课程是典型的多对多关系:一个老师可以教多门课程,一门课程也可以

由多名老师来教。

因为老师类中的课程字段被定义成一个Set 集合,所以用项来定义,除此之

外还有等。

name="courses"对应于老师类字段courses 。

多对多需要一个新表(仅两字段)来保存两者之间的关联,table="iuser_course"就

是这个新表的表名。

inverse="true",设置反转。因为多对多有两端,当两端同时都做了修改时,Hibernate

需要根据inverse 项的设置来判断应该依据哪一端来做更新操作。如果两端都同时设为inverse="true",或同时省略inverse ,极可能导致更新冲突,所以一般是任选一端(且仅一端)来设置inverse="true"。

lazy="true"(默认false ),设置延迟(也称懒加载)。

延迟是

Hibernate 中非常重要的概念,主要在设置多对多、一对多关系中使用。比如,要显示一个仅有老师名称的列表,如果没有设置课程字段延迟获取,那么Hibernate 会将老师对应的课程记录一并从数据库取出,这样就有点浪费了;如果设置了延迟,那么Hibernate 会在真正用到课程记录时,才会去数据库中取,这样

·518·

Eclipse从入门到精通(第2版)

就显得智能一些。

但延迟有缺点:①它要求在使用完延迟型数据(如课程数据)之前,Session 不能关闭。②如果一个页面肯定要显示所有课程记录,这时不延迟一次取完,要

比延迟分批取的效率高得多。

所以使用延迟要平衡利弊,根据实际情况作出选择。以本例来说明,如果老师对应的课程记录特别多,也就是说一次性取完相应课程记录的代价很大,那么

应该选择延迟。但本例中,课程表极小(对于中学来说,也就10门课程左右),

每个老师对应的课程数很少(一个老师一般只教一门课程,除非是一人全包的乡

村小学老师),这时完全可以不用延迟。本例使用延迟仅仅是为了演示。

如果已经设置了延迟,但在某些特殊情况下,又需要提前关闭Session,这时就要提前把所有延迟加载数据一起取出。实现代码如下:

Hibernate.initialize(user.getCourses()); //强行加载延迟字段的数据

session.close(); //关闭session

Set set=user.getCourses();//在session关闭之后依然可以取得延迟数据

37.4.2 数据库操作类的实现

Hibernate的一个优点就是抽象于数据库,能够适应多数据库,所以过去数据层的设计也就没有必要存在了。把MysqlOperate、OracleOperate、SqlServerOperate、AbstractDbOperate、ConnectManager和SmsFactory 6个类都删除掉,还有SMS类中的无用常量也可以删除掉,仅留CURRENT_USER常量。然后将DbOperate由接口类改成普通类,其具体代码如下:

package https://www.doczj.com/doc/1311491188.html,.chengang.sms.db;

import java.util.Collections;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.IUser;

public class DbOperate {

根据用户名得到用户对象,如返回null则表示此用户不存在

//

public IUser getUser(String userId) throws RuntimeException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

IUser user = null;

try {

session.beginTransaction();

getUser(session,

userId);

=

user

session.getTransaction().commit();

} catch (Exception e) {

session.getTransaction().rollback();

RuntimeException(e);

new

throw

}

user;

return

}

第37章 在Eclipse 中使用Hibernate

·519·

public IUser getUser(Session session, String userId) {

Query q=session.createQuery("from "+IUser.class.getName()+ " where userId=:userId"); q.setParameter("userId", userId);

List list = q.list();

if (list.isEmpty())

return null;

else

return (IUser) list.get(0);

}

// 根据分页信息对象QueryInfo 得到应用的用户记录

// 要求QueryInfo 中已有currentPage 和pageSize 的数据

public List getUsers(QueryInfo qi) throws RuntimeException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

List list = null;

try {

session.beginTransaction();

list = getUsers(session, qi);

session.getTransaction().commit();

} catch (Exception e) {

session.getTransaction().rollback();

throw new RuntimeException(e);

}

return list;

}

public List getUsers(Session session, QueryInfo qi) {

// 得到总记录数

String hql = "select count(*) from " + IUser.class.getName();

qi.rsCount = ((Long) session.createQuery(hql).iterate().next()).intValue();

if (qi.rsCount == 0)// 等于0表示没有记录

return Collections.emptyList();

// 算出总页数

if (qi.rsCount % qi.pageSize == 0)

qi.pageCount = qi.rsCount / qi.pageSize;

else

qi.pageCount = (qi.rsCount / qi.pageSize) + 1;

// 算出起始位置= (当前页号-1)*每页记录数

int start = (qi.currentPage - 1) * qi.pageSize;

Query q = session.createQuery("from " + IUser.class.getName());

q.setFirstResult(start);

q.setMaxResults(qi.pageSize);

return (List)q.list();

}

}

·520·

Eclipse从入门到精通(第2版)

程序说明:

因为用户的老师类的课程字段采用了延迟,在前面已经讨论过,在获取延迟字段的数据之前不能关闭Session,所以取得用户的方法分成了两种:带Session参数的

和不带的。如果不会用到课程数据,就用不带Session的方法,方便一些。

在第二种方法中的IUser.class.getName()得到的是IUser的全类名“https://www.doczj.com/doc/1311491188.html,.chengang.

sms.model.IUser”,在HQL查询中,不用在查询之前加“select *”字串,而且表

名是用类全名来代替,这也体现了Hibernate面向对象的风格。

第三种方法是分页式取数据的方法,q.setFirstResult(start)是设置起始记录位置,q.setMaxResults(qi.pageSize)是设置本次要取的记录数。

在这里不仅捕获了Exception异常,并且在处理完异常后,再次将该异常包装成RuntimeException异常抛出。这是一种较标准的写法,是为了在类外程序中使用该

方法时,能够再次捕获异常,并作一些处理。如果要做得更完善,则可以专门继

承RuntimeException创建一个子异常类给DbOperate类用。

37.4.3 修改使用DbOperate类的程序

1.LogonAction类

此类代码基本不变,仅将原来取数据的两行代码

DbOperate db = SmsFactory.getDbOperate();

IUser user = db.getUser(userId);

更改为:

IUser user=new DbOperate().getUser(userId);

2.对显示用户列表userList.jsp文件修改示意如下(主要改动用粗体字标示)

<%@ page contentType="text/html; charset=utf8"%>

<%@ page import="https://www.doczj.com/doc/1311491188.html,.chengang.sms.model.*"%>

<%@ page import="https://www.doczj.com/doc/1311491188.html,.chengang.sms.db.*"%>

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

<%@ page import="org.hibernate.Session"%>

<%@ include file="../checkLogon.jsp"%>

用户列表

<%

QueryInfo qi=new QueryInfo();

qi.currentPage=1; //显示第一页

qi.pageSize=100; //每页100条记录

Session hsession = HibernateUtil.getSessionFactory().getCurrentSession();

hsession.beginTransaction();

第37章 在Eclipse 中使用Hibernate

·521·try{

List list = new DbOperate().getUsers(hsession,qi);

for (IUser user:list) {%>

<%

}

hsession.getTransaction().commit();

} catch (Exception e) {

hsession.getTransaction().rollback();

throw new RuntimeException(e);

}

%>

ID用户名密码姓名班级课程最后登录时间
<%=user.getId()%><%=user.getUserId()%><%=user.getPassword()%><%=user.getName()%>

<%if (user instanceof Student) {

SchoolClass

s = ((Student) user).getSchoolclass();

if (s != null)

out.print(s.getName());

}%>

<%if (user instanceof Teacher) {

Set set = ((Teacher) user).getCourses();

StringBuilder sb=new StringBuilder();

for (Iterator it = set.iterator(); it.hasNext();) {

Course course = (Course) it.next();

sb.append(course.getName());

if (it.hasNext())

sb.append(", ");

}

out.print(sb.toString());

}%>

<%=user.getLatestOnline()%>
程序说明:

在文件头增加了一个<%@ page import 来引用hibernate 包。

将Session 对象取名hsession 是为了避免和JSP 的默认对象Session 产生同名冲突。 hsession 必须要在取数据循环结束后才能关闭,因为老师类的课程字段用的是延迟

获取数据的方式。

Eclipse 从入门到精通(第2版)

·522· 37.5 实现用户的修改、删除功能(V007)

37.5.1 界面效果及功能说明

本节将同时需要Struts 和Hibernate 的知识,实例完成后的用户列表页面如图37.6所示。 单击“删除”超链接后,不提问,直接从数据库中删除记录,并再次返回用户列

表页面。

单击图37.6中的“修改”超链接后,打开如图37.7所示的页面。

单击图37.7中的“修改”按钮后,再次返回用户列表页面,此时页面显示新值。

图37.6 用户列表页面 图37.7 修改页面 37.5.2 在DbOperate 类增加方法

在DbOperate 类分别加入删除数据、插入更新数据的方法,每种方法都提供带Session 参数和不带Session 参数的两种。saveOrUpdate 同时具有插入和更新的功能,从这一点也可以体现Hibernate 的高度智能化,的确大大简化了操作数据表的工作。除了本例通过一个查询HQL 来删除,还有一种常用的传入实体类的删除方法:“session.delete(Object obj)”,Hibernate 会根据实体类型去相应的表中将记录删除。

加入到DbOperate 类的代码如下: // 用HQL

语法来删除数据,参数hql 是一个查询字符串

public void delete(String hql) throws RuntimeException {

Session session = HibernateUtil.getSessionFactory().openSession();

try {

session.beginTransaction();

delete(session, hql);

session.getTransaction().commit();

System.err.println("try "+session.isOpen()+"_"+session.isConnected());

} catch (Exception e) {

session.getTransaction().rollback();

System.err.println("Exception "+session.isOpen()+"_"+session.isConnected()); throw new RuntimeException(e);

}finally{

session.close();

System.err.println("finally "+session.isOpen()+"_"+session.isConnected());

第37章 在Eclipse 中使用Hibernate

·523· }

}

public void delete(Session session, String hql) {

session.createQuery(hql).executeUpdate();

}

// 插入或更新实体对象所对应的记录

public void saveOrUpdate(Object obj) throws RuntimeException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

try {

session.beginTransaction();

saveOrUpdate(session, obj);

session.getTransaction().commit();

} catch (Exception e) { session.getTransaction().rollback();

throw new RuntimeException(e);

}

}

public void saveOrUpdate(Session session, Object obj) {

session.saveOrUpdate(obj);

} 37.5.3 在用户列表userList.jsp 文件增加两个超链接

在原有的userList.jsp 的每条记录后面加入“修改”、“删除”超链接,代码如下: 修改

>删除

(1)以用户chen 为例,给出相应的IE 地址显示如下:

修改的

IE 地址显示:

http://localhost:8080/myweb/user/userAction.do?method=showUser&userId=chen

删除的IE 地址显示:

http://localhost:8080/myweb/user/userAction.do?method=removeUser&id=1

(2)在这里用的UserAction 稍后创建,它继承自Struts 的DispatchAction 类,并有3种方法removeUser 、showUser 和modifyUser 分别对应于删除、显示和修改。

(3)要修改用户,首先得把它的值显示出来,所以method 参数值为showUser 。修改使用userId 参数(用户名),删除使用id 参数(自动递增主键)。当然,也可以改为通过userId 来删除记录。

(4)特别强调:

超链接的HREF 属性和表单标签(

Eclipse 从入门到精通(第2版)

·524· 表单action 定位用/user/action.do ,而超链接HREF 定位用/myweb/user/action.do 或action.do 。这是比较容易忽略的一点。

method 参数的值必须是UserAction 中的一个方法名。

userId 、id 两个参数必须是UserAction 对应的UserForm 类中的字段。

37.5.4 在Struts 配置文件struts-config.xml 中增加一个action 定义

将下面的XML 块,加入到之间。

name="userForm" scope="request" validate="true"

input="/user/userList.jsp" parameter="method">

代码说明:

项的path 属性定义了UserAction 。

parameter 属性是DispatchAction 型Action 所必需的。

name="userForm",此项设置说明UserAction 也是用userForm 来封装表单数据,当

然,userForm 还要加入一些字段,在后面会给出其代码。

这里设置了两个转发:一个是修改页面的modifyUserView ;一个是修改成功后的

返回页面modifySuccess 。

37.5.5 修改UserForm 类

UserForm 类需要做如下3处修改:

(1)由于修改页面和登录页面合用UserForm 类,所以要向类中再多加入修改页面用到的3个字段(同时还有相应的Setter/Getter 方法),代码如下:

private Long id; //数据库ID

private String name; //姓名

private Date latestOnline;//最后登录时间

//-----Setter/Getter 方法,省略----

(2)因为UserAction 继承自DispatchAction 类,这种类型的Action 要求UserForm 继承ValidatorActionForm ,否则无法使用36.5.2节方法2中的验证方式。将UserForm 的父类改为ValidatorActionForm 。代码如下:

public class UserForm

extends ValidatorActionForm {……

(3)最后还必须将UserForm 中的validate 方法删除,否则修改用户页面无法被打开。 从这里可以看到Struts 程序的代码复用率很高,共用一个UserForm ,这不仅减少了创

第37章在Eclipse中使用Hibernate ·525·

建ActionForm的个数,还能共用验证机制。Struts允许将系统中所有表单用到的字段合在一个ActionForm中,但不推荐这样做。也有人认为应该一个JSP表单对应一个ActionForm,但这种方案的代码复用率太低。

建议将同类型表单所用到的字段合在一个ActionForm中,就像UserForm一样。这样既不会产生太多ActionForm,又有很好的代码复用。当然,这里面没有绝对的法则,读者应该根据自己实际的开发情况来选择。

37.5.6 创建UserAction类

创建UserAction类的代码如下:

package https://www.doczj.com/doc/1311491188.html,er;

public class UserAction extends DispatchAction {

private final static String USER = "modiUser";

删除用户的Action

//

public ActionForward removeUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm actionForm = (UserForm) form;

Long id = actionForm.getId();

String hql = "delete " + IUser.class.getName() + " where id=" + id;

DbOperate().delete(hql);

new

(mapping.getInputForward());

return

}

修改用户的Action

//

public ActionForward modifyUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm actionForm = (UserForm) form;

IUser user = (IUser) request.getSession().getAttribute(USER);

request.getSession().removeAttribute(USER);

user.setUserId(actionForm.getUserId());

user.setPassword(actionForm.getPassword());

user.setName(actionForm.getName());

new

DbOperate().saveOrUpdate(user);// 更新数据库

(mapping.findForward("modifySuccess"));

return

}

显示一个用户的Action

//

public ActionForward showUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm actionForm = (UserForm) form;

String userId = actionForm.getUserId();

IUser user = new DbOperate().getUser(userId);

actionForm.setUserId(user.getUserId());

actionForm.setPassword(user.getPassword());

actionForm.setName(user.getName());

eclipse使用技巧

代码篇: 1.在源代码中快速跳转: eclipse中的跳转甚至比https://www.doczj.com/doc/1311491188.html,还方便,方法是按住Ctrl键,然后鼠标指向变量名,方法名,类名,就会出现链接,点击就可跳到定义处。 2.实时语法检查: 编辑区右侧如果有红色小方块,直接点击就可跳到有错的行;黄色小方块是警告,可以忽略,但最好检查一下;如果某个函数尚未完成,要提 醒自己注意怎么办?加上注释// TODO,右侧就会有蓝色小方块,提示你此处尚未完成。当一个源码的右侧没有任何提示时,说明这个文件已经 完成了。 3.自动生成getter/setter方法: 只需要申明protected,private类成员变量,然后在Package Explore中找到该类,右键点击,选择“Source”“Generate Getters and Setters”。 4.更改类名/变量名: 如果涉及到多处修改,不要直接在源码中更改,在Package Explore中找到要改名的类或变量,右键点击,选择“Refactor”“Rename”, eclipse会自动搜索所有相关代码并替换,确保不会遗漏或改错。 5.匹配Try: 如果写的代码需要抛出或者捕捉异常,在JBuilder中,你需要首先引入这个异常类,然后再在写好的代码前后加try,catch或者在方法后面加 throws,在eclipse里完全不必要这样,只需要写好代码,然后按ctrl + 1,这时会出来提示,提示你是throw还是catch这个异常,选择你需要 的,按下enter就可以了。 6.快速书写循环代码: 在写循环或者选择条件的语句时,先写出关键字如if、while,然后按alt + /自己去看有什么好处吧。接下来会出来提示代码,按下tab可以在 框框中跳,按下确定跳出代码提示。 热键篇: ctrl + D:删除行 ctrl + M:当前窗口的最大化或最小化 ctrl + L:跳到指定的行 ctrl + 1:代码纠错提示 alt + /:代码辅助提示 F11:运行上次运行的程序

Eclipse 3.4 安装及使用说明

Eclipse 3.4 安装及使用说明 1. 安装Eclipse 3.4 由于Eclipse是绿色软件,所以直接解压至任意目录即可(例如D:\eclipse)。 2.在Eclipse中安装tomcat插件 解压tomcatPluginV31.zip,获取com.sysdeo.eclipse.tomcat_3.1.0并直接复制到eclipse目录plugins文件夹下即可。如果插件安装成功,新建项目时(File->New->Project)会看到Tomcat Project,如图1所示,否则说明安装不成功。 图 1 接下来在Eclipse中配置Tomcat服务器。在eclipse的菜单中选择: Window->Preferences->Tomcat(没有安装Tomcat插件就不会出现这项),设置Tomcat

Version: 选择“Version 5.x”, Tomcat Home: “C:\Program Files\Apache S oftware Foundation\Tomcat 5.5\”,即Apache Tomcat的安装目录。 图 2 3.采用Eclipse开发简单的Web应用 3.1 创建新项目 新建Tomcat Project,项目名称为“testPrj”,如图3,单击Next按钮进入下一步,如图4,web服务应用根目录为“web”,单击Finish按钮完成项目创建。

图3

图 4 3.2 修改项目的配置及目录结构 单击如图5所示的下三角符号,打开弹出菜单,选择“Filters”,打开过滤器窗口,如图6所示,把“*.resources”项的勾选去掉以显示.classpath文件。打开该文件并进行修改:把“”修改为“”;把“”修改为“”,然后保存该文件。接下来删除“bin”文件夹,删除W EB-INF下的“s rc”文件夹,把“work”文件夹移至web目录下,在项目根目录下添加“s rc”和“test”文件夹,最后项目目录如图7所示。

eclipse 操作技巧

eclipse是一个基于插件的开源项目,功能很强大,除了java外,通过安装插件可以编写大多数常用语言,可以说是一个非常强大,全面的ide开发工具。所以这里有必要介绍一下它的一些使用技巧,便于开发。 这些技巧包括常用菜单、界面的操作和快捷键的使用。 ◆Eclipse可以建立多个工作区,每个工作区是一个文件目录,所有的相关文件都存放在 这个目录下,在启动时会有对话框提示选择工作区。启动以后看到的就是工作台,工作台包含多个透视图,每个透视图又包含多个不同的窗口。 ◆Eclipse可以设置文件的关联打开程序,操作方法: Window->Preferences->General->Editors->File Associations. ◆Eclipse可以以方法为独立的编辑单位和以类为编辑单位之间进行切换,操作方法:点 击按钮[show source of selected Element only]。 ◆Eclipse的窗口可以通过点击右上角的标签大小化、恢复的操作,类似于Window的操 作。 ◆Eclipse中可以实现目录折叠恢复功能,操作方法:点击视图上方的折叠、恢复标签。 ◆Eclipse提供了自动刷新功能以避免每次在Eclipse以外更改文件后手工刷新,操作方法: window->Preferences->General->Workspace->选中Refresh automatically。 ◆Eclipse中打开一个Java文件,鼠标点击一个元素(类、方法),会在Declarition窗口中 直接显示这个元素的源代码,类似于以前的Open Declarition功能(通过Ctrl+鼠标左键)。 另外还可以在Javadoc视图中显示这个元素的javadoc。 ◆Eclipse中可以显示行号,操作方法:Window->Preference->General->Editors->Text Editors->选中show line numbers。 ◆Eclipse提供了强大的Java代码格式化功能,配置方法:Window-Preference->Java->Code Style->Formatter。 ◆Eclipse提供了注释隐藏功能,可以通过Window-Preference->Java->Editor->Folding->选 中Enable folding配置,但是当隐藏后,调试代码时会出现代码行不一致的情况,所以还是建议不要使用此功能。 ◆Eclipse提供了所选元素动态高亮显示功能,选中一个元素以后编辑器中的该元素的所 有调用被高亮显示,配置方法:Window-Preference->Java->Editor->Mark Occurrences。 ◆Eclipse中浏览窗口主要包括:Navigator、Package Explorer、Project Explorer、Hierarchy、

Eclipse使用方法[精髓]

附录C 3.2.2使用简介 C.3 使用开发工具进行编程 当下载并安装完毕Eclipse 3.2.2开发工具后,可以使用该开发工具进行代码的开发了,本节将使用该工具开发一段代码,介绍如何使用该开发工具进行编程,请按照如下步骤进行操作。 (1)首先打开Eclipse 3.2.2开发工具,稍等片刻之后,会进入到图C-8所示的界面,在这里将设置工程文件默认的存放路径。 图C-8 设置工程文件默认的存放路径 (2)本书选用默认路径作为工程文件的存放路径,当设置完成之后,就可以单击“OK”按钮,稍等片刻进入Eclipse 3.2.2的主程序。如图C-9所示。 图C-9 Eclipse 3.2.2主程序的欢迎界面 (3)这时可以将欢迎界面关掉,并单击“File” 菜单,将鼠标移动到“New”菜单项上,此时可以看

到图C-10所示的界面。 (4)在图C-11所示的“New”子菜单中选择“Project…”菜单项来创建工程文件,单击之后,会弹出一个图C-12所示的对话框。 (5)在该对话框中将选择所要创建工程的类型,可以选择“Java Project”选项,并单击“Next”按钮来进行创建。单击完“Next”按钮后,会进入图C-13所示的界面,在这里将设置工程文件的名称。 (3)可以在“Project Name”文本框中设置该工程的名称,例如这里将该工程的名称设置为“T est”,当设置完毕之后,可以单击“Fini sh”按钮完成设置。单击完“Fini sh”按钮后,可以在开发工具的主界面左侧看到本工程的工程树。如图C-14所示。 图C-12 选择工程文件的类型图C-13 设置工程文件的名称 图C-14 主界面中的工程树 (4)由于还没有创建文件,所以创建工程完毕之后,工程树比较空,这时可以为该工程创建代码文件,单击“File”菜单,并在其中“New”子菜单中选择“Class”选项。这样会弹出一个用来创建文件的向导提示框,如图C-15所示。

Eclipse完全手册

Eclipse 完全手册
Eclipse 是一个开放源码的、可扩展的应用开发平台,该平台为编程人员提供了一流的 Java 集成开发环境。作为一套开源工具,可用于构建 Web Services、J2EE 等各种类型的应用,其 所提供的功能不亚于、甚至要超过由专业的集成环境供应商所提供的商业化产品,如 JBuilder。
Eclipse 最有魅力的地方就在于它的插件体系结构。在这个体系中重要的概念是扩展点 (extension points),也就是为插件提供的接口。每一个插件都是在现有的扩展点上开发的, 并可能还留有自己的扩展点,以便在这个插件上继续开发。
由于有了插件,Eclipse 系统的核心部分在启动的时候要完成的工作十分简单:启动平台的 基础部分和查找系统的插件。在 Eclipse 中实现的绝大部分功能是由相应的插件完成的,比如 WrokBench UI 插件完成界面的外观显示,Resource Management 插件完成维护或生成项目或 文件等资源管理工作,而 Version and Configuration Management(VCM)插件则负责完成版 本控制功能,等等。虽然以上提到的每一个功能都是绝大多数 IDE 环境所必备的功能,Eclipse 却把它们都做成了插件模式,甚至用来开发 Java 程序的开发环境(Java development tooling, JDT),也只不过是 Eclipse 系统中的一个普通插件而已。整个 Eclipse 体系结构就像一个大拼 图,可以不断地向上加插件,同时,现有插件上还可以再加插件。
虽然大多数用户很乐于将 Eclipse 当做 Java IDE 来使用,但 Eclipse 的目标不仅限于此。 Eclipse 平台为工具提供者(Tools Provider)提供一套使用机制和一组需要遵循的规则,从而使 得开发出的工具之间可以实现无缝的集成。这些机制通过定义良好的 API 接口、类和方法提供 给用户使用,平台同样为新的工具的开发提供强有力的组件支持(如 Plug-in Development Environment,PDE——插件开发环境)。主要针对希望扩展 Eclipse 的软件开发人员,因为它 允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有 同等的发挥场所。
这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但 它的用途并不限于 Java 语言;例如,支持诸如 C/C++、COBOL 和 Eiffel 等编程语言的插件已 经可用, 或预计会推出。 Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础, 比如内容管理系统。

Eclipse用户界面指南

简介 本文是一篇介绍Eclipse 用户界面设计指南的文章。 Eclipse是一个通用的工具平台——一个可以用来做任何事情的开放,可扩展的IDE。它的真正价值来自工具插件,它能够“教”Eclipse怎样和其他东西协同工作-Java文件,Web内容,图片,视频-几乎是你能够想到的任何东西。Eclipse 使你能够独立开发出软件工具,能够和其他工具无缝集成,并且你不用知道一个工具在哪里结束而另一个在哪里开始。我们所熟知的工具的最初概念这里则完全消失了。 这个平台非常灵活而且可扩展性强,,但这个灵活性也有一个严重的缺点。特别是程序无法保证平台内的已注册组件的用户界面一致性。本文试图为组件创建定义标准用户界面指南,从而解决这个问题。如果你在自己的工具中采用了这些指南,就可以很好地保证和平台及其他工具的一致性,并且对于你的用户来说更容易理解。 这些指南主要供Eclipse用户界面的设计者和实现者使用。 Workbench 首先,让我们来看一下Eclipse workbench用户界面,和它里面的各种组件。 Workbench是多个窗口的集合。每个窗口包含菜单栏,工具栏,快捷方式栏,以及一个或者多个透视图。

透视图是一个包含一系列视图和内容编辑器的可视容器。视图完全存在于某个透视图中而且不能被共享,而任何打开的内容编辑器可以在透视图间共享。如果两个或者多个prespective打开了同样的视图,他们共享这个视图的同一个实例,虽然在不同透视图之间视图的布局可能不同。对于不同的 Workbenck窗口中的透视图,编辑器和视图都不能共享。一个透视图就好像是一本书里面的一页。它存在在一个窗口中,并且和其他透视图一起存在,和书中的一页一样,每次你只能看到一个透视图。 Workbench的主菜单栏通常包括File,Edit,Navigate,Project,Window,Help 这些顶层菜单。其他的顶层菜单位于Edit和Project菜单之间,往往是和上下文相关,这个上下文包括当前活动的透视图,最前面的编辑器(不管是否活动)以及活动视图。

Eclipse使用指南

Eclipse使用指南(北京)技术有限公司

1 修订记录

2 目录 1修订记录 (1) 2目录 (1) 3概述 (1) 4基本操作 (1) 4.1常用的快捷键 (1) 4.2设置T ask (2) 4.3eclipse.ini配置 (2) 4.4代码模板 (2) 5插件 (3) 5.1Subversion插件 (3) 5.2Tomcat插件 (4) 6常见问题解答 (4) 6.1Javaw.exe启动有问题 (4) 6.2Ant不能执行 (4) 6.3ant超时解决办法 (4) 7参考资源 (5) 7.1插件地址 (5)

3 概述 本文是关于Eclipse的使用指南。内容包括:eclipse配置、快捷键的使用、使用建议、代码模版的配置、相关参考资源等。 4 基本操作 4.1 常用的快捷键 它可以大大的增强您的开发效率,要想成为高手的必备技能之一。 对于一个仅仅知道几个快捷键的选手,不要急于一天就能掌握所有的操作。可以每天重点使用几个,对于一个java程序员,几周就可以熟练掌握。 1. Alt+shift+s 操作source源代码的一些方式 2. F4 查看类的结构和继承关系 3.可以用Ctrl+shift+L可以查阅,它能增加巨大的效率。 4. Ctr+H:查找具体的类 5. F3 :等价于Ctr+被选中的某个单词 6.Ctrl+/:可以在选中一定的区域后,可以直接的全部加上注释。Ctrl + shift +/可以注释块。 7. Tab+shift:按钮可以跳tab距离。 8.全部选中+tab:可以向前跳置tab的距离。 9. F5和F6:是常用的调试按钮。非常的有用。 10.F4:在选中的类中可以查看类图的集成结构。 11.Shift+鼠标右键,可以选择一行,比直接的按住右键好用多了。 12.Ctr + Shift + o organize import 非常的好用。 13.Ctr + o Quick outline 14.Ctr + Shift + e 在单独的窗口中。列出当前所有的文件, 15.Ctr + T 查询调用该函数父函数。比F4好用。 16.Alt + shift + R 重命名选中的函数rename 17.Ctr + F3 可以查看类

Eclipse与ClearCase结合使用方法

eclipse与clearcase结合使用方法 ClearCase开发eclipse项目(二) 为User2 设置工作区域以访问由User1 所共享的模型 在本节章,User2 将通过创建一个web视图并在其工作空间中导入Piggy Bank UML 项目,来设置他个人的工作区域。要创建一个视图并导入此共享的Piggy Bank 建模项目,请遵循以下步骤: 1.启动User2 的客户端机器上的Software Architect。 2.当收到提示时,选择你的工作空间或者创建一个新的工作空间。 3.这会激活Software Architect 中的ClearCase Remote Client。为得到更多信息,参见 前面的在Software Architect 中激活ClearCase Remote Client 一节(由User1所执行)。 4.从Software Architect 中的ClearCase 透视图创建一个新的ClearCase Web 视图 (命名为baseccrc_view2)。为得到更多信息,参见在Software Architect 中创建一个ClearCase Web 视图,并加载Base ClearCase VOB 工件。 5.在Software Architect(ClearCase透视图)中的ClearCase Navigator 视图中,右键点 击baseccrc_view2 并选择Update Resource(如图21所示)以将UML Project 工件获取到你的本地Web 视图(baseccrc_view2)中。 图21:将UML Project 工件获取到你的本地Web 视图

Eclipse for C++使用说明

Eclipse(for C++)使用说明 1、启动eclipse,在命令行中输入eclipse,出现窗口,如下图所示: 2、添加工程 在file菜单中选择import,出现窗口如下: 3、在General下选择Existing Projects into Workspace,单击next,出现如下窗口:

4、点击Browse,选择工程位置,出现下图所示 5、单击Finish,工作区如下图所示:

6、修改build选项,有两种方法 方法一:在项目名称上单击右键,选择Properties 方法二:选中项目,在菜单栏,选择Project/Properties 出现下图: 在左边选择C/C++ Build,修改Build directory:选择File system,选择makefile所在的文件夹,点击OK 7、在菜单栏选择Project/Build All,整个项目开始编译,如下图所示:

8、Run,在菜单栏选择Run/Run Configurations,出现窗口如下: 选择Arguments,点击File System,然后选择可执行文件所在目录,点击Apply,Close 然后在工具栏点击,程序即可运行 9、Debug 在Project explorer中,选择可执行文件,然后在菜单栏选择Run/Debug As,出现如下对话框,或者在工具栏点击图标,配置如下图:

点击OK,会弹出如下窗口: 选择Yes,整个工作区将切换到debug模式,如下图所示:

10、切换工作区视图 11、其他 A、查看函数的定义,按下CTRL键后,将鼠标移动到函数名称上左键单击,即可跳转 到函数的定义处。 B、如果想返回到上一视图,在工具栏点击 C、将鼠标移动到函数定义处,然后按下F2键,即可在浮出的窗口中查看该函数的代码 D、在左边Project explore中双击文件,即可在工作区中打开该文件进行编辑 12、在Eclipse中使用CVS 在项目名上单击鼠标右键,在弹出的菜单中选择Team,会出现相关选项

Eclipse常见问题及解决方法

、修改字体大小 二、修改代码的背景颜色 先取消这个勾 备注:个人觉得看代码看久了眼睛会很累,所以建议把字体调大点和 背景颜色改成比较暗的比较好。 _r 二一- J * r 七 - 三、修改项目的编码格式。(防止导入项目出现中文注释乱码) 备注:这招不是万能的,有可能这样设置了还是产生中文乱码。 选择自己喜欢的颜 色, 或者自定义颜色

四、导入项目出现中文注释乱码的解决方法。 1.中文注释乱码症状: 2.解决方法:安装系统文件浏览器插件。 下载地址 3.安装方法:(文件插件,复制到你ecli pse安装目录下的plug ins文件夹内, 重启eclipse,就会在工具栏内有个快速打开图标)如图: 4.使用方法:(点击文件,在点插件的图标) 进入文件路径后,选中文件,用记事本打开: 用记事本打开文件后,全部复制代码,再回到ecl ip se里, 全部代替有乱码的代码,就行了。 五、还有几种出现错误的情况: 1.导入项目,工程文件显示有个红色的X,但没有具体显示 哪里错了。只显示下面这句话: An droid requires comp iler comp lia nee level or . Foun d" in stead. Please use An droid Tools > Fix Project Prop

erties. 解决方法:选中文件,右键->android tools->fix project properties 如下图: 2.导入文件,工程文件有个红色的叹号,或者没有生成文 件。 解决方法:clea n —下出现问题的工程。 3.找不到activity 类: Un able to find exp licit activity class {xxxx} 解决方法:在中增加activity 的申明,如: vactivity an droid: name=".xxxActivity" > 这里选中需要 clean 的工程。 六、Eclipse下的调试技巧 断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时 停止。 在断点处点击鼠标右键,选择最后一个"Break poi nt Prop erties" 断点的属性界面及各个选项的意思如下图, 2、变量断点

Eclipse操作指南

Eclipse操作指南和地质建模数据附录 第一部分Eclipse操作指南 一功能介绍 ECLIPSE100是一个全隐式,三维、三相,还包括天然气、凝析油选项功能综合的黑油模拟软件。 Eclipse的输入资料是用关键字系统自由格式输入的。任何标准的编辑程序都可以编辑输入文件。EDIT是一个可供选择的专门用于屏幕编辑的Eclipse编辑程序。当数据输入后,EDIT程序能检查输入数据。 Eclipse软件提供的角点模型和常规筷中心模型非常实用,在一、二和三维模拟中,径向和笛卡尔块中心点模型也都很有用。三维径向模型能模拟0~360o界面上的圆形流动(关键词COORDSYS)。 Eclipse角点模型是唯一的能对正确代表油藏最复杂的几何地质图形进行模拟。前处理程序FILL和GRID常用来准备eclipse油藏模拟的角点数据。独立图形的处理GRAF和GRID 程序能用多种方法显示网格。例如,在进行大型的三维模拟时,用户可要求同时显示在XZ 方向的多条横剖面。网格的平面透明覆盖图是十分有用的,它能正确地对地质平面图进行检查。 Eclipse软件有一套综合的单井控制选择程序。生产井能在给定的油量、水量、液量、气量、油藏流体废弃产量、井底压力和井口压力等数值下进行运算。油藏工程师应对上述数值中一项定出一个目标值,而对其余数值的各项定出限制值。生产井只要不超过限制,在规定的目标下工作。若一个限制值将要超越他的限制界限,那么生产井将自动改变它的控制模式,使井保持在允许的限制条件下工作。效率系数还可用于考虑正常的停产时间。该程序将能计算处于正常流动条件下的流量和流动压力,但累计流量按照有效系数进行扣除。这有助于历史拟合的全过程,生产井可处于另处一种控制类型。输入这些井实际生产的油、气和水量,使井处于相同的产液量的条件下生产,这样,甚至当含水率和气/油比不完全拟合时,压力下降的速度也是大致正确的。实际生产的和计算的这两个产量都可以编入汇总文件,以便进行图形对比。 二建模 1 建立实际模型(Flogrid建模) 煤层气产能数值模拟是跟实际的地质情况紧密联系的,在煤层气田地质和开发资料数据充足的情况下,需要建立包含各种地质参数的三维地质模型,在此基础上全面布井(虚拟井),进一步对所有井开展值模拟工作,从而达到气田产能预测的最终目的。

在Eclipse中使用debug(Eclipse调试常用技巧)

Eclipse调试常用技巧 发表时间:2010-04-06 最后修改:2010-11-26 记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找Bug,我依然在用System.out,当时最痛苦的就是修改代码,每次找到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。 1、条件断点 断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。 在断点处点击鼠标右键,选择最后一个"Breakpoint Properties" 断点的属性界面及各个选项的意思如下图,

2、变量断点 断点不仅能打在语句上,变量也可以接受断点, 上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。 3、方法断点 方法断点就是将断点打在方法的入口处, 方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

4、改变变量值 代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确? 在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为" F:\Study\eclipsepro\JarDir\jarHelp.jar" 我们可以在变量上右键,选择"Change Value..."在弹出的对话框中修改变量的值, 或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。 5、重新调试 这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。 回退时,请在需要回退的线程方法上点右键,选择"Drop to Frame"

Eclipse使用指南96

Eclipse使用指南 张大为 全星科技珠海有限公司 2009-9-1 一、简介(此节内容为转载,只有小部分修改和添加) Eclipse最初是替代由IBM公司开发的价值4千万美金的商业软件Visual Age for Java的下一代IDE开发环境,2001年11月交给非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。2003年,Eclipse 3.0选择OSGi服务平台规范为运行时架构。 Eclipse 是一个开放源代码的、基于Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将Eclipse 当作Java IDE 来使用,但Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展Eclipse 的软件开发人员,因为它允许他们构建与Eclipse 环境无缝集成的工具。由于Eclipse 中的每样东西都是插件,对于给Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 这种平等和一致性并不仅限于Java 开发工具。尽管Eclipse 是使用Java 语言开发的,但它的用途并不限于Java 语言;例如,支持诸如C/C++、COBOL、Eiffel、PHP、Ant等等编程语言的插件已经可用。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统,数据库系统。另外,很多Eclipse的爱好者开发了非常小巧且实用的插件,譬如Column(可以像UltraEdit那样按列编辑),Spell(检查拼写错误),Subclipse(SVN在Eclipse中的客户端插件)。 基于Eclipse 的应用程序的突出例子是IBM 的WebSphere Studio Workbench,它构成了IBM Java 开发工具系列的基础。例如,WebSphere Studio Application Developer 添加了对JSP、servlet、EJB、XML、Web 服务和数据库访问的支持。 注:本人最常用的插件为Column,Spell和Subclipse。

Eclipse使用方法介绍

(1)Eclipse启动后,弹出一个【工作空间启动程序】对话框,在【工作空间】文本框中输入“D:\java”目录,单击【确定】按钮。 工作空间workspace用于保存Eclipse所建立的程序项目和相关的设置。 (2)单击【确定】按钮,系统将出现Eclipse的欢迎界面,其中包含【概述】、【教程】、【样本】、【新增内容】以及工作台相关按钮和菜单栏等。

在Eclipse的欢迎界面中,单击【工作台】按钮或者关闭【欢迎】的界面窗口,将显示出Eclipse的工作台,包括标题栏、菜单栏、工具栏、编辑器、透视图和相关的视图。 3.Eclipse菜单栏 (1)文件菜单 包含【新建】、【保存】、【关闭】以及【刷新】等命令,主要用于新项目的创建、保存以及关闭等操作。 (2)编辑菜单 主要用于辅助程序设计代码设计工作、如代码的【复制】、【剪贴】和【粘贴】等。 (3)源代码菜单 包含的命令都是和代码编写相关的,主要用于复制编程工作。 (4)重构菜单 是Eclipse最为关键的菜单,主要包括对项目重构的相关命令,需重点掌握。 (5)项目菜单 用于管理Eclipse中的项目,用于项目的打开与关闭、自动构建等操作。 (6)运行菜单 包含了与程序运行和调试相关的各种操作,同时还具有保存运行和调试的记录功能。(7)窗口菜单 用于显示、隐藏或处理Eclipse中的各种视图和透视图。 4.Eclipse中创建Java项目 在Eclipse中编写应用程序时,需要先创建一个项目。Eclipse的多种项目中,其中Java 项目是用于管理和编写Java程序的。 (1)创建一个java项目

(2)新建一个类文件

安装Eclipse使用说明

Eclipse Tutorial For Introduction to Java Programming By Y. Daniel Liang This supplement covers the following topics: ?Getting Started with Eclipse ?Choosing a Perspective ?Creating a Project ?Creating a Java Program ?Compiling and Running a Java Program ?Run Java Applications from the Command Line ?Debugging in Eclipse NOTE: To use this supplement with the text, you may cover Sections 1 – 6 in this supplement after Chapter 1 in the text, cover Section 7 in this supplement after Chapter 2 in the text, and cover Section 8 in this supplement at the beginning of Chapter 15 in the text. 0 Introduction This tutorial is for students who are currently taking a Java course that uses Eclipse and for Java programmers who want to develop Java projects using Eclipse. Eclipse is an open source supported by IBM. You can use JDK command line utility to write Java programs. The JDK command line utility consists of a set of separate programs, such as compiler and interpreter, each of which is invoked from a command line. Besides the JDK command line utility, there are more than a dozen Java development tools on the market today, including Borland JBuilder, NetBeans, Sun ONE Studio (a commercial version of NetBeans), Eclipse, and WebGain Visual Café. These tools support an integrated development environment (IDE) for rapidly developing Java programs. Editing, compiling, building, debugging, and online help are integrated in one graphical user interface. Using these tools effectively will greatly increase your programming productivity. This brief tutorial will help you to become familiar with Eclipse. Specifically, you will learn how to create projects, create programs, compile, and run programs.

eclipse常用方法和快捷键说明

代码提示 菜单Window -> Perferences…-> General -> keys,在中间的列表中选中Command名称为Content Asssist的项,在下面的Binding中按下需要设置的快捷键,如下图的:Shift + Space,然后点Apply或OK保存设置。 快捷键设置完成后点击列表列表的Binding按快捷键名称排序,看看有没有和其他快捷键设重复。 代码提示的常用模板可以在该Perferences窗口的Java -> Editor -> Templates中找到,如Templates列表中第一项,Name为main的项,其下面的Preview中的内容为一个main方法的模板。

编辑页面会弹出提示面板,选择需要的提示项后回车确定。 此时Eclipse会自动为我们生成这个main方法的模板: 快速执行main、test等 如果我们写了一个测试用的main方法,需要马上执行,可以点工具栏中的执行Main方法 的按钮

也可以利用快捷键快速执行:Alt + Shirt + X,放开后键入J,默认会执行当前编辑java类中的main方法。 如果当前编辑的是一个JUnit测试类,则可以使用Alt + Shirt + X,放开后键入T,快速执行该JUnit类中的测试方法。 文件定位,展开、收起项目树 在树形结构的项目中快速定位当前编辑的文件:按下左侧面板中的按钮, 项目树将展开并高亮显示当前文件。要收起展开的树可以点击前面的按钮。 添加视图 不小心关闭了控制台或需要使用eclipse提供的其它视图,点菜单Window –> Show View,选择需要添加的视图。 文件在本地的历史版本 对于删除了且尚未上传到CVS或SVN的文件,右键点击文件所在的文件夹选中Restory from

eclipse操作说明书

一、新建工程 打开office File/new project;取名 example 单击Data,打开对话框 (一)单击 case definition,打开对话框Black oil(黑油模型);组分模型;热采;再这个界面上, 1、选择general: 输入模拟开始时间, 模型定义:网格数X*Y*Z;

单位(units):field,Metric,Lab 2、选择reservoir 定义Grid type:Cartesian;Radial 定义geometry type:Block centered;Corner point

选择流体类型:gas/oil/water 点击OK,返回data模块

(二)点击Grid,打开grid section如下对话框 从菜单项中打开,subsection/grid keyword, 打开grid keywords section

1、选择keywords type: Properties Insert keyword:PERMX;PERMY;PERMZ;NTG;PORO; 单击Apply

2、选择keywords type: Geometry Insert keyword:DX;DY;DZ;TOPS 3、选择keywords type: Operational keywords Insert keyword:NORCHO;SAVE;RPTGRID;INIT 4、可以选择水体等等。 5、单击close。Grid View中Run Simulation运算后观看 6、file/save file (四)打开PVT模块 从这个模块中输入流体参数,组分模型应该再PVT模块下进行组分模拟。

Eclipse如何使用

Eclipse开发工具使用指南 2005-06-1709:32作者:倪大鹏出处:IBM责任编辑:方舟 2001年11月IBM宣布捐出了价值4千万美金的开发软件给开放源码的Eclipse项目。如此受青睐的Eclipse是什么样子呢,如何使用呢?本文的第一部分会使你对Eclipse有一个初步的认识。并且,Eclipse这个号称未来能进行任何语言开发的IDE集大成者,又将如何实现它的这一宏伟目标?第二部分介绍的Eclipse的插件开发将是其中的关键所在。 Eclipse是替代IBM Visual Age for Java(以下简称IVJ)的下一代IDE开发环境,但它未来的目标不仅仅是成为专门开发Java程序的IDE环境,根据Eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。目前,Eclipse已经开始提供C语言开发的功能插件。更难能可贵的是,Eclipse是一个开放源代码的项目,任何人都可以下载Eclipse的源代码,并且在此基础上开发自己的功能插件。也就是说未来只要有人需要,就会有建立在Eclipse之上的COBOL,Perl,Python等语言的开发插件出现。同时可以通过开发新的插件扩展现有插件的功能,比如在现有的Java开发环境中加入Tomcat服务器插件。可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是Eclipse的潜力所在。 虽然目前Eclipse项目还没有最后完成,但从已有的版本中已经能领略到Eclipse设计主导思想和主要功能特点。现在就了解Eclipse不但能使广大程序员对这款业界期望很高的IDE能一睹为快,更为重要的是如果能参加到Eclipse项目的开发中或是阅读它的开放源代码,这对广大程序员来说无疑是一个千载难逢的提高编程水平的好机会。Eclipse计划提供多个平台的版本,象Windows,Linux,Solaris,HP-UX和AIX,以下只介绍Windows版本。本文第一部分先介绍Eclipse的基本使用方法。第二部分介绍如何进行Eclipse的插件开发。 一.Eclipse简介 Eclipse是开放源代码的项目,你可以到https://www.doczj.com/doc/1311491188.html,去免费下载Eclipse的最新版本,一般Eclipse 提供几个下载版本:Release,Stable Build,Integration Build和Nightly Build,建议下载Release或Stable 版本,笔者用的是Build20020125(Stable版本)。Eclipse本身是用Java语言编写,但下载的压缩包中并不包含Java运行环境,需要用户自己另行安装JRE,并且要在操作系统的环境变量中指明JRE中bin 的路径。安装Eclipse的步骤非常简单:只需将下载的压缩包按原路径直接解压既可。需注意如果有了更新的版本,要先删除老的版本重新安装,不能直接解压到原来的路径覆盖老版本。在解压缩之后可以到相应的安装路径去找Eclipse.exe运行。如果下载的是Release或Stable版本,并且JRE环境安装正确无误,一般来说不会有什么问题,在闪现一个很酷的月蚀图片后,Eclipse会显示它的缺省界面:

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