Hibernate学习0.Hibernate入门
Hibernate是什么
面向java环境的对象/关系数据库映射工具。
1.开源的持久层框架.
2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.
3.连接java应用和数据库的中间件.
4.对JDBC进行封装,负责java对象的持久化.
5.在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑
Hibernate作用
ORM简介
对象-关系映射(ORM,即Object-Relation Mapping).
指单个组件中负责所有实体域对象的持久化,封装数据访问细节。

对象-关系映射的概念
|
面向对象概念 |
面向关系概念 |
|
类 |
表 |
|
对象 |
表的行(记录) |
|
属性 |
表的列(字段) |

ORM中间件的使用方法
采用元数据来描述对象-关系映射细节,元数据通常采用xml格式,并存放在专门的对象-关系映射文件中。只要配置了持久化类与表的映射关系,orm中间件在运行时就能够参照映射文件的信息,把域对象持久化到数据库中。
public void deleteCustomer(Customer c){
Session session = getSession();
session.delete(c);
}
执行步骤如下:
1.运用反射机制,获得Customer对象的Customer.class类。
2.参照映射文件得到Customer类对应的表的信息,以及和Customer类关联的类以及相应的表信息。
3.根据以上信息生成SQL语句。
4.调用JDBC API,执行该语句。
Hibernate软件包
- hibernate3.jar: 包含Hibernate3的基础框架和核心API类库,是必须使用的jar包。
- cglib-2.1.2.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,它是非常核心的库,是必须使用的jar包。
- dom4j-1.6.1.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。
- commons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
- commons-logging.jar: Apache Commons包中的一个,包含了日至功能,必须使用的jar包。
- ant-1.6.5.jar: Ant编译工具的jar包,用来编译Hibernate源代码的。它是可选包。
- c3po-0.9.0.jar: C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO的连接池,如果准备用这个连接池,就需要这个jar包。
- connector.jar: JCA(Java Cryptography Architecture,Java加密架构,java平台中用于访问和开发加密功能的框架)规范,如果在App Server上把Hibernate配置为Connector,就需要这个jar。一般App Server都会带上这个包。
- jaas.jar: JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以它的实际上是多余的包。
- jdbc2_0-stdext.jar: JDBC2.0的扩展包,一般来说数据库连接池会用上它,不过App Server都会带上它,所以也是多余的。
- jta.jar: JTA(java事务处理的机制)规范,当Hibernate使用JTA的时候需要,不过App Server都会带上它,所以也是多余的。
- junit-3.8.1.jar: Junit包,当运行Hibernate自带的测试代码的时候需要,否则就不用。
- xerces-2.6.2.jar和xml-apis.jar:Xerces是XML解析器,xml-apis实际上是JAXP。也是多余的包。
Hibernate API简介
1.提供访问数据库操作(session,transaction,query)
2.配置hibernate接口(configuratioin)
3.回调接口(Interceptor,Lifecycle,Validatable)
4.用于扩展的功能接口(UserType,CompositeUserType, IdentifierGenerator)
Hibernate对JDBC做了轻量级的封装。所谓轻量级是指Hibernate并没有完全封装JDBC,java应用既可以通过HibernateAPI来访问数据库,还可直接通过JDBC API访问数据库。
Hibernate核心接口
1.Configuration
配置hibernate,根启动hibernate,创建sessionFactory对象。
2 .sessionFactory
负责创建Session对象,可以通过Configuration对象创建SessionFactory对象。
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关 系以及 预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
SessionFactory对象的创建会有较大的开销,而且SessionFactory对象采取了线程安全的设计方式,因此在实际中SessionFactory对象可以尽量的共享,在大多数情况下,一个应用中针对一个数据库可以共享一个SessionFactory实例
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
3.Session
使用最广泛,也被称为持久化管理器,它提供和持久化相关的操作。增、删、改、查等。不是线程安全的,因此,一个Session对象只可以由一个线程使用。避免多个线程共享。轻量级的,创建和销毁不需要消耗太多资源。Session中有一个缓存,称为一级缓存。存放当前工作单元加载的对象。
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
4.Transaction hibernate数据库事务接口
将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。
使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)
Transaction tx = session.beginTransaction();
5.Query和Criteria接口
都是查询接口,query实例包装了HQL查询语句,hql是面向对象的,他引用类名及类的属性名,而不是表名和字段名。Criteria接口完全封装了基于字符串形式的查询语句,比query接口更面向对象,他擅长执行动态查询。sessoin接口的find方法也具有数据查询功能,但他只是执行一些简单的hql查询语句的快捷方式,远没有query接口功能强大。
回调接口
1.Lifecycle和Validatable接口:lifecycle接口能使持久化类响应被加载、保存和删除事件。Validatable接口使持久化类的接口被保存之前进行数据验证。这种方式强迫持久化类实现特定接口,使hibernate API渗透到持久化类中,会影响可移植性,不值得推荐。
2.Interceptor:不必由持久化类来实现。可定义专门实现该接口的类,负责响应持久化类的实例被加载、保存、更新或删除的事件。
Hibernate映射类型接口
1.PrivateType类:映射java基本数据类型,包括ByteType、ShortType、IntegerType、LongType、FloatType、DoubleType、CharactorType、BooleanType。
2.DateType:映射java日期类型。
3.BinaryType:映射Byte[]类型。
Query.setParameter(“name”,”name”,Hibernate.STRING)
可供扩展的接口
hibernate提供的多数功能是可配置的,允许用户选择适当的内置策略。如可配置如下数据库方言:
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.dialect=net.sf.hibernate.dialect.OracleDialect
hibernate.dialect=net.sf.hibernate.dialect.SybaseDialect
如果hibernate内置的策略不能满足需求时,允许用户自定义实现接口或扩展特定的类。Hibernate的扩展点包括:
主键生成策略:IdentifierGenerator
sql方言:Dialect抽象类
缓存机制:cache和cacheprovider接口
jdbc连接管理器:connectionprovider等
Hibernate运行过程
Hibernate的运行过程如下:
1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,
2、并用这些信息生成一个SessionFactory对象,
3、然后从SessionFactory对象生成一个Session对象,
4、并用Session对象生成Transaction对象;
A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;
B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

