Hibernate入门简介

正如Hibernate的口号所称,一切皆数据,所有的项目都可以转换到数据流的形式,而功能,是数据的不同的表达

1  什么是Hibernate

官网上所描述的Hibernate是一个惯用的Java和关系型数据库的连接固件。而Hibernate本身,是一种实体(Object)与关系(Rational)的映射框架,使得开发人员不必从面向对象的思考模式转入关系型数据库开发的思考模式,也能开发与数据库相关功能。

这里有一点个人的思考。Nosql确实是一种趋势,由于关系型数据库应用非常广泛,但是已经不那么开发友好了,比如想做好安全需要写大量存储过程。而Hibernate是当下没有具有统治力的新型数据库出现阶段最好的开发框架。它能够将数据库设计与实现更加模块化,Java开发完全不需要写sql。

Hibernate的应用场景图大概如下:


2  Hibernate架构与简介

Hibernate的架构图如下所示:


这是一个简单的架构图,图中显示出来Hibernate最重要的两个组成部分:Session和SessionFactory。Session主要负责Persistent Object与数据库的交互操作,而SessionFactory则是Session的工厂类,一般一个JDBC只用一个工厂类即可,多个数据库连接可以用多个管理。一个工厂类负责一个数据库连接,同时负责新建Session。Session的操作,更新是openSession,再getCurrentSession,增删查则是getCurrentSession。

Hibernate一个复杂并更合理的架构图如下:


从图中可以看到,JDBC处于更加底层一些的位置,实际上JDBC在Hibernate的配置文件里写好就行,当然前提是已经下载了对应的JDBC的jar包。

而Hibernate除了有Session之外,还有事务,这里的事务可以类比于数据库的事务,只是抽象出来放到了Hibernate的框架里,能够在Nosql的状态下实现事务操作。

再往上一些的Persistent Object 实际上是Hibernate框架实现的与数据库表(或者视图)的对应的实体类。而且,可以在Hibernate的映射文件上写出数据库表--Persistent Object映射关系。

3  Hibernate的配置文件

Hibernate最为繁琐的地方是写配置文件,通常是一个properties文件,文件格式是XML,并且需要考虑好加载顺序,通常需要在类似spring配置文件最开始处开始加载。

具体写法有很多,一般也不需要手写很多代码,可以复制并修改对应位置就好。

一般来讲,先写JDBC连接,再写Hibernate连接,然后是memcached等缓冲,最后是Hibernate本身支持的c3p0连接池。

当然,Hibernate本身提供了缓存,另外用缓存是为了提升项目的吞吐能力。

4  Hibernate的映射文件

实际上,不写映射文件是可以的,Hibernate本身提供了Persistent Object 的Entity类到表的交互,即annotation的形式,能够在创建或修改Persistent Object 之后,不用理会数据库,数据库中对应表就能做出相应修改。

但是,更多的情况下,项目的后台和Java层不是同一个开发人员,一般关闭Hibernate对数据库的模式对比和修改功能,后台人员实现好数据库,Java开发者写好对应的Persistent Object 的Entity类,不再对Entity做修改,只写数据的处理。

即,Hibernate本身的流程是:数据库搭建好、Hibernate对应的Entity写好,Hibernate的配置文件写好,再加上可有可无的映射文件(annotation形式不需要映射),就能够跑起来了。

5  Hibernate一些已知技巧

当不用sql语言的时候,利用Hibernate的Criteria增加限制条件时,能够较好地返回结果,能够兼容各种数据库,但是并不一定比执行sql做查询快。

Hibernate可以直接提交sql语言,但是适配性很差。

Hibernate的二级缓存分别在Session和Session Factory实现的,但是并不一定能满足需求。

尽量用Map或者List形式接受Hibernate的返回结果能够较好地避免数据类型的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值