最近学习有些疲惫,明天就是元旦了,好快!学习幸福,今天放松一下看看电影,明天再写学习日志吧!
新年快乐!现在是2010年1月1日星期五,2009年并未怎么赚钱,但一如既往每年的成长都让我高兴并心怀感激。我将继续加强自我人格的建设、继续努力学习!
前天的课程内容,我总结的有些唐突。今明两天全休息,所以我要认真总结一下,因为hibernate十分重要,虽然它目前不适于对速度要求较高的应用。Hibernate比struts要复杂的多,因为hibernate是负责数据库操作的框架。
传智播客的教学理念就是做实现原理和应用的教学,而不像某些只做肤浅的应用教学,这一点通过我在下边的总结就可以看出来,只做应用的教学是十分不利的并且学费还那么贵。在这新的一年我,我祝愿好人一生平安、健康快乐、幸福!并祝愿那些社会中骗子早日离开这个世界,让我们的民族发展更好些!
Hibernate整体的前两小部分内容为hibernate入门与Java对象持久化概述,这一点我在前天的日志中有简要的介绍,所以在此就不再总结了。我直接从重点内容开始!
一、对象-关系 映射基础
1.对象间的基本关系
首先我简要阐明一下对象之间的基本关系,在这以后UML的课程中也会深入的学习。对象具有的四种基本关系:
关联关系:关联关系在设计模式中是被提倡优先使用于继承关系的。关联关系就是将一个对象做为别一个对象的成员,是一种包含的关系。
依赖关系:对与对象之间的方法的调用,不存在包含的关系。
聚集关系:这个关系比较有趣,比如人的手和身体。如果身体不存在了,手也就不存在了。是一种整个与部分的关系。
一般关系:就是继承关系。
上边的这四种关系是对前一天的补充。对象-关系的映射基础没有涉及这些,而是单一对象通过hibernate与数据库的映射关系。
2.持久化类的属性及访问方法
首先回顾一下持久化,我们知道持久化层是从业务逻辑层中分离出来的专门用于数据库操作的这些部分。持久化层中的持久化类,便是我们之前早已学习的domain类。
1).持久化类的访问者有两个,一是JAVA应用程序,二是hibernate。
写:Java应用程序通过setter设置持久化对象的属性,hibernate通过getter获取持久化对象的属性并生成相应的SQL语句对表格进行操作。
读:hibernate通过setter设置持久化对象的属性,Java应用程序通过getter获取持久化对象的属性。
2).基本数据类型和包装类型
通过前天的日志,我们知道关联对象的属性与表格的字段是通过property元素节点设置的:
<property name="gender" column="gender" type="integer" />
|
基本的type是hibernate的类型,我们在持久化类中定义的gender属性为int。定义为int类型会有什么弊端?比如,我们有个学生成绩表。如果某个学生没有参加某一学科的考试,但我们却使用了int类型,它的默认值为0,当查看学生成绩时,他到底是考了0分还是没有考试?所以最好将持久化类中的gender属性定义为Integer,它的默认值为null。查询成绩时看到的是null,那么他肯定是没参加考试哦!(注意:数据库中的对应字段应该为字符型)
3).hibernate访问持久化类属性的策略
Hibernate通过name指定的值访问持久化对象。Hibernate通过name值,反射持久化对象的对方法。比如,name的值为gender。Hibernate会直接反射持久化对象的getGender和setGender方法。所以我们必须保证持久化对象中有对应的方法。这是因为property有一个access属性,它的默认值为property。
如果指定access的值为field,则hibernate直接根据name值反射持久化对象的属性。此时,我们必须保证持久化对象中有对应的属性。
4).在持久化类的方法中加入程序逻辑
通过3)我们知道,如果access的值为property,hibernate直接反射持久化对象的方法。在这个方法中我们就可以加入程序逻辑。老徐举了一个生动的例子,比如Customer类中有firstname和lastname两个属性。但我们只想让hibernate通过getName方法获得一个firstname+lastname的字符串,此时我们就可以在getName方法中将firstname与lastname两个属性值合并为一个中间使用 “.”连接的字符串返回。
使用hibernate获取数据表中的数据时,hibernate会调用持久化对象的setName方法。我们在这个方法中将传递进来的参数使用“.”分隔,然后分别设置到firestname和lastname属性中。
5).hibernate的hql语句
我们在使用JDBC、DBUtil时使用的都是SQL语句。但hibernate比较特殊,它使用的是自己的一套东西叫hql语句。比如我们调用session.find方法,传递的hql语句为:
"from customer as c where c.name='itcast'"
|
其中的customer指向持久化对象的映射文件,name指向持久化对象的映射文件中的property元素的name属性。此时需要注意access属性的值。
6).设置派生属性
Property元素中,有一个formula属性。它的值是一个sql表达式,hibernate将根据此表达式计算的值设置到持久化对象的属性上。比如,我们要统计订单表中的总计:
<property name="totalprice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)" />
|
十分方便!
分享到:
相关推荐
传智播客 hibernate PPT 很经典
标题"传智播客hibernate源码"暗示了这是一个关于Hibernate框架的源代码学习资源,可能包含了对Hibernate框架内部机制的深入解析,以及如何在实际项目中应用Hibernate的相关示例。 描述中的内容重复,进一步确认了这...
传智播客Hibernate课件.ppt
【标题】"01_传智播客hibernate教程_hibernate介绍与动手入门体验" 涉及的是一门关于Hibernate的初学者教程,旨在帮助开发者了解并掌握这一流行的Java对象关系映射(ORM)框架。Hibernate是Java开发中的一个关键工具...
传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt
【传智播客李勇hibernate PPT】是一份由知名教育机构传智播客推出的关于Hibernate框架的培训资料,由讲师李勇精心制作。这份PPT详细讲解了Hibernate在实际开发中的应用,旨在帮助学员深入理解并掌握这一强大的Java...
【标题】"传智播客 Hibernate源码"涵盖了关于Hibernate框架的深度学习和解析,它是一个流行的Java持久层框架,用于简化数据库操作。通过研究源码,开发者可以深入理解其内部工作原理,提升数据库管理效率,并能更好...
1. **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它将Java对象与数据库表进行映射,使开发者可以用面向对象的方式来操作数据库。 2. **Configuration**: Hibernate配置文件(hibernate.cfg.xml)用于设置...
【传智播客李勇hibernate】课程详解了ORM框架Hibernate的核心概念和技术,适合初学者和想要深入了解Hibernate的开发者。以下是对课程内容的详细解析: 1. **引入ORM框架**: - 阻抗不匹配:由于Java是面向对象的...
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...
【标题】"传智播客hibernate ppt"是一份由知名教育机构传智播客推出的关于Hibernate框架的培训教程,由资深讲师李勇主讲。这个PPT内容经典,深受学习者好评,旨在帮助开发者深入理解和掌握Hibernate这一强大的Java...
本资料主要基于“传智播客hibernate源码.rar”进行深入剖析,旨在帮助你理解Hibernate的核心机制,提升你的编程能力。 一、Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常...
《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。该资源包含了四天的学习内容,分别是day01、day02、day03和day04,涵盖了从基础到高级的多个主题。...
传智播客Hibernate课件
在本教程中,我们将深入探讨Hibernate,一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以更加专注于业务逻辑而不是数据库交互。通过传智播客的这个教程,初学者将获得对Hibernate基础的...