1.1. 什么是Hibernate
Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架。 |
开源框架,属于jboss公司产品,时间久远。可以不写SQL就可以操作数据库。
n 轻量级:使用方便(比Apache DbUtils 复杂很多倍)这个概念是个相对概念。(主要是对比EJB来说的,ejb是重量级的(内建组件很多,启动很慢,东西很多))
n 持久层: JavaEE分为表现层、业务层(service)、持久层(dao)
Struts2 是一个表现层框架
Hibernate 是一个持久层框架,底层就是封装了JDBC,也就说,HIbernate最终进入数据库执行的还是sql语句(操作数据库)--ssh
n 关系数据库: mysql、oracle 都是关系型数据库(主流数据库)
最近 NOSQL 非关系型数据库开始流行(mongodb、 redis)
n ORM :Object Relational Mapping对象关系映射(一种思想)
Mysql--关系型数据库
将数据表的关系,映射为类和对象之间关系:
数据库(关系型) | Java(面向对象的编程语言) |
表 | 类 |
表的字段 | 类的属性 |
表的一行数据 | 类的一个实例对象 |
ORM好处: java程序员只需要在程序中操作对象,因为存在映射关系,自动生成SQL语句。不需要你写sql语句,就可以操作数据库。
允许你以面向对象的方式直接操作sql数据库。
Java中常见的ORM实现(持久层框架):
l JPA( Java Persistence API).Sun公司的规范,JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系(只有接口规范)
l Hibernate 最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL(全自动)
l MyBatis 本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架(半自动)
l 其他的持久层框架(非ORM):Apache DBUtils 、Spring JDBCTemplate
【提示】
Jpa是一种规范,里面只有接口,而Hibernate是它的一种实现,那么hibernate必然去实现了jpa中的接口。
使用Jpa的一个好处是,可以更换实现而不必改动太多代码。Hibernate框架是基于JPA接口的实现,但又对其做了一些补充,因此,可以理解为Hibernate中有两套规范(JPA和自己的,事实上只是补充)。
1.1. Hibernate的优缺点
优点:
n Hibernate完全是ORM,自动生成sql语句,完全不需要懂sql,极大简化jdbc的操作。 n 具有很强的反射和代理机制,生成代理对象,(可以代码增强)在数据获取可以进行延迟抓取、缓存的使用、达到优化的目的。 |
缺点:
n hibernate完全orm,自动生成sql,所以很多企业用户对hibernate性能存在质疑(任何持久层框架都不如jdbc速度快,开发效率和性能的平衡)。在hibernate框架中,提供了很多优化手段。 |
antlr-2.7.6.jar | 一个语言转换工具,Hibernate利用它实现HQL到SQL的转换 |
commons-collections-3.1.jar | Collections Apache的工具集,用来增强Java对集合的处理能力 |
dom4j-1.6.1.jar | Xml解析器 |
hibernate3.jar | 核心包 |
hibernate-jpa-2.0-api-1.0.1.Final.jar | Jpa接口开发包 |
javassist-3.12.0.GA.jar | 代理类生成工具包 |
jta-1.1.jar | 标准的JAVA事务处理接口(跨数据库) |
slf4j-api-1.6.1.jar | 简单日志对象包 |
slf4j-log4j12-1.7.2.jar | 连接包 |
log4j-1.2.16.jar | Log4j日志实现包 |
mysql-connector-java-5.0.8-bin.jar | mysql驱动包 |
1. Hibernate核心API
1.1. 概述
通过该体系结构图,可以看到Hibernate的核心API接口,它们之间的关系:
Hibernate通过Configuration来读取核心配置文件,SessionFactory缓存配置并用来提供Session,而Session是用来操作PO的,让Hibernate生成crud的sql语句,在操作过程中使用Transaction来管理事务。Query和Criteria是Hibernate提供的查询的两种不同方式。
下面详解:
1.1. Query查询接口
作用:Query对象主要用于执行查询操作。
Query接口用于接收HQL语句执行查询。
HQL是Hibernate Query Language缩写,语法很像SQL语法,但是完全面向对象的。
Hibernate为照顾和兼容原生的SQL,Hibernate提供了Query的子接口SqlQuery来执行SQL语句,用法和query接口的一样。
Hibernate核心API:
n Configuration核心配置对象,用来加载Hibernate配置文件,用来创建会话工厂
n SessionFactory 会话工厂,用来创建Hibernate会话Session,缓存了一些配置。(连接池等)
n Session 会话,相当于一个数据库连接(持久了一个connection),进行数据库表CRUD操作,它是hibernate的运作核心。
n Transaction 事务,对操作进行事务管理
n Query查询接口,接收HQL语句,子接口SQLQuery接受sql语句
n Criteria条件查询(QBC:query by Criteria),完全面向对象方式进行多条件的组合查询,无需关心sql的写法。