Hibernate框架简介
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
为什么要用hibernate?
直接使用JDBC操作数据库的步骤很繁琐
JDBC操作的是关系型数据库
我们用JAVA开发程序,则使用面向对象的思想
Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口
Hibernate优势:
优秀的Java 持久化层解决方案
主流的对象—关系映射工具
简化了JDBC 繁琐的编码
将数据库的连接信息都存放在配置文件
最新版本hibernate5
Hibernate3和hibernate4的区别:
Hibernate3中推荐使用sessionFactory.openSession();
Hiberante4中推荐使用sessionFactory.getCurrentSession()开启session
hibernate3(openSession())中的查询方法,可以不用事物管理
Hiberante4(getCurrentSession())中的查询方法,必须加入事物管理(Transaction)
说到Hibernate不得不说一下ORM思想(对象关系映射)
ORM对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
面向对象的概念 | 面向关系的概念 |
类 | 表 |
属性 | 列(表中的字段) |
对象 | 行(表中的一条记录) |
第一个hibernate程序
开发步骤
1. 创建项目,部署jar包
新建一个java project(或web project)
然后把hibernate框架压缩包中的hibernate-release-4.3.11.Final\lib\required目录下的所有jar包加载到项目当中,把数据库的连接驱动jar包部署在项目当中
加载后如下:
2. 编写hibernate配置文件
在src目录下新建hibernate.cfg.xml(所在目录,文件名字不可变动)
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE hibernate-configurationPUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库url -->
<propertyname="hibernate.connection.url">jdbc:mysql://user</property>
<!--数据库用户名 -->
<propertyname="connection.username">root</property>
<!--数据库密码 -->
<propertyname="connection.password">root</property>
<!--数据库驱动 -->
<propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--hibernate管理session的模式 -->
<propertyname="current_session_context_class">thread</property>
<!--方言 -->
<propertyname="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<mappingfile="src/base/vo/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3 编写持久化类(vo/pojo)
新建类base/vo/User.java
public classUser {
private int userid;
private String name; //为了加以区分,该属性和表的列名不一致
private String psw;
private String realname;
private String phone;
private String idcard;
//省略get/set方法
}
4. 创建映射文件
新建base/vo/user.hbm.xml文件完成类和数据库的映射
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="base.vo.User"table="sys_user">
<!-- 针对id映射 -->
<idname="userid"column="userid">
<generator class="increment"></generator>
</id>
<!-- 针对普通字段映射 -->
<!-- name属性指定类对象的属性名称 column属性指定表中的列名 type字段类型 -->
<propertyname="name"column="uname"type="string"></property>
<propertyname="psw"column="psw"type="string"></property>
<propertyname="realname"column="realname"type="string"></property>
<propertyname="phone"column="phone"type="string"></property>
<propertyname="idcard"column="idcard"type="string"></property>
</class>
</hibernate-mapping>
5. 创建测试实例
新建base/HibernateTest.java测试类实现新增数据功能
public class HibernateTest {
//新增用户
public void add(User u){
Configuration cfg=new Configuration().configure();
StandardServiceRegistryssr=newStandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
SessionFactorysf=cfg.buildSessionFactory(ssr);
//创建session对象
Sessionsession=sf.getCurrentSession();
//开启事务
session.beginTransaction();
session.save(u);
session.getTransaction().commit();
}
public static void main(String[] args) {
User u=new User();
u.setIdcard("qqq");
u.setPhone("www");
u.setPsw("123");
u.setName("你你你你你你你你你");
HibernateTest ht=new HibernateTest();
ht.add(u);
}
}
Hibernate的核心组件
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
a)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
b)SessionFactory接口:产生Session实例工厂。
c)Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
d)Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
e)Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
持久化对象(Persistent Object)
持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。JavaBeans在Hibernate中存在三种状态:
1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。
2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)
3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached Object),可以被应用程序的任何层自由使用,例如可以做与表示层打交道的数据舆对象(Data Transfer Object)。
Hibernate的运行过程
Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。