太阳雨

痛并快乐着

BlogJava 首页 新随笔 联系 聚合 管理
  67 Posts :: 3 Stories :: 33 Comments :: 0 Trackbacks

#

本文摘自孙卫琴的《精通Hibernate:Java对象持久化技术详情》
      Hibernate有如下5个核心接口:
  • Configuration接口:该对象用于配置并且根启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或动态配置Hibernate的属性,然后创建SessionFactory实例。
  • SessionFactory接口:一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。它具有如下特点:

              1)它是线程安全的,这意味着它的同一个实例可以被应用的各个线程共享。

              2)它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

              之所以说SessionFactory是重量级的,是因为它需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。用户还可以为SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的第二级缓存,该缓存用来存放被工作单元读过的数据,将来其它工作单元可能会重用这些数据,因此这个缓存中的数据能够被所有工作单元共享,一个工作单元通常对应一个数据库事务。

  • Session接口:该接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。Session具有一下特点:

             1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例;

             2)Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建和销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

             Session有一个缓存,被称为Hibernate的第一级缓存,它存放被当前工作单元加载的对象。每个Session实例都有自己的缓存,这个Session实例的缓存,这个Session实例的缓存只能被当前工作单元访问。

  •  Transaction:该接口是Hibernate的数据库事务接口,它对底层的事务接口做了封装,底层事务接口包括:JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture) API.

             Hibernate应用可通过一致的Transaction接口来声明事务边界,这有助于应用在不同环境或容器中移植。

  •  Query和Criteria接口:它们是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例封装了一个HQL(Hibernate Query Language)查询语句,HQL是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更加面向对象,Criteria接口更擅长于执行动态查询。
posted @ 2008-10-21 14:24 小虫旺福 阅读(232) | 评论 (0)编辑 收藏

Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。
  •         瞬时态

        由new命令开辟内存空间的java对象,

       eg. Person person = new Person("amigo", "女");

        如果没有变量对该对象进行引用,它将被java虚拟机回收。

        瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。

  •        持久态

        处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。

       当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。

       持久对象具有如下特点:

       1. 和session实例关联;

       2. 在数据库中有与之关联的记录。

  •  脱管态

        当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。

       脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。

       脱管对象具有如下特点:

       1.  本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;

       2.  比瞬时对象多了一个数据库记录标识值。

posted @ 2008-10-21 14:23 小虫旺福 阅读(273) | 评论 (0)编辑 收藏

用eclipse,在导入相应的包后(有人说不导包也有提示,因为默认的eclipse导入了jdk的包),eclipse会有代码提示功能。
那么XML文件能不能也这样呢?其实也是可以的,只不过导包的地方不一样。下面以spring为例(虽然Myeclipse6.5中已经集成了,这里只是示范说明)。

进入:window -> Preference... -> MyEclipse -> Editors -> XML ->XML Catalog

选择:选中“User Specified Entries”,点击“Add...”按钮

填入:

URI: 请选择本地文件系统上SPRING_HOME\dist\resources\spring-beans-2.0.xsd 文件
Key Type: 选择Schema Location
Key: http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

点击确定

将spring配置文件关闭再重新打开即可。可以使用MyEclipse XML Editor打开这些xml文件。

posted @ 2008-06-23 22:29 小虫旺福 阅读(10532) | 评论 (1)编辑 收藏

很早就听说过eclipse可以集成jad,一直没有试过,一直用的小颖和一个叫java decompiler (具体名字记不住了),不过还是没有集成到eclipse中,每次查看源码的时候,还需要找到相应的class文件才可以反编译,比较麻烦,毕竟很多class都是在jar包中,而且路径很深。昨天闲来无聊,随便找了找eclipse集成jad的反编译工具,很简单,过程如下:
需要两个东东
Jadclips插件,网址:http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download
Jad反编译工具,网址:http://www.kpdus.com/jad.html#download
注意下载的时候认准版本。我下载的是net.sf.jadclipse_3.3.0.jarJad 1.5.8g for Windows 9x/NT/2000 on Intel platform

开始具体的配置

Jad下载后解压,然后将解压后的jad.exe文件复制到%JAVA_HOME%\BIN目录下面(可以将jad.exe随便放到哪,记住路径,下面在eclipse配置中要用到)。

直接将net.sf.jadclipse_3.3.0.jar 复制到eclipse的plugins目录下。
个人认为这样比较简单,如果大家喜欢把自己的plugins拿出来放到一个单独的文件夹,可以自己google,这里不做过多介绍。

然后启动eclipse,打开:Window->Preferences->Java->JadClipse

1、Path to decompiler,这里设置反编译工具jad的全路径名,比如:%JAVA_HOME%\bin\jad.exe。 就是刚才jad解压的路径,例如在我的电脑中的路径就是C:\Program Files\Java\jdk1.5.0_13\bin\jad.exe。

2、Directory for temporary files,这里设置临时文件路径,无所谓了。

至于Window->Preferences->Java->JadClipse目录下的Debug,Directives,Formatting,Misc目录中的参数设置,自己看一下就能明白什么意思,可以不用管,这里就不罗嗦了。

3、eclipse会自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。如果没有默认,可以在Eclipse的Windows——> Perference——>General->Editors->File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”。设置完成后,双击*.class文件,eclipse将自动反编译。我的是默认了,大家有问题的可以试试。

:对于存在源代码的类,它不会强行反编译,也就是说它还是会用eclipse自带的Class File Viewer查看class文件。这点很重要哦。毕竟反编译的不如人家的源码好。
:把鼠标焦点放到这个如要查看源码的方法上,然后按F3(eclipse查看源码快捷键),呵呵~源代码出现了。

不过还是要说明一下,如果可以的话,还是尽量找官方的源码(在eclipse指定源码位置,就可以按F3查看,怎么指定?自己google),而且一般都带说明文档的,这样的话,不必每次使用的时候都查看源码,只要把她的API文档导入就可以了(跟指定源码一样),开发的时候会方便一些,如果自己学习的话可以没事看看源码。

posted @ 2008-06-20 11:13 小虫旺福 阅读(11048) | 评论 (7)编辑 收藏

     摘要: 把以前总结的一个java常用排序整理了一下。 插入排序: package org.rut.util.algorithm.support;       import org.rut.util.algorithm.SortUtil;    /** *//** &nb...  阅读全文
posted @ 2008-06-19 12:00 小虫旺福 阅读(580) | 评论 (0)编辑 收藏

今天碰见一个很郁闷的事情,当使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app来创建一个新项目时,有时候会出现以下错误:解决过程如下:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO]
----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:create] (aggregator-style)
[INFO]
----------------------------------------------------------------------------
。。。。。。。
[INFO] Velocimacro : initialization complete.
[INFO] Velocity successfully started.
[INFO] [archetype:create]
[INFO] Defaulting package to group ID: com.mycompany.app
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO]
------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

GroupId: org.apache.maven.archetypes
ArtifactId: maven-archetype-quickstart
Version: RELEASE

Reason: Unable to determine the release version

Try downloading the file manually from the project website.

Then, install it using the command:
    mvn install:install-file -DgroupId=org.apache.maven.archetypes
-DartifactId=maven-arch
etype-quickstart \
        -Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file

  org.apache.maven.archetypes:maven-archetype-quickstart:jar:RELEASE

 [INFO]
------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Tue Apr 17 07:08:50 MDT 2007
[INFO] Final Memory: 4M/8M
[INFO]
------------------------------------------------------------------------

        请注意红色部分为错误产生的根本原因,  由于maven还处于开发过程中,开发方极有可能已经更新某个plug-in的版本,但本地plug-in metadata没有版本的信息或者没有最新版本的信息,致使maven无法下载正确的版本。同时请注意蓝色部分,这是提示的解决办法。具体步骤如下:
    1.打开网址:http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/
    2.选择最新版本并且下载最新的“maven-archetype-quickstart-1.0-alpha-4.jar ”文件
    3.安装这个archetype到maven本地仓库。使用命令如下:mvn install:install-file -DgroupId=org.apache.maven.archtypes -Dar
tifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是刚下载的文件的路径。
    现在在cmd中执行mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app就可以创建新项目了。
posted @ 2008-06-19 11:52 小虫旺福 阅读(286) | 评论 (0)编辑 收藏

     摘要: 这里不讨论有关apache的commons-io中的FileUtils,只是一些基本的对文件的操作的代码,有时间会整理一个FileUtils的用法的文章。 java中提供了io类库,可以轻松的用java实现对文件的各种操作。下面就来说一下如何用java来实现这些操作。   新建目录 <%@ page contentType="text/html;ch...  阅读全文
posted @ 2008-06-19 11:40 小虫旺福 阅读(516) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4