持久化框架Hibernate 开发实例(一)
1 Hibernate简介
Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位,
Hibernate作为Web应用的底层,实现了对数据库操作的封装。HIbernate框架的应用可以
改变传统JDBC操作数据库的方式。
1.1 ORM简介
ORM的全称是Object/Relation Mapping即对象/关系映射。ORM在单独的持久化层,由
ORM中间件对数据细节访问进行封装。ORM可以通过映射来实现数据操作转换为对象的操作。
对象指使用的编程语言是面向对象的,而关系则指使用的数据库是关系型数据库。对象/关系映射则
是指完成面向对象语言到关系型数据库的映射,通过映射后,我们可以先该操作对象一样来操作
我们的数据库。
1.2 Hibernate框架的优势
1.2.1 免费的,开放源代码。
1.2.2 轻量级开发,实现O/R映射非常简单。
1.2.3 可扩展性强。
1.2.4 拥有众多社区支持
1.2.5 使用XML配置对象-关系映射而不依赖于任何代码,如果需要修改,只需要修改XML配置文件即可。
1.2.6 可以独立设计域模型和数据模型。
1.3 Hibernate框架概述
Hibernate作为ORM映射工具,了解整体架构对了解Hibernate的工作原理和以后学会使用
将有指导性的作用。
1.3.1 会话工厂
会话工厂是对属于单一数据库的编译过的映射文件的线程安全的,不可变的缓存快照。
1.3.2 会话
会话是单线程,声明短暂的对象,代表应用程序和持久化层之间的一次对话。封装了
一个JDBC连接,也是事务的工程。保存有必须(一级)持久化对象缓存,用于遍历对象图,
或通过表示查找对象。
1.3.3 持久化对象
持久化对象是声明周期短暂的单线程对象,把数据库实现做为一个独立的逻辑,包含了持久化
状态和商业功能。它们可能是普通的JavaBeans/POJOs,唯一特别的是,他们从属于且
仅从属于一个Session。一旦Session被关闭,他们将从Session中取消联系,可以在任何
程序中自由使用。
1.3.4 临时对象
没有从属于一个Session的持久化类的实例。他们可能是刚被程序实例化。还没有来得及持久化的
对象,或是被一个已经关闭的Session所实例化的对象。
1.4.5 事务
单线程,生命周期短暂的对象,应用程序用它来表示一批不可分割的操作。
1.4.6 连接提供者(可选)
略
1.4.7 事务工厂(可选)
略
2 Hibernate的配置和相关类
2.1 Configuration类
Configuration类负责管理Hibernate的配置信息,一个Configuration类的实例代表了
应用程序中Java类到到数据库的映射的集合。应用程序通常只是创建一个Configuration实例,
并通过它创建SessionFactory实例。例如下面的代码:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Configuration是Hibernate的入口,在新建 一个Configuration的实例时,Hibernate会在
类路径中查找文件hibernate.properties和hibernate.cfg.xml,如果这两个文件同时存在,
则hibernate.cfg.xml将会覆盖hibernate.properties文件,如果两个文件都不存在,将抛出异常。
2.2 Hibernate 配置文件
hibernate配置文件是重点,以现在最长用的hibernate.cfg.xml格式的配置文件为例进行说明,
请参考以下代码。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- 数据库连接URL -->
<property name="connection.url">
jdbc:mysql://localhost/javaweb
</property> <!-- 数据库连接驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property> <!-- 数据库用户名 -->
<property name="connection.username">root</property> <!-- 数据库用户密码 -->
<property name="connection.password">123456</property> <!-- 数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property> <!-- 指定映射文件 -->
<mapping resource="com/javaweb/hibernate/Product.hbm.xml"/> </session-factory>
</hibernate-configuration>
代码解析:数据库方言设置数据库产品的类型,因为我们使用的是MySql数据库,所以这里设置属性值为
org.hibernate.dialect.MySQLDialect。
2.3 SessionFactory类
SessionFactory负责Session实例的创建。为了创建一个SessionFactory对象,必须在
Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理。
这样Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建
成功后,Configuration对象就没有用了。
3 Hibernate中的对象
Hibernate中对象有三种状态,临时对象,持久化对象,脱管对象。
3.1 三种状态概述
3.1.1 临时状态
对象在保进行数据库保存操作之前被称为临时状态,此时的数据库中并没有该对象的任何
信息及该对象的id信息。在程序退出时江丢失临时状态对象的任何信息。
3.1.2 持久化状态
对象在保存到数据库后但并没有脱离Session的时候被称为持久化状态。该状态的
数据库中已经有了该对象的信息,而且该对象的id为数据库中对应记录的主键值,
3.1.3 托管状态
Session关闭之后,与次Session相关联的持久化对象就变为托管对象,
可以继续对这个对象做修改。托管对象拥有数据库的标识id,所以它可以通过update(),
saveOrUpdate()等方法,再次与持久层关联。
3.2 持久化类
上面所述的三中对象状态,在变成过程中就体现为持久化类的实例。例如:
package com.javaweb.hibernate;
public class User {
private String username;
private String password;
//无参构造函数
public User(){
}
//自定义构造函数
public User(String username,String password ){
this.username=username;
this.password=password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
具体开发代码请参考下一篇文章:《持久化框架Hibernate 开发实例(二)》
持久化框架Hibernate 开发实例(一)的更多相关文章
- 持久化框架Hibernate 开发实例(二)
1 简述 通过使用Hibernate框架,开发者可以使用面向对象的方式来进行数据库访问,从而取代 以前使用JDBC进行数据库访问的方式.通过使用Hibernate框架,web应用可以通过面向 对象的方 ...
- RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...
- RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...
- [Spring框架]Spring开发实例: XML+注解.
前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...
- 【持久化框架】Mybatis与Hibernate的详细对比
前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Myba ...
- Hibernate对象持久化框架
JDBC:(Java Data Base Connectivity)java数据库连接 java.sql包提供JDBC API,可通过它编写訪问数据库的程序代码.当中经常使用的接口和类包含以下内容: ...
- 【持久化框架】Mybatis与Hibernate的详细对比(转发)
前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...
- Hibernate入门2.简单的项目开发实例
Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
随机推荐
- JavaScript中使用console调试程序的坑
上DEMO a = {key1: [1, 2], 'key2': {'key4': '11'}, 'key3': [1, 2]} console.info(1,a) a.key2.key4 = '22 ...
- 菜鸟学习Struts——配置Struts环境
刚开始学习Struts,它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品. 要用到Struts就要学会配 ...
- 基础才是重中之重~理解linq中的groupby
linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用. 对GroupBy的多字段分组,可以看我的这篇文 ...
- Javascript中字符串转换成Date的方法
//字符串转成Time(dateDiff)所需方法 function stringToTime(string) { var f = string.split(' ', 2); var d = (f[0 ...
- 微信小程序、应用号、订阅号、服务号、企业号小总结
微信小程序是现在微信推出的一个新的项目,但是很多人都不是很清楚微信小程序是怎么一回事,不明白到底怎样分别微信小程序和别的公众号.订阅号等的区别,那么让小编来给你介绍一下. 微信小程序目前是内侧阶段,是 ...
- 【转】android 内存泄漏相关收藏博客。
关于android内存泄漏的研究 博客建了几个月,都没有去写,一是因为当时换工作,然后又是新入职(你懂的,好好表现),比较忙:二是也因为自己没有写博客的习惯了.现在还算是比较稳定了,加上这个迭代基 ...
- xubuntu install nodejs
1.安装依赖sudo apt-get install g++ curl libssl-dev apache2-utils git-core 2.去官网获取最新版本 sudo wget http://n ...
- 51nod 1640 天气晴朗的魔法 最小生成树
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 题解: 先求最小生成树,记录最大边. 然后求最大生成树 ...
- Hbase的安装测试工作
Hbase的安装测试工作: 安装:http://www.cnblogs.com/neverwinter/archive/2013/03/28/2985798.html 测试:http://www.cn ...
- uva 11181
直接枚举计算就行: #include<cstdio> #include<cstring> #include<algorithm> #define maxn 22 u ...