Hibernate是一种主流持久化ORM框架Object Relation Mapping对象关系映射,将面向对象映射成面向关系。解决持久化操作,使得程序员可以从编写繁复的JDBC工作中解放出来,专注于业务,提高程序员开发效率;并且具有可靠的移植性。
(MyBatis是一个半自动化的ORM框架)
持久,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中,XML数据文件中等等。Hibernate当中叫做加载。
1.狭义概念:数据存储在物理介质不会丢失
2.广义概念:对数据的CRUD操作都叫持久化
3.加载:Hibernate的概念是数据从数据库加载到session
O-Object,R-Relation,M-Mapping,顾名思义就是对象(JavaBean)关系(关系型数据库)映射。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
public class User implements Serializable{ private Integer id; private String username; private String password; // get,set,构造器... } User user = new User(1,"张三","111");
对象 | 关系数据库 |
---|---|
类名 | 表面 |
类的实例 | 表中的一行记录 |
类的属性 | 表的字段 |
create table USER{ ID NUMBER(4) PRIMARY KEY, USERNAME VARCHAR2(10), PASSWORD VARCHAR2(8) }
代码复杂
用JDBC的API编程问题访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错,程序员需要消耗大量的时间、精力去编写具体的数据库访问SQL语句,还要十分小心其中大量重复的源代码是否有疏漏,并不能集中精力于业务逻辑开发上面。
ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。
数据库连接问题
采用JDBC编程,必须保证各种关系数据之间不能出错,极其痛苦;
ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整,有效的机制。
耦合度
JDBC属于数据访问层,但是使用JDBC编程时,程序员必须知道后台是用上面数据库、有哪些表、各个表有哪些字段、各个字段的类型是什么,表与表之间什么关系,创建了什么索引等等与后台数据库相关的详细信息。相当于软件程序员兼职数据库DBA。
使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和Setter方法,即可实现对后台数据库的操作,程序员不知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。
于是,系统设计人员把ORM搭建好后,把Java对象交给程序员去实现业务逻辑,使持久层与数据库层清晰分界。
追求的是高内聚,低耦合。