- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
应用Hibernate框架时所应该注意的问题
应用Hibernate框架时所应该注意的问题 在本讲您能了解如下知识点 PO与DTO的各自的应用要点 持久化类中的id属性 持久化类的基本结构要求 区分建立域模型和关系数据模型 关于数据验证的问题 Hibernate的初始化过程 应用Hibernate框架时所应该注意的问题 1、PO与DTO的各自的应用要点 (1)应该避免直接将PO传递到系统中的其他层面,PO只应该在数据访问层中出现;而在业务处理层中倡导应用VO;在表示层中应该应用FO(Form Object)。哪下面的问题如何实现 PO ------ VO ------ FO PO --DTO- VO --DTO- FO(2)而如果需要达到该设计目标,则可以利用DTO作为中间连接 (3)属性复制的方法 BeanUtils 类---请见文档中的代码示例 2、持久化类中的id属性和数据库表中的主键(1)对象标识符(OID,Object Identifier) 该属性用来标识和区分持久对象(2)数据库表中的主键 主键用来标识和区分数据库表中的各个记录,应该包含有主键字段。(3)主键的必要性:能够识别是否已经对同一条记录进行了映射 (4)主键的无意义性 请注意VO和PO的不同! 3、持久化类的基本结构要求 (1)持久化类(也叫POJO)符合JavaBean的规范(2)如果持久化类的属性为boolean类型,它的get方法名既可以用“get”作为前缀,也可以用“is”作为前缀 (3)必须提供一个不带参数的默认构造方法 (4)持久化类不一定非要实现java.io.Serializable接口---除非将PO作为DTO来应用(5)持久化类不需要与Hibernate相绑定---继承或者实现等(6)在持久类中实现equals()方法和hashCode方法的应用的场合 在存在数据冗余的情况下,需要把粗粒度的表拆分成具有外键参照关系的几个细粒度的表,从而节省存储空间; 另一方面,在没有数据冗余的前提下,应该尽可能减少表的数目,简化表之间的参照关系,以便提高访问数据库的速度。 因此,在建立关系数据模型时,需要在节省数据存储空间和节省数据操纵时间之间进行合理的折衷。 4、区分建立域模型和关系数据模型不同的出发点 (1)关系数据模型是由关系数据组成的 数据库表设计的一些原则 粗粒度关系数据模型的设计 (2)域模型设计时,通过细化持久化类的粒度可提高代码可重用性(对象越小、则可重用率也就越高),并简化编程实现。 细粒度的持久类的设计原则 (3)持久化类的属性并不一定要和数据库表的字段一一对应 由于建立域模型和关系数据模型的原则不一样,使得持久化类的数目往往比数据库表的数目多,因此持久化类的属性并不一定要和数据库表的字段一一对应。 O/R Mapping之间并不一定要“一对一”形式! 精粒度对象模型和粗粒度关系数据模型的原则 5、关于数据验证的问题 (1)不应该依赖Hibernate或数据库系统来负责数据验证----为什么? 该数据库表的数据约束设计有意义吗? 例如对于Book对象的bookName属性,事实上在表示层就能检查bookName属性是否为null,假如表示层、业务逻辑层和Hibernate持久化层都没有检查bookName属性是否为null,那么数据库层会监测到数据库表中的bookName字段违反了数据完整性约束,从而抛出异常。 而包含非法数据的Book对象从表示层依次传到数据库层,随后从数据库层抛出的错误信息又依次传到表示层,这种做法显然会降低数据验证的效率。 (2)应该在表示层或者业务逻辑层负责数据验证 您了解为什么要如此吗? 数据传送示图 (3)基于Hibernate的系统中的数据传送示图 (4)反思为什么要把property元素的not-null属性设为true?有必要吗? 也为单元测试提供约束 6、Hibernate的初始化过程 (1)static代码块 HibernateUtil类的静态代码块负责Hibernate的初始化工作,如读取Hibernate的配置信息以及对象-关系映射信息,最后创建SessionFactory实例。 当JVM(Java虚拟机)加载HibernateUtil类时,会执行该静态代码块。 (2)初始化过程包括如下步骤 创建一个Configuration类的实例 调用Configuration类的addClass(Customer.class)方法 调用Configuration类的buildSessionFactory()方法 也可以直接采用*.xml文件 7、映射定义文件的各个标签的说明 请见文档或者Hibernate系统帮助中的详细说明!
文档评论(0)