深入 Hibernate之一:没有Hibernate的时代

                     深入 Hibernate之一:没有Hibernate的时代

 

JDBC java操作数据库的技术,它的方法上,提出一个由接口组成的框架,具体的实现由相应数据库厂商完成,而对于用户程序而言,只需要在统一的接口上编程。数据库厂商实现的类体系一般称为驱动(Driver). 下面是 JDBC技术示意图:



 

JDBC提供给用户程序的API主要包括:DriverManagerDriverConnectionStatement(PrepareStatementCallableStatement)ResultSet. 各接口的使用如下图所示:


下面重点讨论连接的建立,因为数据库程序影响性能的很大一部分是数据库连接管理。

最初JDBCDriverManager负责创建和管理 Driver实例并获取连接。当用户程序调用DriverManagergetConnection方法传入URL参数时,DriverManager 查看所有的驱动,用第一个找到的支持此URL的驱动去建立连接,并返回,这里建立的连接是驱动建立的物理上的连接。

JDBC2.0 开始,提出了一个 DataSource 类,支持 JDBC2.0 的驱动都必须实现这个类,用户程序可以通过 DataSource 实例建立连接,那么,为什么要增加这个类呢?它与 DriverManager 有什么关系?

第一,   OOP的思想需要有这么一个‘数据源’的概念,java也好,.net 也好都有这么一个概念。

第二,   DataSource支持连接池和事务处理机制,它的底层同样使用了 DriverManager 建立物理连接,不同的是,它实现了一个连接池,程序开始加载时DataSource就维护了一定数量的活跃连接,这样对于用户程序而言,申请一个连接其实是直接从活跃连接拿出一个,释放一个连接其实是放回池里,可以有效提高速度。连接池可以由不同层面实现,DataSource是在驱动层面去实现。(Apache是在WEB服务器层面,Hibernarte自带的连接池是在应用程序层面)

  使用数据源建立连接推荐的方式是JNDI资源引用的方式,即将数据源的配置信息登记在配置文件中,用JNDI做一个命名,用户程序通过JNDI找到数据源,得到连接,而数据源的实例创建不要去管,这样的好处是避免硬编码,以后改数据源配置的时候,只要修改配置文件,不用改程序代码。这种方式如图所示:



 

 

     现在访问数据库一般使用中间件 hibernate,这种情况下,使用的接口又变成了 Hibernate 的接口:Configuration Session-Factory Session Query 等,不需要再用JDBCDriverManager/DataSource Connection Statement ResultSet 等接口了,Hibernate 相当于在用户程序和数据库驱动之间加入了一层(上边DataSource取连接的方式也是加入了一层,不过那一层仅仅是维护连接池的单一功能,而hibernate还有缓存、持久层对象生命周期的维护、对象与库表的映射、HQL语句的处理等等功能),软件设计的一贯做法是通过加多一些层让整体性能更优,比如,加多一层连接池的管理,就可以省去大量建立和销毁物理连接的耗费,hibernate是怎么提高性能的?它底层必然也是调用了JDBC,它这一层通过一些怎样的操作,可以让同样的用户程序调用以更高的性能去实现呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值