原始森林中的一个狼窝

常用链接

统计

积分与排名

我的好友

最新评论

Hibernate Day_1

Hibernate 英文的直意是冬眠的意思。

Hibernate 是一个面向 Java 环境的对象 / 关系数据映射工具,注意,这是一种技术工具。

ORM ( object relational mapping ) 这个术语表示一种技术,用来把对象模型表示的对象映射到基于 SQL 的关系模型数据结构中去。

以上的这些概念性的东西,然我感觉和 .NET Framework 2.0 中的强类型数据集的作用差不多,但听研究过的人说,要比 Microsoft 的那个好得多, Microsoft 的强类型数据集我用过,感觉爽,既然有说 Hibernate 更好,那已经更是过瘾,我心里痒痒的呀。继续。。。

书中有这样一句“对于以数据为中心的程序来说,他们往往只在数据库中使用存储过程来实现商业逻辑, Hibernate 可能不是最好的解决方案。”这个是一定啦, Hibernate 是桥梁,又不是万金油,当然是在数据库中直接用存储过程处理商业逻辑是最好的啦。我做过,直接在存储过程中搞定一切东西,传一个参数过去,然后所有的运算都在 SQL Server 2000 的存储过程中完成,那叫一个爽,比把数据读到程序里,然后用 Java 处理,再把数据传回去要快得多,但是在 SQL Server 2000 里直接用存储过程来完成这样的工作,难度还是不小的,调试就是最大的难点,反正我是没整明白有啥办法可以调试的,我就用最原始、最保靠,据说是也是有效的调试方法 print 来完成。哈哈。够晕的吧!继续看。。。

现在看到了一个“持久化实体类”这个类是符合 JavaBean 的编写要求。并且要给它一个唯一的标识符,这是为了我们使用 Hibernate 提供的所有特性。大多数程序,特别是 web 程序,都需要通过标识符来区分对象。但,通常我们不会直接操作对象的标识符,所以他的 setter 方法的访问级别是 private 。

Hibernate 需要知道怎样去加载( load )和存储( store )持久化类的对象,映射文件,它就是告诉 Hibernate ,应该访问数据库里面的哪个表,已经应该使用表里面哪些字段。

Hibernate 不会从 web 加载 DTD 文件,但它会首先在应用程序的 classpath 中查找。 DTD 文件包含在 hibernate3.jar 里,同时在 Hibernate 发布包的 src/ 目录下。

映射文件的长相: Event.hbm.xml

<hibernate-mapping>

     <classname="events.Event" table="Events">

            <idname="id" column="eventID">

                   <generatorclass="native"/>

            </id>

            <propertyname="date" type="timestamp" column="eventDate"/>

            <propertyname="title" column="eventTitle"/>

     </class>

</hibernate-mapping>

 

说明:

class 表示持久化类;

id 表示唯一标识;

property 表示类的属性字段;

name 是持久化类名;

table 是数据表名;

column 是数据字段名;

generator 是唯一标识的生成方式;

type 是映射的数据类型。

 

Hibernate 配置文件的长相: hibernate.cfg.xml

<!-- by MyEclipse Hibernate tool integration. -->

<hibernate-configuration>

    <session-factory>

        <!-- properties -->

        <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

        <propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:test</property>

        <propertyname="connection.username">system</property>

             <propertyname="connection.password">manager</property>

                                                                    

        <propertyname="dialect">net.sf.hibernate.dialect.OracleDialect</property>

                                                                      

        <!-- mapping files -->

        <mappingresource="events/Event.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

说明:

Session-factory :特定数据库全局工厂

connection.driver_class :驱动类

connection.url :连接路径

connection.username :用户名

connection.password :用户密码

mapping resource :持久化类加入映射文件

 

用 ant 创建 build.xml

我理解他就是管理文件位置的,就是拷贝,为编译运行做准备。

 

SessionFactory 是一个线程安全的全局对象,只需要被实例化一次,一个 Session 代表一个单线程的单元操作。

 

这时又来了一个辅助类 HibernateUtil ,负责启动 Hibernate 和更好的操作 SessionFactory 。

最后配置一个日志系统, Log4j 或 JDK 1.4 都可以选择。

 

看到了一种编程模型:线程绑定( thread-bound )

Session 在第一次被使用,或第一次调用 getCurrentSession() 的时候,其生命周期就开始了,然后它被 Hibernate 绑定到当前线程。当事务运行结束的时候,不管是提交、回滚, Hibernate 都会把 Session 从当前线程剥离,并且关闭它。

posted on 2006-10-19 18:28 白洋 阅读(1730) 评论(1)  编辑  收藏 所属分类: Hibernate 知识点滴

评论

# re: Hibernate Day_1 2006-10-20 17:54 坏男孩

去我blog看看  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: