在Hibernate中直接操作JDBC接口 - 编程入门网
和查阅 Hibernate 的框架源代码及参考文档 ,我们发现,Hibernate 的 Session 会话是进行持久化的基础,所有的持久化操作都是在 Session 的基 础上进行的,在实现上它是和 JDBC 中的 connection 数据库连接绑定的,也就是说,Hibernate 的会话 域基于一个实际的 connection 类实例,二者之间的关系如下图所示:
图 2. Hibernate Session 机制示意图 由上可以看到, Hibernate 中的 session 是单线程的,代表了一次会话的过程。实际上是把一个 JDBC Connection 打包 了,每一个 Session 实例和一个数据库事务绑定。其生命周期是与与之关联的 connection 实例的生命 周期一致的。 在Hibernate中直接操作JDBC接口(6)时间:2011-08-11 IBM 唐清原具体解决方案 由上面的 Hibernate 的 Session 机制我们意识到,只要能获 取到 Hibernate 当前会话中的 Connection,则获得了 JDBC 的底层数据库连接实例,剩下就都是 JDBC 的范畴了。再查阅 Hibernate 的 API,发现 HibernateTemplate 类中 SessionFactory 成员的 getCurrentSession() 方法即可获得 Hibernate 环境下的当前活动的 Session 会话,而 Hibernate 中 Session 实例的 connection() 方法即可获得该会话中绑定的 Connection 数据库连接实例。 问 题迎刃而解了,既然可以操作 Connection 实例,那与之关联的 Statement、ResultSet 等基本 JDBC 类 均在我们控制范围中了,我们采用接口模式设计一个轻量级解决方案,使其在保持原 Hibernate 的增删 改操作方式前提下灵活提供操作 JDBC 的接口。设计类图如下图所示: 图 3. 解决方案设计类示 意图 设计中, AbstractHibernateDao 类作为 DAO 操作的基本类,保留原有 Hibenrate 框架下的新增,修改,删除等 API。BaseHibernateDao 类继承 AbstractHibernateDao 类,在此类中增加了直接操作 JDBC 的接口。设 计 getConnection 方法获取 JDBC 的数据库连接实例,设计 getObjectsBySql 方法作为对外的主要接口 ,该方法调用 fetchObjects 方法,这是具体的数据库记录到领域对象的转换操作,需要使用者 override 该方法以完成自有领域对象的填充细节。 在Hibernate中直接操作JDBC接口(7)时间:2011-08-11 IBM 唐清原实际实现的类代码如下所示: 清单 6. 解决方案实现代码
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |