第一部分:Hibernate入门
Hibernate是什么
Hibernate是一个轻量级的ORMapping框架
ORMapping原理(Object Relational Mapping)
ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
ORMapping的基本实现方式:
使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。
大家想想,我们实现过ORMapping吗?
Hibernate能干什么:
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
一个非常简要的Hibernate体系结构的高层概要图
Hibernate运行时体系结构
“最小”的体系结构方案,要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了Hibernate API 的最小子集.
“全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。
Transaction (org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成Transaction对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。
HelloWorld
要研究怎么做,先得搞清楚需要做什么
根据刚才的学习,做基本的Hibernate应用程序,要完成下面的工作:Object、数据库的表、两种配置文件、客户端程序来调用Hibernate的接口进行操作。
构建环境
最简单的方法:把hibernate-release-4.0.0.Beta4.zip包里面lib/required下的jar包全部添加到工程的library里面,另外还需添加slf4j的实现包slf4j-log4j12-1.5.8.jar和log4j的实现包log4j-1.2.16.jar,还有别忘了把JDBC的驱动jar包也加入到library里面
Object怎么做
1:就是前面学过的vo的写法(规则同样是那四点)
2:要求必须有一个public为空参的构造方法,现在写vo一般不写构造方法,默认就有一个,但是写构造方法的时候要注意写上一个public为空参的构造方法
3:要求提供一个标识属性(identifier)
4:使用非final的类(因为要使用代理来延迟实体的装载)
5:设若构建一个对象:cn.javass.h4.hello.UserModel,有四个属性:uuid,userId,name,age
在数据库中建表
设若构建一个表为tbl_user,字段:uuid,userId,name,age
配置xxx.cfg.xml
1:缺省名称为 hibernate.cfg.xml
2:存放在当前classes的根目录下,开发的时候在src根下就可以了
3:主要有如下四部分配置 :
(1)与DB的连接
(2)可选配置
(3)资源文件注册
(4)二级缓存
4:配置的时候可以到Hibernate发行包里面找个hibernate.cfg.xml的例子,比如可以用“\project\hibernate-documentation\quickstart\tutorials\basic\src\test\resources”下面的hibernate.cfg.xml作例子
5:示例如下:
java代码:
<?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="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <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.pool_size">2</property> <property name="dialect">org.hibernate.dialect.OracleDialect</property> <property name="show_sql">true</property> <mapping resource="cn/javass/h4/hello/UserModel.hbm.xml"/> </session-factory> </hibernate-configuration>
配置xxx.hbm.xml
1:与被描述的类同名 ,如:UserModel.hbm.xml
2:存放位置与所描述类存放在同一文件夹下
3:主要有如下四部分配置 :
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射
4:配置的时候可以到hibernate发行包里面找个例子,比如可以用“\project\hibernate-core\src\test\java\org\hibernate\test\cid”下面的Customer.hbm.xml作例子
5:示例如下:
java代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> <hibernate-mapping> <class name="cn.javass.h4.hello.UserModel" table="tbl_user"> <id name="uuid"> <generator class="assigned"/> </id> <property name=“userId”></property> <property name=“name”></property> <property name="age"></property> </class> </hibernate-mapping>
客户端文件:
java代码:
package cn.javass.h4.hello; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args) { SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session s = null; Transaction t = null; try{ //准备数据 UserModel um = new UserModel(); um.setUuid("1"); um.setUserId("id1"); um.setName("name1"); um.setAge(1); s = sf.openSession(); t = s.beginTransaction(); s.save(um); t.commit(); }catch(Exception err){ t.rollback(); err.printStackTrace(); }finally{ s.close(); } } }
测试:直接在Elipse里面运行Client文件即可,运行结束,你将会看到在console输出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打开数据库的数据表,你会看到一条值已经加入了。
说明:
1:SessionFactory sf = new Configuration().configure().buildSessionFactory();这句话的意思是读取hibernate.cfg.xml,创建Session工厂,是线程安全的。
默认是”hibernate.cfg.xml”,不用写出来,如果文件名不是”hibernate.cfg.xml”,那么需要显示指定,如下:
SessionFactory sf = new Configuration(). configure( “javass.cfg.xml”).buildSessionFactory();
2:Session是应用程序主要使用的Hibernate接口,约相当于JDBC的Connection+Statement/PreparedStatement的功能,是线程不安全的
3:在Hibernate4里面,已经不推荐使用Configuration类了,而改为使用 ServiceRegistryBuilder和MetadataSources来代替,新的写法大致如下:
ServiceRegistryBuilder builder = new ServiceRegistryBuilder().configure();
builder.applySetting("connection.driver_class", "oracle.jdbc.driver.OracleDriver");
builder.applySetting("connection.url", "jdbc:oracle:thin:@localhost:1521:orcl");
builder.applySetting("connection.username", "ztb");
builder.applySetting("connection.password", "ztb");
builder.applySetting("connection.pool_size", "2");
builder.applySetting("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
builder.applySetting("show_sql", "true");
MetadataSources sources = new MetadataSources( builder.buildServiceRegistry() );
sources.addResource("cn/javass/h4/hello/UserModel.hbm.xml");
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();
这种写法,现在还没有实现完全,不太好用,所以官方给出的示例里面还是采用以前的方式,大家先了解一下。
4:这里使用的事务Transaction是Hibernate的Transaction,需要有,不能去掉。
为什么必须有这个Hibernate的事务呢?以HelloWorld为例来看看:
分享到:
相关推荐
《Hibernate实战》是一部备受赞誉的关于Hibernate框架的专业书籍,被广泛认为是最权威的Hibernate著作之一。该书由Hibernate项目的核心开发者撰写,因此能够提供深入且独特的见解。在出版之初便获得了包括Java ...
总之,《Java Persistence with Hibernate》第二版是一本不可多得的参考书籍,它不仅涵盖了一个ORM框架的所有核心概念,还提供了丰富的实战经验和专家见解。通过阅读这本书,你可以掌握如何利用Hibernate来构建高效...
在第二部分中,《Hibernate4实战》详细讲解了Hibernate的配置过程。这包括`hibernate.cfg.xml`配置文件的解析,如何设置数据库连接信息(如驱动、URL、用户名和密码),以及如何定义日志级别和其他高级配置选项。...
总之,这个DEMO项目为你提供了一个实战平台,通过学习和实践,你可以深入理解Spring4、Hibernate4和JPA的集成,提升你在企业级应用开发中的技能。同时,对于初学者来说,这是一个很好的起点,可以让你快速入门并掌握...
【描述】:“hibernate人生中第一个使用myEclipse”表明这是一个基于MyEclipse的实战教程,指导用户按照步骤学习Hibernate。HSP可能指的是某位导师或教程系列,暗示学习路径是有指导的,适合那些希望系统学习...
第一篇主要介绍Hibernate的基础知识。这部分内容通常会涵盖Hibernate的安装配置,包括设置环境变量、添加依赖库等。接着,讲解Hibernate的核心概念,如实体类、持久化对象、对象关系映射(ORM)原理以及如何通过XML...
这个文件名可能是教程的欢迎部分或起始点,通常会包含介绍性的内容,解释Hibernate的核心概念、安装指南、环境配置,以及如何创建第一个Hibernate项目。可能还会涵盖如何设置Hibernate的配置文件(hibernate.cfg.xml...
本教程的【第一篇】将介绍Hibernate的基础知识和基本操作,【第二篇】会深入到关联映射和查询,【第三篇】涵盖性能优化和扩展性,而【第四篇】则聚焦于实际项目中的应用和问题解决。通过这四篇内容的学习,你将能够...
**hibernate简介** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得...这四篇教程应该涵盖了Hibernate的基础知识、进阶用法以及实战技巧,对于初学者来说是一份很好的学习资料。
【hibernate教程-从入门到精通-第4篇(共四篇)共2】这篇教程是关于Java持久层框架Hibernate的学习指南,旨在帮助初学者深入理解并掌握Hibernate的核心概念和技术。Hibernate作为一款强大的对象关系映射(ORM)工具,...
#### 二、Hibernate入门实战 - **第一个Hibernate程序**: - 创建一个简单的Java类,定义实体模型。 - 使用Hibernate提供的API创建SessionFactory和Session。 - 通过Session执行CRUD操作。 - **配置文件**: - ...
总的来说,Hibernate入门需要理解ORM思想,掌握实体类、Session和SessionFactory的使用,学习HQL和Criteria API的查询方法,了解级联操作和事务管理,并熟悉性能优化手段。初学者可以通过阅读官方文档、实战项目练习...
6. **缓存机制**:介绍第一级缓存和第二级缓存的工作原理,以及如何配置和使用缓存来提高应用性能。 7. **实体生命周期**:阐述实体的持久化状态(瞬时、持久、托管和脱管),以及它们之间的转换过程,如保存、更新...
- 第一级缓存:Session级别的缓存,了解其默认行为和配置选项。 - 第二级缓存:SessionFactory级别的缓存,如何配置和使用第三方缓存提供商如Ehcache。 9. **性能优化** - 查询优化:避免N+1查询问题,使用...
1. **Day01:Hibernate入门** - Hibernate概述:理解ORM的概念,以及Hibernate在Java应用中的作用。 - 安装与配置:学习如何在项目中添加Hibernate依赖,配置hibernate.cfg.xml文件。 - 实体类和注解:创建实体类...
《Hibernate入门》是一本专为初学者设计的教程,旨在帮助读者快速理解并掌握Hibernate这一强大的Java对象关系映射(ORM)框架。Hibernate是Java开发中的一个关键工具,它简化了数据库操作,使得开发者可以专注于业务...
在“Introduction to Hibernate”部分,文档引导开发者从零开始构建第一个Hibernate应用。这包括创建基本的实体类、定义映射文件、配置Hibernate环境、使用Ant进行构建等步骤。这一过程不仅涵盖了基础概念的介绍,还...
《Hibernate实战:从入门到精通》 Hibernate是一个优秀的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在这个“hibernate code.rar”压缩包中,我们很可能会找到关于Hibernate的视频教程——...