主要特性
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 从描述文件生成数据库表