小结

Hibernate学习0.Hibernate入门的更多相关文章
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- hibernate学习之Hibernate API
1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...
- Hibernate学习之Hibernate流程
Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...
- Hibernate学习之——Hibernate环境搭建
之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...
- Hibernate学习之hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...
- Hibernate学习笔记--Hibernate框架错误集合及解决
错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...
- Hibernate学习(五)Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...
- Hibernate学习11——Hibernate 高级配置(连接池、log4j)
第一节:配置数据库连接池 这里配置c3p0连接池,需要的jar包: jar包位于hibernate压缩包的:hibernate-release-4.3.5.Final\lib\optional\c3p ...
- Hibernate学习10——Hibernate 查询方式
本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...
随机推荐
- 实现3D旋转效果的方法
Android中有一种旋转效果,是将一个图片进行360度的旋转. Matrix的作用是对平面上的View进行缩放.平移.旋转,每一种操作都配了setXXX.preXXX.postXXX三个函数. Ca ...
- js替换指定字符串
// var a = "212"; // var b = []; // for(var i=0;i<a.length;i++){ // if(a[i]=="1&qu ...
- Hql查询结果动态组装 List(map),List(bean),List(list),List(set)等格式(转)
1.//查询整个对象String hql="from Users";Query query = session.createQuery(hql);List<Users> ...
- css - position relative与display table-cell深入分析
在很多时候,想使用 display: table; 以及其子元素使用 display: table-cell 都只是为了使用 vertical-align 这一属性.这是一个很简单的常识,但这次在项目 ...
- App.js – 用于移动 Web App 开发的 JS 界面库
App.js 是一个轻量级的 JavaScript UI 库,用于创建像本地应用程序的移动 Web 应用而不牺牲性能和体验.它是跨平台的,特定的UI设计,配置类似原生的过渡效果.App.js 的目的是 ...
- Mobiles Wall – 致力于分享最优质的手机壁纸
大多数人都经常修改手机壁纸,让收集看起来更酷.Mobiles Wall 是一个响应式的网站,致力于分享最优质的手机壁纸,类型非常多,包括:抽象,动物,艺术,汽车,食品及饮料,游戏,照片,电影,音乐,自 ...
- 初遇sql server
今天初始接触sql server 和mysql的语法有一些不同 sql server中使用[] 或双引号来表示数据库.字段名.表名等,而字符串使用单引号来表示 mysql中数据库名,表名,字段名不需要 ...
- Node.js爬虫数据抓取乱码问题总结
一.非UTF-8页面处理 1.背景 windows-1251编码 比如俄语网站:https://vk.com/cciinniikk 可耻地发现是这种编码 所有这里主要说的是 Windows-1251( ...
- CSS--复习之旅(一)
CSS概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现分 ...
- AC自动机 - 多模式串的匹配运用 --- HDU 3065
病毒侵袭持续中 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=3065 Mean: 略 analyse: AC自动机的运用. 这一题 ...