Hibernate Annotations实战(二)

我在前面一篇文章<Hibernate Annotations 实战-- 从 hbm.xml 到 Annotations>中,有很多开发者在谈论中提到,有没有必要从 hbm.xml 往 Annotations 上转移. 那么在这篇文章中我们就来讨论一下 hbm.xml 与 Annotations的优缺点,看看那种情况最适合你.

首先,讨论一下 xml 配置文件的优点, 个人认为主要优点就是当你改变底层配置时 不需要改变和重新编译代码,只需要在xml 中更改就可以了,例如 Hibernate.cfg.xml 当你要更改底层数据库时, 只要更改配置文件就可以了.Hibernate会为你做好别的事情.

那么xml的缺点呢,个人认为有以下几点:

描述符多,不容易记忆,掌握 要深入了解还有看DTD文件

无法做自动校验,需要人工查找

读取和解析xml配置要消耗一定时间,导致应用启动慢,不便于测试和维护

当系统很大时,大量的xml文件难以管理

运行中保存xml配置需要消耗额外的内存

在O/R Mapping的时候需要在java文件和xml配置文件之间交替,增大了工作量

其中第一 二点 借助于先进的IDE 可能不是什么问题. 但是对初学者还是个问题

下面我们看看 Annotations的 特性吧! 可以解决xml遇到的问题,有以下优点

描述符减少。以前在xml配置中往往需要描述java属性的类型,关系等等。而元数据本身就是java语言,从而省略了大量的描述符

编译期校验。错误的批注在编译期间就会报错。

元数据批注在java代码中,避免了额外的文件维护工作

元数据被编译成java bytecode,消耗的内存少,读取也很快,利于测试和维护

关于映射文件是使用 hbm.xml 文件还是使用 Annotations 我们来看看2者的性能吧. 先声明一下,个人认为映射文件一旦配置好就不会在很大程度上改变了.所以使用xml文件并不会带来很大的好处.如果你认为 映射文件在你的项目中也经常变化,比如一列String数据 ,今天你使用 length="16" 明天你认为 该数据的长度应该更长才能满足业务需求 于是改为length="128" 等等类似的问题 . 如果你经常有这方面的变动的话,下面的比较你可以不用看了 , 你应该使用 xml文件 因为Annotations 无法很好的满足你的要求.

现在让我们就来看看2者的性能比较吧.

(说明: 这里只是比较查找 插入 的时间快慢,没有比较除运行时间以外的其他性能,如 内存占用量 等等)

先来看看测试程序和配置.

首先在 Hibernate.cfg.xml 文件中去掉了

<property name="hibernate.hbm2ddl.auto">update</property>

这一行, 因为在前面的实验中以及建立了数据库表了 不再需要更新了.如果你是第一次运行该例子 还是要该行的.

时间: 2025-01-21 07:31:28

Hibernate Annotations实战(二)的相关文章

Hibernate Annotations实战--从hbm.xml到Annotations

从 hbm.xml 到 Annotations 下面让我们先看一个通常用 hbm.xml 映射文件的例子. 有3个类 .HibernateUtil.java 也就是 Hibernate文档中推荐的工具类,Person.java, Test.java 测试用的类.都在test.hibernate 包中. 每个类的代码如下: HibernateUtil: 01 package test.hibernate; 02 03 import org.hibernate.HibernateException;

java.lang.ClassNotFoundException: org.hibernate.annotations.Entity

问题描述 最近要把hibernate从3.2升级到3.67.更换JAR包之后,报以下错误,但那个entity在hibernate3.jar包里面是有.先谢谢大家!gframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)atorg.springframework.web.context.ContextLoader.initWebApplicationContext(Context

使用Hibernate Annotations维护多对多关系的心得

说明 在HibernateAnnotations中通过@ManyToMany注解可定义多对多关联.同时,也需要通过注解@JoinTable描述关联表和关联条件.对于双向关联,其中一端必须定义为owner,另一端必须定义为inverse(在对关联表进行更性操作时这一端将被忽略).被关联端不必也不能描述物理映射,只需要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系. 如何制作PO 1)找到CUBE--需要引入哪些类: import java.util.ArrayL

GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)

  参考资料:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/17/2291200.html 因为使用ObjectDataSource自带的缓存机制无法实现排序功能,苦苦寻觅终于找到了解决方案.参考后觉得还是自己实操一下比较安心,下面是对<GridView实战二:使用ObjectDataSource数据源控件>的改进!!   CL代码: public class CL { private OdsDataManager om = new Od

Hibernate Annotations(四)

普通一对多(延迟加载方式)  @OneToMany(mappedBy = "troop", cascade = ...{CascadeType.ALL}, fetch = FetchType.LAZY)     @OrderBy(clause = "name desc")     public Set<Soldier> getSoldiers() ...{         return soldiers;     }     @ManyToOne(fet

Hibernate Annotations(一)

Entity注释 @Entity @BatchSize(size = 5)   //批处理 @Where(clause = "1=1")  //默认查询条件 @FilterDef(name = "minLength", parameters = ...{@ParamDef(name = "minLength", type = "integer")})  //过滤器 @Filters(...{ @Filter(name = &q

Hibernate Annotations(二)

复合主键的应用 (EmbeddedId) 主表 @Entity public class A implements Serializable...{     @EmbeddedId     private AId aId;     public AId getAId() ...{         return aId;     }     public void setAId(AId aId) ...{         this.aId = aId;     } } 复合主键   @Embedd

第一个成功的Hibernate实例(二)

二.在Eclipse中生成POLO和映射文件 1) 在Eclipse中配置环境,包括数据库驱动程序(此处略) 2) 生成POLO类和映射文件 此处以Houses为例,生成的原代码和映射文件如下: a) hibernate.cfg.xml <?xml version=′1.0′ encoding=′UTF-8′?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD

企业网站推广实战(二):head区写法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 前文企业网站SEO实战日记(一)前期分析(http://www.admin5.com/plus/view.php?aid=200434)提到:为帮哥们优化其公司企业网站,对自身原有网站及竞争对手做出分析后整理出了一套解决方案,首先当务之急是把原有网站推翻重做. 插播一条新闻:搜索引擎优化方案刚拟好不到两周,恰逢今天google做了PR更新,哥