What is hibernate?

主要特性

Hibernate是一个object relational mapping的解决方案和一个持久管理方案或持久层。这样的解释可能不能使学习Hibernate的人明白。

 

你或许可以想象一下你的应用程序有很多功能(业务逻辑),你想把数据存到数据库里。当你所有的业务逻辑都用Java对象实现时,数据库的表却不是对象。

 

Hibernate提供了一个映射数据库表到Java class的解决办法。它复制数据库数据到object,也支持把object数据存储到数据库。以这种方法就可以使object转换一个或多个数据库表。

 

把数据保存到存储设备就叫做持久化。复制数据库表数据到object和从object把数据存进数据库表就叫做object relational mapping。

 

为什么要使用object relational mapping?

 

更好的系统架构

 

当你把所有的处理和数据库访问都写进了页面,这样你程序就有了很多的缺点。

 

它重用困难。你在许多地方写了重复的代码。使得你在需要更动的时候很难找到所有需要更改的地方。

 

当你把页面分成业务逻辑和持久逻辑等部分的时候,你能比较容易地更在其中一部分而不影响其它部分。

 

减少标准数据库操作编写时间

 

许多数据库查询都是简单的“insert,update,delete”语句。这完全没有必要开发这些单调乏味的语句。Hibernate帮助你节省了这些时间。

 

从数据库加载数据到类类似于以下代码

Query query = session.createQuery("select b from Bug as b");

      for (Iterator iter = query.iterate(); iter.hasNext();) {

        bugs.add((Bug) iter.next());

      }

    return bugs;

 

保存“bug”类类似于

 

session.update(bug);

 

自己难于实现一些高级功能

 

Hibernate提供的缓存方案(Caching solutions),事务处理(transactions)和其它功能都是不容易实现的。完全没理由去开发一些已经存在的东西,你仅仅只需要用Hibernate就可以实现上述功能了。

 

Hibernate是怎么工作的

我的意见是它比实体bean(entity beans)友好许多,hibernate只从一些简单的Java类开始(Pojo=Plain Old Java Objects)。

 

想使用hibernate你要先编写一个简单的java类:

public class Bug

implements Serializable

