一、Hibernate简介
Hibernate是Java领域一款开源的ORM框架。它对JDBC进行了非常轻量级的对象封装,也就说Hibernate最终还是通过JDBC进行数据库的操作。Hibernate在项目中扮演持久化层的角色,将业务逻辑层中的对象数据保存到数据库表中。
二、什么是ORM?
ORM,即Object Relational Mapping。我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的SQL语句,显然这与面向对象的思想格格不入。
编写大量底层SQL语句不好之处:
1.不同数据库使用的SQL语法略有不同。比如:PL/SQL与T-SQL。
2.程序过分依赖SQL对程序的移植与扩展,维护等带来很大的麻烦。
利用ORM描述对象和数据库表之间的映射的元数据,自动把Java应用程序中的对象,持久化到关系型数据库的表中。通过操作Java对象,就可以完成对数据库表的操作
三、第一个Hibernate例子
使用Hibernate之前要准备好Hibernate相关jar包。
创建Hibernate项目主要步骤:
1.创建Hibernate配置文件
2.创建持久化类
3.创建对象-关系映射文件
4.通过Hibernate API编写访问数据库的代码
① 创建项目FirstHibernate,并导入Hibernate相关jar包,mysql驱动jar包.
② 在src下创建Hibernate配置文件hibernate.cfg.xml并随后引入Student.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接配置 -->
<!-- 数据库驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库链接 -->
<property name="connection.url">jdbc:mysql://localhost/student</property>
<!-- 数据库用户 -->
<property name="connection.username">root</property>
<!-- 数据库密码 -->
<property name="connection.password">root</property>
<!-- 改成MySqlDialect(mysql的sql语句) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 打印出所有的sql -->
<property name="show_sql">true</property>
<mapping resource="cn/domain/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
③ 创建持久化类Student.java
package cn.domain;
public class Student {
private int id; //id
private String name; //姓名
private int age; //年龄
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
④ 创建对象-关系映射文件Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.domain.Student" table="student">
<id name="id" column="ID">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
</class>
</hibernate-mapping>
⑤在mysql中创建数据库
create database student;
⑥
通过Hibernate API访问操作数据库并编写测试类Test.java
package cn.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.domain.Student;
public class Test {
public static void main(String[] args) {
Configuration conf = new Configuration().configure();//1、读取配置文件
SessionFactory sf = conf.buildSessionFactory();// 2、创建SessionFactory
Session session = sf.openSession();// 3、打开Session
Transaction tx = null;
try{
tx = session.beginTransaction();// 4、开始一个事务
// 5、持久化操作
Student stu = new Student();
stu.setName("zhangsan");
stu.setAge(20);
session.save(stu);
tx.commit();// 6、 提交事务
}catch(Exception e){
if (null!=tx){tx.rollback();}
e.printStackTrace();
}finally{
session.close();// 7、关闭Session
}
}
}
运行测试用例,会发现控制台打印出下列SQL语句,在数据库中有一个STUDENT表被创建,以及对应的一条学生记录被插入。
Hibernate: select max(ID) from student
Hibernate: insert into student (name, age, ID) values (?, ?, ?)
最终数据库显示结果
四、使用Hibernate的7个步骤
五、Hibernate执行流程
(1) 获取Configuration对象,目的是读取hibernate.cfg.xml配置文件
(2) 获取SessionFactory对象,目的是读取hibernate.cfg.xml中配置的对象-关系配置文件
(3) 获取Session对象,相当于获取一个Connection对象,可以持久化操作,需要先开启事务
(4) 提交事务,完成持久化操作,然后关闭session