hibernate培训讲座.ppt
《hibernate培训讲座.ppt》由会员分享,可在线阅读,更多相关《hibernate培训讲座.ppt(86页珍藏版)》请在三一办公上搜索。
1、对象/关系映射Hibernate,学员要求:熟悉Java、SQL、JDBC,掌握面向对象的开发方法,并有实际项目开发经验课程目标:理解O/R Mapping原理,掌握Hibernate开发的相关知识,并能使用Hibernate进行实际项目开发,作者:赵青,目 录,持久层的概念及必要性hibernate框架及核心类介绍hibernate进行持久化的一个例子hibernate如何解决对象和模型的不匹配对象的持久性生命周期对目前项目的进一步封装和思考,数据的持久化,持久化持久层持久化如何演变为持久层?是不是只要在应用中用了数据库就天然具备了“持久层”了呢?未必!,只有持久化而没有持久层,网上商城购物
2、结算的例子,没有持久层的特征,业务逻辑和数据库访问逻辑混杂在一起,没有清晰的界限,干扰了我们的视线,难于理解。业务规则的变动必然影响到数据库的访问逻辑,反之亦然,笨重,难于维护。好处是:简单方便、开发迅速,不需要复杂的设计,比较适合于业务简单的应用。,引入持久层后的系统架构,改良后的设计,引入DAO模式,DAO=Data Accessor Object 数据访问对象数据库访问的实现细节被隐藏到DAO里面。Domain Object则提供了面向领域的对象,封装了具体的业务规则。,引入DAO模式的优点,业务层无需关心具体的select、insert等操作,使得业务业务逻辑实现更加清晰,也使得开发人
3、员的专业划分成为可能,业务人员专注于业务逻辑编码。业务层和持久层可以彼此独立的变化,比如:仅仅替换数据访问层的实现,可以将系统部署在不同的数据库平台上。,改良后的代码,观察DAO的实现细节,问题的症状-用JDBC实现持久层,为域中的每个类手工编写持续性代码的工作量繁重。这些代码基本上都是“支撑性”代码,单调、机械、乏味、不优雅。特别是需要支持多种SQL方言时,对于持久层的开发者是个大难题。,新需求的产生-通用的持久层框架,将编写支撑性代码的工作量降到最低。编码是有趣的工作,但是敲键盘决不有趣。凡是无趣的工作都交给机器去完成。对象模型和关系模型的映射(ORM),编码时只需要关心对象,而无需再纠缠
4、于JDBC ResultSet中的字段。更好的移植性,只需要简单的修改配置参数,即可实现底层数据库的切换。,目 录,持久层的概念及必要性hibernate框架及核心类介绍hibernate进行持久化的一个例子hibernate如何解决对象和模型的不匹配对象的持久性生命周期对目前项目的进一步封装和思考,Hibernate在应用中的位置,基于B/S的典型三层架构,开发如何分层?业务逻辑层和持久化层绝不要依赖于展现层。持久层对于业务层是透明的,持久层和业务层的变化是彼此独立的。,Hibernate核心架构,Configuration,Configuration 类负责管理Hibernate 的配置信
5、息。它包括如下内容:Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。Hibernate映射文件(*.hbm.xml)。Configuration cfg=new Configuration();,SessionFactory,会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。会话工厂在应用初始化时被创建,是一个重量级的类,它在多个应用线程间进行被共享,通常情况下,整个应用只有唯一的一个会话工厂,然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。应用程序从会话工厂
6、里获得Session(会话)实例。SessionFactory sessionFactory=cfg.buildSessionFactory();,Session,Session也称为持久化管理器,因为它是与持久化有关的操作接口。Session代表与数据库之间的一次操作。Session通过SessionFactory打开,在所有的工作完成后,需要关闭。会话并不是线程安全的因此应该被设计为每次只能在一个线程中使用。Session session=sessionFactory.openSession();,Transaction(事务),Transaction将应用代码从底层的事务实现中抽象出来可
7、能是一个JDBC事务或一个JTA事务,这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)。Transaction tx=session.beginTransaction();,目 录,持久层的概念及必要性hibernate框架及核心类介绍hibernate进行持久化的一个例子hibernate如何解决对象和模型的不匹配对象的持久性生命周期对目前项目的进一步封装和思考,对象关系数据库的基本映射,public class User private St
8、ring name;private String password;private List address;create table tbl_user(name varchar(255)not null,password varchar(255),.primary key(name),一个简单例子,Hibernate基本数据类型,实例前的准备项目目录结构,insert,Department dep=new Department();dep.setName(“软件开发部”);Session s=sessionFactory.openSession();Transaction tx=s.begi
9、nTransaction();s.save(dep);mit();s.close();,Load,Session s=sessionFactory.openSession();Department dep=(Department)s.get(Department.class,depID);s.close();,update,Session s=sessionFactory.openSession();Transaction tx=s.beginTransaction();Department dep=(Department)s.get(Department.class,depID);dep.s
10、etName(ggggg);s.update(dep);mit();s.close();,delete,Session s=sessionFactory.openSession();Transaction tx=s.beginTransaction();Department dep=(Department)s.get(Department.class,depID);s.delete(dep);mit();s.close();,使用Ant构建开发过程,Another Neat Tool 另一个整洁的工具。ANT是一个基于Java的自动化脚本引擎,脚本格式为XML。每个ant脚本(缺省叫build
11、.xml)中设置了一系列任务(target),而多个任务之间往往又包含了一定的依赖关系。Ant可以简化项目的编译、测试、文档、部署等日常工作的手工工作量。,进一步减少编码量-XDoclet,XDoclet的灵感来自JavaDoc,JavaDoc把文档写在代码里,简化了文档与程序同步问题。为web、ejb、struts、webwork、hibernate、jdo、jmx等等生成描述文件、源码等。现在的XDoclet已经发展成了一个全功能的、面向属性的代码生成框架。(Attribute-Oriented Programming),目 录,持久层的概念及必要性hibernate框架及核心类介绍hib
12、ernate进行持久化的一个例子hibernate如何解决对象和模型的不匹配对象的持久性生命周期对目前项目的进一步封装和思考,Hibernate面临的挑战:对象关系模型的不匹配(Paradigm Mismatch),粒度问题。(granularity)子类型问题。(subtypes)同一性问题。(identity)关联问题。(associations)对象导航问题。(navigation),Identity同一性问题,对象的同一性(identity):=是jvm定义的概念。对象的相等性(equality):java API定义的方法。实现equals()方法。数据库对象的同一性(identit
13、y):指向同一个表的同一个记录。,Database identity with Hibernate,为持久化类增加一个identifier property。Identifier的值等于数据库中该记录的主键值,对于业务而言没有实际意义,一般该属性命名为id。通常设置getID()为public,因为通过id查找对象会很方便,而setID()设为private,其值由hibernate产生,id不可以改变。a=b;a.equals(b);a.getID().equals(b.getID()。,主键的选择,natural keys:从业务意义上寻找一个或者多个属性来区分唯一性,和是否是自动产生的无
14、关。业务逻辑和数据逻辑位于不同的层面,应该有清晰的界定,不要把业务逻辑牵扯到数据逻辑中,否则业务逻辑的变化将对数据逻辑产生根本的影响。synthetic identifiers(surrogate keys):surrogate keys 没有业务含义,它是由数据库或者应用产生的。composite keys:多个natural keys联合组成的primary key。历史的遗留系统无法避免。,identifier generator主键生成策略,native:hibernate将根据底层数据库的方言(Dialect)来选择,SQLServer用identity,Oracle用sequenc
15、e等。,increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。应用于single-server的环境下特别高效,如果被部署成多个应用的环境,会造成主键重复错误。uuid.hex:用一个128-bit的UUID算法生成字符串类型的标识符。使用了IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。用该算法生成的id可以确保在一个网络中唯一。适用于多应用的环境,即使在多实例并发的环境中也可以确保唯一。并且解决了多个数据库的部分数据合并。,granularity粒度
16、问题,fine-grained object model 适当的细粒度对象模型:所谓细粒度模型,就是将原本业务模型中的对象加以细分,从而得到更加精细的对象模型。,细粒度模型的设计,该设计体现了一个“合成”的关系(composition):即整体和部分的关系。部分不可独立存在而依赖于整体。,sendMessage(),这种细粒度的设计更好的体现了类的内聚性,体现了对象设计的职责分配原则:将职责分配给拥有履行一个职责所必需信息的类。,数据库设计的思考,这样的设计是不必要的,并且存在性能问题。,Entity and Component,在Java中不存在实体类和component类的区别,所有类的含
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- hibernate 培训 讲座
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5433139.html