深入浅出hibernate摘录

news/2024/7/4 7:14:05

以下摘自深入浅出hibernate:

DAO模式中,数据库访问层实现被隐藏到Data Accessor中,前面说过,DAO模式实际上是两个模式的组合,即Data Accessor和domain Object模式。
何谓Data Accessor?即将数据访问的实现机制加以封装,于数据的使用代码想分离,从外部来看,Data Accessor提供了黑盒式的数据存取接口。

Domain Object则提供了对所面向领域内对象的封装。
从某种意义上,我们可以这么理解:
Data Accessor Object(DAO)=Data + Accessor + domain Object

开闭原则:对扩展开放,对修改封闭


数据库连接不仅仅是在应用服务器与数据库服务器之间建立一个Socket Connection(对于Type 4的jdbc Driver而言),连接建立之后,应用服务器和数据库服务器之间还需要交换若干次数据(验证用户密码,权限等),然后,数据库开始初始化连接会话句柄,记录联机日志,为此连接分配相应的处理进程和系统资源。系统如此忙碌,如果我们只是简单地扔过去两个SQL语句,然后就将此连接抛弃实在可惜,而数据库连接池技术正是为了解决这个问题。

一个完备的数据库连接池实现应该具备更加全面的管理机制,如对连接池更加高效的管理,相关参数的可配置化实现,池中连接的异常状态检测和处理等(如某些数据库会对当前连接进行检测,如果发现有长时间未用连接则主动将其断开,如果出现这样的情况将导致后继数据库访问异常。)

hibernate 3 中对包名进行了修改,net.sf.hibernate=>org.hibernate

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();

 

configuration 实例会根据当前的数据库配置信息,构造SessionFactory实例并返回。SessionFactory 一旦构造完毕,即被赋予特定的配置信息。


也就是说,之后config的任何变更将不会 影响到已经创建的SessionFactory实例。如果需要使用基于改动后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。同样,如果应用中需要访问多个数据库,那么针对每个数据库,应分别为其创建对应的SessionFactory实例。


SessionFactory中保存了对应当前数据库 配置的所有映射关系,同时也负责维护当前的二级缓存和StatementPool。由此可见,SessionFactory的创建过程必然非常复杂,代价高昂,而这也意味着,我们应该在系统设计中充分考虑到SessionFactory的重用策略。由于SessionFactory采取了线程安全的设计,可由多个线程并发调用,大多数情况下,一个应用中针对一个数据库共享一个SessionFactory实例即可。


http://www.niftyadmin.cn/n/2864072.html

相关文章

动态代理模式使用初探

jdk文档: 写道动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。 代理接口 是代理类实现的一个接口。代理实例 是代理类的一个实例。 每个代理实例都有一个关联的调用处理程…

深入浅出hibernate摘录2

以下内容摘自深入浅出hibernate 在编写代码的时候,尽量将POJO的getter/setter方法设定为public,如果设定为private,protected,hibernate将无法对属性的存取进行优化,只能转而采用传统的反射机制进行操作(hi…

区分运行时异常和编译时异常

jianchen 写道当你确信方法的使用者会处理你的方法抛出的异常时,可以使用编译时异常。不处理编译时异常,程序编译不能通过。而运行时异常给了方法的调用者以选择,他可以选择处理,也可以不处理。处理的话,进行catch即可…

hibernate 学习之第六篇

基于主键的一对一关联 Person类和IdCard,一对一映射。 person的属性为:id,name,idCard IdCard的属性为:id,usefulLife,person 由于身份证和人是一对一的,身份证的id和人的id可以相同…

hibernat学习之第七篇

多对多关联关系的映射 在操作和性能方面都不太理想&#xff0c;所以多对多的映射使用较少&#xff0c;实际使用中最好转换成一对多的对象模型&#xff1b;hibernate会为我们创建中间关联表&#xff0c;转换成两个一对多。 核心配置&#xff1a; <set name"ss" t…

Redis——基于主从复制实现高可用(redis-sentinel)

一.sentinel哨兵模式介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具&#xff0c;是Redis 的高可用性解决方案&#xff0c;sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案&#xff0c;sentinel系统可以监视一个或者多个redis …

hibernate学习之第八篇

组件映射 关联的属性是个复杂类型的持久化类&#xff0c;但不是实体即&#xff1a;数据库中没有表与该属性对应&#xff0c;但该类的属性要持久保存的。 对于单表的对象细分&#xff0c;在hibernate中可借助Component节点的定义完成。 何谓Component&#xff1f;从名字上来看&…

hibernate学习之第九篇

hibernate中的集合类型 引入&#xff1a; Hibernate可以持久化以下java集合的实例, 包括java.util.Map, java.util.Set, java.util.SortedMap, java.util.SortedSet, java.util.List, 和任何持久实体或值的数组。类型为java.util.Collection或者java.util.List的属性还可以使用…