{

    private int hashValue = 0;

    private java.lang.Integer id;

    private java.lang.String title;

    public Bug()

    {

    }

    public Bug(java.lang.Integer fid)

    {

        this.setId(fid);

    }

    public java.lang.Integer getId() {

        return id;

    }

    public void setId(java.lang.Integer id) {

        this.id = id;

    }

    public java.lang.String getTitle() {

        return title;

    }

    public void setTitle(java.lang.String title) {

        this.title = title;

    }

.............

 

然后创建一个映射文件。映射文件描述Hibernate如何将类的字段映射到数据库字段。

<hibernate-mapping package="de.laliluna.fehlerbehebung">

<class name="Bug" table="bug">

<id name="id" column="fid" type="java.lang.Integer">

<generator class="sequence">

<param name="sequence">public.bug_fid_seq</param>

</generator>

</id>

<property name="title" column="ftitle" type="java.lang.String" />

</class>

</hibernate-mapping>

 

现在就可以使用hibernate类了。

例如新建一个数据库实体:

try {

    Bug bug = new Bug();

    bug.setTitle("Title");

    bug.setTuserFk(tuser);

    Transaction tx = session.beginTransaction();

    session.save(bug);

    tx.commit();

} catch (HibernateException e) {

    e.printStackTrace();

}

 

需要创建的描述文件可以用一些工具自动生成,例如MyEclipse。MyEclipse提供了创建类和直接从数据库表创建描述文件的功能。

 

Hibernate包括了以下工具:

l         从描述文件生成Java类

l         从现有数据表生成描述文件

l         从描述文件生成数据库表

 

 

时间: 2024-10-31 07:41:33

What is hibernate?的相关文章

hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据呢

问题描述 请问hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据并且能自动插入和更新呢?就是相当于mysql中timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP;这样的数据列,在hibernate中怎么样用annotation注解来配置呢(不要xml的配置方式).各位大虾帮帮忙啊,跪求中-- 解决方案 解决方案二:没用过注解吖.看下这个资料吧解决方案三:@Column(name="D_UP

混合Eclipse、WTP、Struts和Hibernate

使用Eclipse Web Tools Project.Tomcat应用服务器和MySQL数据库服务器,创建了一个Web应用程序.尽管该应用程序(DBTest)可能会很不错,但是也会存在一些局限性: 在servlet代码中,Java Server Pages (JSP) 名称是硬编码的 SQL也被硬编码到命令类中. 幸运的是,这些问题可以通过两种有趣的解决方案得以解决.第一个问题可通过使用开源Struts框架解决,该框架通过将模型动作映射到一个简单配置文件中的视图组件(比如JSP),从而分离应用

系统学习hibernate之三 transient、persistent、detached状态

transient.persistent.detached状态关系图如下: 1.transient状态的特征: * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 2.persistent状态的特征: * persistent状态的对象在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步 3.detached状态的特征: * 在数据库中有与之匹配的数据 * 没有纳入session的管理 PS:了解这几种状态对深入使用hib

Hibernate流行架构浅析

本文向大家介绍Hibernate架构,可能好多人还不了解Hibernate架构,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西. 用java来建立一个很有价值的web 应用不是一个简单的任务.在架构这个应用时要考虑很多的因素和问题.从更高的层次来看,开发人员面临着关于如何构建用户接口,何处驻留业务逻辑,以及如何实现数据持久性这些问题.这3层都有各自的问题需要回答.而每一层又需要实现那些技术?应用如何设计来进行松散耦合并能进行灵活变更?应用架构是否允许某一层变更而不影响到其它的层次?

Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误

这两天看陈雄华的书<Spring3.0企业开发实战>17章做dao层的测试,由于使用postgreSql数据库,所以遇到了不少错误,很多问题百度都没找到答案,所以记录下来给遇到同样错误的童鞋做个参考.下面是我遇到的问题: 1.unitils目前还不支持Hibernate4,所以使用hibernate4的童鞋,要么换hibernate3要么自己用dbUnit做测试. 2.org.unitils.core.UnitilsException: Missing configuration for or

Java Persistence with Hibernate中文版Hibernate实战第2版出版

Java Persistence with Hibernate中文版Hibernate实战第2版出版 图灵出版社官方Hibernate实战(第2版)链接为: http://www.turingbook.com/Books/ShowBook.aspx?BookID=260 书 名: Hibernate实战(第2版) 评论星级: **** 书 号: 978-7-115-17448-2 原 书 名: Java Persistence with Hibernate 原出版社: Manning Publi

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.*.Paper.totalTime

at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:109) at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:586) at org.hibernate.tuple.entity.PojoEntityTuplizer.s

s2sh框架整合,hibernate无法执行删除问题

问题描述 s2sh框架整合,hibernate无法执行删除问题 dao层的代码 public void deleteDepartment(Serializable id,String delMode) { Department department=this.getDepartmentById(id); //通过页面出来的参书id,获得 这个对象 if("del_pre_relation".equals(delMode)){ Set users = department.getUser

java-关于spring+hibernate 注入sessionFactory为null的问题

问题描述 关于spring+hibernate 注入sessionFactory为null的问题 最近一个项目需要用到struts2+spring+hibernate组合框架,我在一点一点的做配置,但做到注入SessionFactory时,一直不成功,在网上搜的一些解决方案也都不适用.故在此发布,希望高手们不吝赐教.web.xml的配置为: <?xml version=""1.0"" encoding=""UTF-8""

Hibernate主键生成方式 Key Generator

Hibernate主键生成方式 Key Generator 主键产生器 可选项说明: 1) assigned 主键由外部程序负责生成,无需Hibernate参与. 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3) seqhilo 与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle. 4) increment 主键按数值顺序递增.此方式的实现机制