Hibernate是一个高性能的对象/关系型持久化存储和查询的服务。主要完成Java类到数据库表的映射、Java类字段到数据表字段的映射以及Java类字段类型到数据库表字段类型的映射。也提供了数据查询和检索的服务。
ORM概述
什么是JDBC
JDBC代表Java Database Connectivity,它提供了一组Java API 来访问关系型数据库的Java应用程序。这些Java API 可以使Java应用程序执行SQL语句,能够与任何符合SQL规范的数据库进行交互。
JDBC提供了一个灵活的框架来编写操作数据库的独立的应用程序,该应用程序具有Java的跨平台特性,能够与不同的DBMS(数据库管理系统)进行交互
JDBC的优点和缺点
JDBC的优点 | JDBC的缺点 |
---|---|
干净整洁的SQL处理 | 大项目中使用很复杂 |
大数据下有良好的性能 | 很多的编程成本 |
对于小应用特别好 | 没有封装 |
易学的简易语法 | 难以实现MVC概念 |
速度比较快 | 查询需要指定DBMS |
为什么要使用关系映射(ORM)?
我们工作在一个面向对象的系统中时,存在一个对象模型和关系数据库不匹配的问题。RDBMS(关系数据库管理系统)使用表格的形式存储数据,然而像Java这样的面向对象的语言表示一个对象关联图。例如一个带有构造函数和公有方法的Java类:
public class Employee{
private Integer id;
private String name;
private int salary;
public Employee(){
}
public Employee(String name, int salary){
this.name = name;
this.salary = salary;
}
//setter和getter
}
现在考虑将上面的对象存储和索引到对应的RDBMS表格中
create table employee(
id int not null auto_increment primary key,
name varchar(100) not null,
salary int default null
);
目前有以下两个问题
- 第一、在开发应用程序的工程中需要修改数据库的设计该怎么办?
- 第二、在关系型数据库中存储和索引对象时面临的不匹配问题…
不匹配 | 描述 |
---|---|
粒度 | 有时会有一个对象模型,该模型的数量比数据库中关联的表的数量多 |
继承 | 关系型数据库中无法定义在面向对象语言中本来就有的继承 |
关联 | 面向对象的语言使用对象引用来表示关联,数据库使用外键表示关联 |
导航 | 在Java和数据库中访问数据的方式完全不同 |
身份 | 在数据库中使用主键来确定一条记录,在Java中定义对象判等(a==b)对象值判等(a.equals(b)) |
object-relational mapping(ORM)就是来解决上述不匹配问题的!
什么是ORM
ORM是一种方便在关系型数据库和面向对象编程语言中转换书籍的技术。一个ORM系统相比于普通的JDBC有如下优点:
序号 | 优点 |
---|---|
1 | 使用业务代码访问对象而不是数据库的表 |
2 | 从面向对象逻辑中隐藏SQL查询的细节 |
3 | 基于JDBC的 “ under the hood” |
4 | 没有必要去处理数据库实现 |
5 | 实现是基于业务的概念而不是数据库的结构 |
6 | 事务管理和键的自动实现 |
7 | 应用程序的快速开发 |
一个ORM解决方案有一下四个实体组成:
序号 | 优点 |
---|---|
1 | 一个API在持久类的基础上实现基本的crud |
2 | 一个语言或API来指定应用类的属性和查询 |
3 | 一个可配置的服务用来制定映射元数据 |
4 | 一个技术和事务对象交互执行dirty checking,lazy association fethcing 和其他优化功能 |
JavaORM框架
Java中有几个持久化的框架和ORM选项:
- Hibernate
- Mybatis
- Toplink
- Spring Dao
- ….