1.为什么要学习hibernate?
根据与JDBC的对比学习,了解到JDBC开发效率低、代码冗余、重复性工作多,而hibernate简化了JDBC 繁琐的编码, 对JDBC访问数据库的代码做了封装,提高了开发效率。
Hibernate 是一个优秀的Java 持久化层解决方案;是当今主流的对象—关系映射(ORM)工具;
Hibernate 将数据库的连接信息都存放在配置文件中。
2. Hibernate是什么?
Hibernate是一种ORM工具,是连接java应用程序和关系数据库的中间件,这是对JDBC的封装,主要负责java对象的持久化
3.在哪里会用到hibernate?
4. Hibernate怎么用?
1). 前期准备?
a. 下载需要的jar包
Hibernate 的官方主页是www.hibernate.org
推荐下载hibernate-distribution-3.3.2.GA-dist.zip
详细下载步骤参看《hibernate的下载步骤图.xls》
b. Hibernate包目录结构
c. 部署jar包
hibernate3.jar
required 目录下的jar 包
Oracle 数据库驱动jar包
d. 编写配置文件、映射文件及POJO类
配置文件与映射文件的使用要求:会改写源码中提供的配置文件与映射文件。
可到下面所示结构中去查找文件拷贝到自己的项目中并修改
1) hibernate-distribution-3.3.2.GA\project\tutorials\web\src\main\resources
2) ….\org\hibernate\tutorial\domain
可以使用提供的模板文件, 自己根据需要对应的做修改即可。
hibernate.hbm.xml文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 指定不同类型的数据库 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<!-- 数据库连接的url -->
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<!-- 用户名 -->
<property name="connection.username">test</property>
<!-- 密码 -->
<property name="connection.password">test</property>
<!-- 数据库驱动 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<!-- 在控制台显示操作的sql语句 -->
<property name="show_sql">true</property>
<!-- 配置映射文件 -->
<mapping resource="bean/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
创建POJO类
public class Type implements java.io.Serializable {
// Fields
private Integer id = 0;
private String name = "";
// Constructors
public Type() {
}
省略 setter和getter
}
2). 使用Hibernate实现对数据库增、删、改操作的步骤?
Configuration conf = null;
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
//1. 读取并解析配置文件
conf = new Configuration().configure();
//2. 读取并解析映射信息,创建SessionFactory
sessionFactory = conf.buildSessionFactory();
//3. 打开Session
session = sessionFactory.openSession();
//4. 开始一个事务(增删改操作必须,查询操作可选)
tx = session.beginTransaction();
//5. 数据库操作
session.save(user);
//6. 提交事务
tx.commit();
} catch (HibernateException e) {
//6. 回滚事务
tx.rollback();
e.printStackTrace();
} finally{
//7. 关闭session, sessionFactory
session.close();
sessionFactory.close();
}
3). 重要术语的解释
ORM:Object Relational Mapping 对象关系的映射
POJO:plain ordinary java object 普通的JAVA对象
4). Hibernate的6个核心接口:
分别为:Configuration、SessionFactory、Session、Transaction、Query、Criteria。
这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。 下面对这6个核心接口分别加以介绍:
a) Configuration接口:
Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中, Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
b) SessionFactory接口:
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
c) Session接口:
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时Hibernate的session不同于JSP应用中的HttpSession。这里当用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
d) Transaction接口:
Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
e) Query和Criteria接口:
Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
5). 根据POJO类和映射文件自动生成数据库表:
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class TestExport {
public static void main(String[] args) {
//读取配置文件
Configuration config = new Configuration().configure();
SchemaExport exp = new SchemaExport(config);
//第一参数为true:就是把DDL语句输出到控制台
//第二个参数为true:根据持久化类和映射文件先持行删除再执行创建操作
exp.create(true, true);
}
}
6). get 和 load 方法的作用:
Object get (Class clazz, Serializable id):通过实体类Class对象和ID加载数据
Object load(Class clazz, Serializable id):通过实体类Class对象和ID加载数据
7). 使用get和load加载数据的区别?
当我们使用Session的get方法的时候,如果加载的数据不存在,get方法会返回一个null对象, 但是如果使用的是
load方法,要加载的数据不存在,系统就会抛出异常,这就是get和load的区别之一。
8). 实体对象的三种状态?
①.瞬时状态(Transient)
②.刚用new语句创建,还没有被持久化,且不处于Session的缓存中
③.持久状态(Persistent)
④.已经被持久化,且加入到Session的缓存中
⑤.游离状态(Detached)
⑥.已经被持久化,但不再处于Session的缓存中
- 大小: 36.6 KB
- 大小: 18.5 KB
- 大小: 9.6 KB
- 大小: 6.2 KB
分享到:
相关推荐
Hibernate4实战 之 第一部分 Hibernate入门
NULL 博文链接:https://hzy2688.iteye.com/blog/662705
hibernate 入门详细操作步骤 包括hibernate包,实例实现文档····
MVC设计模式的基本概念 Struts2框架的基本概念与工作原理 Struts2的安装和配置 Struts2的类型转换与输入校验 Struts2标签库 Struts2拦截器
最经典的hibernate教程_从入门到精通_第一篇
最经典的hibernate教程_从入门到精通_第1篇(共四篇).ppt
Beginning Hibernate 第二版 Hibernate 入门的一部好书,书中 书中的源码可以从网上下载。
jsp Hibernate入门教程第1 3页.docx
对于hibernate入门者,这点代码应该有点帮助 呵呵 下载后给个分就不用你的资源分了
最经典的hibernate教程_从入门到精通_第一篇(共四篇)
最经典的hibernate教程_从入门到精通_第一篇(共四篇)pptx
hibernate人生中第一个成功及完美程序(适合入门者)
第一章:Hibernate入门 包括:是什么、ORMapping原理、能干什么、有什么、怎么做(做什么) 第二章:Hibernate的HelloWorld 第三章:Hibernate的配置 包括:cfg配置、mapping配置、组件映射、事务配置、缓存配置 ...
本章重点 Hibernate的简介及配置 第一个Hibernate示例 能够让你更好的理解Hibernate
学习HIbernate的第一个例子,便于初学者入门
Hibernate中的Middlegen入门指南
我培训用的 Hibernate课件, 个人能力范围内精心整理... 这是第一篇, 内容如下: 了解基于B/S的三层架构; 了解持久化层-O/R Mapping ;理解Java持久化层技术Hibernate; 学习Hibernate的开发步骤;学习Hibernate的重要接口
dwr + hibernate写的一个检测用户名是否可用的简单代码,非常适合初学者.附件中包含dwr和hibernate等第三方lib,以及数据库建表语句,对本示例作了简要说明
第1章 web应用开发简介 1 第2章 java ee运行及开发环境 15 第3章 jsp和servlet 33 第4章 sql与jdbc 64 第5章 struts 2框架基础 80 第6章 struts 2高级应用 110 第7章 struts 2中应用模板语言 145 第8...