Hibernate简介
Hibernate是一个Java对象关系映射(ORM)框架,可以让你将普通对象映射到数据库表中。
Hibernate的主要目标是减轻开发者与数据持久性相关的典型杂务。这个ORM框架是开源的、轻量级的。
Hibernate架构
Hibernate有一个分层架构,允许用户在不了解核心API的情况下进行操作。
Hibernate利用数据库和其他可配置信息来提供独特的功能。
Hibernate的架构分为四个主要层次。
- Hibernate框架。
- 反手API。
- Java应用层。
- 数据库层。
Hibernate的架构如下图所示。

下图强调了Hibernate的核心类。

架构组件
应用层的类对象在本节中进行了总结。
-
SessionFactory对象:SessionFactory是ConnectionProvider的一个会话和客户端工厂。它将数据保存在二级缓存中。
-
会话对象:会话对象作为数据库和应用程序的数据层之间的链接。它是一个很小的对象,包裹着JDBC连接。它充当了事务、查询以及其他标准的工厂。
-
交易对象:事务接口提供数据管理所需的不同功能或方法。
-
ConnectionProvider:它是一个JDBC连接的工厂。换句话说,它隐藏了应用程序与数据源的连接。
-
TransactionFactory:这是一个可选的工厂,用于不同的事务。
安装过程
Hibernate在Eclipse IDE上运行良好。
在Eclipse IDE中下载和安装Hibernate的基本步骤如下。
第1步:从Eclipse IDE的菜单栏中选择Help "Eclipse Marketplace 。
第2步:在搜索框中输入JBoss Tool ,然后点击Go 。
第3步:选择最新版本的JBoss Tools ,然后点击Install 。

第4步:从marked tools ,选择并下载Hibernate工具。
然后点击confirm ,设置好休眠工具。

第5步:接受许可协议中的条款,然后点击Finish 按钮。
第6步:重新启动Eclipse IDE以确保所有的变化都得到反映。
第7步:为了验证Hibernate工具是否正确安装,点击File "New "Others ,然后搜索Hibernate 。

Hibernate的优势
Hibernate框架使用起来很简单。它的映射程序只需要几行代码就可以实现。
以下是Hibernate的一些优势。
对象关系映射(ORM)
ORM可以方便地解决应用程序的面向对象的类和关系数据库之间的数据不匹配问题。Hibernate的灵活性和力量也通过这一功能得到了加强。
数据库的独立性
Hibernate是数据库无关的。这意味着它可以连接到任何数据库,包括MySQL、Oracle、DB2和Sybase。
只需改变config 文件中的 "数据库方言 "变量,就可以使数据库具有可移植性。
快速的性能
Hibernate使用缓存来保持内存中的项目。这减少了它们从数据库中被访问的次数。
Hibernate查询语言
Hibernate支持HQL,这是一种复杂的查询语言。这种语言比SQL更有效,也更面向对象。
继承、多态、关联等功能,以及其他面向对象的概念,都可以用HQL实现。
持久性和透明度
Hibernate确保软件对象和数据库表自动连接。它还消除了大量的模板代码。
从长远来看,这些功能可以减少开发时间和成本。
开放源代码
Hibernate是一个开源的程序,有很多优点。这个轻量级框架的源代码可以免费下载。
可扩展性
Hibernate是一个可扩展的数据库。它可以适应任何环境,也可以容纳大量的用户。
Hibernate简单易学
对于初学者来说,Hibernate是一个易于使用的框架。它很容易理解和实现。它通过自动处理数据库更新来减少开发者的工作量。
Hibernate的劣势
尽管Hibernate提供了许多优点,但它也有某些缺点。
首先,与JDB相比,Hibernate的速度较慢。这是因为它在运行时创建了大量的SQL查询。
其次,Hibernate不支持多次插入。此外,一些JDBC支持的查询不被Hibernate所允许。
第三,Hibernate不适合于小型项目。这种应用程序可能只有很少的表,因此采用整个Hibernate框架是相当耗时的。
当涉及到批处理时,Hibernate是相当差的。因此,在批量处理时,最好坚持使用JDBC。
Hibernate的例子
下面是一个使用Hibernate的双向映射的例子。
//This is customer.java class
import java.io.Serializable;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import org.hibernate.Session; //importing Hibernate
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.hibernate.SessionFactory;
import java.util.List;
import org.hibernate.cfg.Configuration;
import com.netsurfingzone.entity.Location;
import com.netsurfingzone.entity.Customer;
@Entity
public class customer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)//to autogenerate the primary key
private Long id;
@Column(name = "customer_name") //Column in the database
private String customer_name;
@Column(name = "custmer_id") //Column in the database
private String custmer_id;
@Column(name = "customer_email") //Column in the database
private customer_email;
@OneToOne(cascade = CascadeType.ALL) // Creating a one-to-one relationship
@JoinColumn(name = "location_id", referencedColumnName = "id") // Joining the two tables
private Location location;
}
//This is location.java class
//import the same packages as the one imported in customer.java class
@Entity
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) //Generating an ID automatically
private Long id;
@Column(name = "state") //Column in the database
private String state;
@Column(name = "state_number") //Column in the database
private String state_number;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "location") // A one-to-one relationship
private Customer customer;
}
//main class
public class Main {
public static void main(String[] args) {
SessionFactory factory = null; //Initializing the sessionFactory to null
Session session = null; //Initializing the session to null
Configuration configuration = new Configuration().configure();
try { // Adding new values to database
factory = configuration.buildSessionFactory();
session = factory.openSession();
Transaction k = session.beginTransaction(); // Starting the transaction
Customer customer1 = new Customer(); // Creating a new object and adding values
customer1.setCustomerName("Kelvin");
customer1.setCustomerId("56");
customer1.setCustomerEmail("kelvin@gmail.com");
Customer customer2 = new Customer(); // Creating a new object and adding values
customer2.setCustomerName("Joy");
customer2.setCustomerId("26");
customer2.setCustomerEmail("joy@gmail.com");
Location location1 = new Location(); // Creating a new object and adding values
location1.setState("Turs");
location1.setStateNumber(51");
Location location2 = new Location();
location2.setState("Rouds");
location2.setStateNumber(45");
customer1.setLocation(location1); //Joining tables
customer2.setLocation(location2);
session.save(customer1); //Saves the customer details
session.save(customer2);
k.commit();//commit the transaction
} catch (Exception e) {
e.printStackTrace(); //Message is printed incase of an error
} finally {
//Closing the session and sessionFactory
factory.close();
session.close();
}
}
}
在Customer 类中,我们有customer_id,customer_name, 和customer_email 变量。而在Location 类中,有state 和state_number ,这些都是私有变量。
然后我们在Main 类中为这两个类 (Customer 和Location) 创建了会话对象。我们还使用@JoinColumn() 注释来连接这两列。
总结
Hibernate是一种ORM技术,用于将数据库结构实时地映射到Java对象。
使用Hibernate这个持久化的框架,可以让开发人员只专注于开发业务逻辑代码。