Hibernate入门1. Hibernate基础知识入门 20131127
前言:
之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了。这样一个庞大的Spring架构,不是我们可以速成的。再有最近Spring有转型,Spring官方网站已经更改了很多,因为Spring已经调整了他的整个业务体系,涉足服务器开发、Android开发、大数据分析等等各个部分,而不仅仅是一个包容性的框架了,Spring未来的发展方向更加开阔了。
同时Spring已经不再提供下载,而是转向使用maven的工具,具体是什么,我也不太懂,所以学习Java编程,当我们学习基本的语法之后,可以说自己精通Java了;但是之后我们学习JavaWeb编程的时候,发现自己还是有一些知识不知道,于是说自己掌握基本的Java知识;之后我们在学习Java的框架技术,组件技术,服务器技术等等的时候,甚至有些框架在Java语言级别上进行了修改,我们会发现自己会的知识相对整个Java的世界来说,真的是微不足道,我更加不敢说自己掌握Java的知识了。
这些只是设计Java的知识面,同时对于Java编程的基本语言,我们是不是能够在JVM级别上去深入,比如内存回收、内存分布、资源对象池、线程技术、互斥同步技术等等,我们也没有深入的连接,更不要说掌握了。
所以说在Java的编程领域里,不要轻易的说自己精通。对于不懂行的人来说,或许会觉得你很厉害;但是对于懂行的来说,也许就只能在内心笑一下,呵呵了!
总结性的话就不乱说了,愈行愈远,愈是发现自己的渺小;愈学愈广,愈觉得自己无知。
回到主题上来:Hibernate框架是一个数据库框架,之前做项目的时候,为了快速应用到实际中,我选择的是MyBatis数据库框架,也是在Spring中整合的,因为没有老师教,所以也不知道还给谁了。这一次学习Hibernate框架技术,主要内容有:Hibernate体系结构、Hibernate开发应用方式、Hibernate核心类和接口的用法、Hibernate配置文件和映射文件编写、理解持久化对象的不同状态以及转换。
1.Hibernate概述
Hibernate是目前最流行的ROM(Object Relational Mappint,对象关系映射)框架解决方案。对象持久化及时,就是讲对象保存到数据库中,经典的就是关系型数据库,里面存放的是关系型数据而不是对象。ORM框架就是解决对象和关系之间的映射关系。
ORM框架有如下的优点:贯彻面相对象的编程思想、减少代码的编写量、提高访问数据库的性能,减少数据库的访问次数、具有相对的独立性,发生变化的时候不会影响上层的实现。
Hibernate框架式轻量级的JavaEE应用中持久层的解决方案,Hibernate不仅管理对象数据到数据库数据的映射,还提供面相对象的语言查询和获取的方法,和单纯的JDBC相比,大幅度缩减进行数据持久化处理的开发时间。Hibernate的优点:
开源免费;简单,避免引入过多的复杂的问题,进行轻量级的封装,便于测试;具有可扩展性,API开放,可以根据需要进行扩展;稳定性。
1.1Hibernate中的持久化对象
在Hibernate中的一个非常重要的媒介,持久化对象(Persistent Object PO)。持久化对象的作用就是完成持久化操作,通过该对象可以对数据库以面向对象的方式进行操作。应用程序无需直接访问数据库,只需要创建、修改或者是删除持久化对象,Hibernate则会负责将这些操作转换成为相对应的数据库表的操作。
在Hibernate中的PO非常简单,它采用的是地侵入式的方式,完全使用POJO作为持久化对象。Hibernate中的POJO和普通的JavaBean是一样的,Hibernate直接采用POJO,不需要持久化类继承或实现任何接口或者是class,这样地侵入的方式保证了代码的简洁性、独立性和重用性。
同时为了实现POJO的可持久化操作能力,需要对这个model进行映射,Hibernate采用的是XML的方式映射。
通过配置文件,将class中的属性元素和数据库中的表映射,这样每一个class对应生成一个PO。(PO= POJO+ 映射文件)。
1.2Hibernate API
Hibernate API中提供了Hibernate的功能类和接口,应用程序通过这些类和接口可以直接以面向对象的方式访问数据库。Hibernate的核心类和接口:
Configuration类:用于配制启动Hibernate,创建SessionFactory实例对象
SessionFactory接口:初始化Hibernate,创建Session实例,充当数据源代理
Session接口:用于保存、更新、删除、加载、查询持久化对象,充当持久化管理器。
Transaction接口:封装底层的事物,充当事务管理器
Query接口:执行HQL数据查询,是Hibernate的查询器
Criteria接口:创建并且执行面相对象方式的查询,充当Hibernate查询器。
1.3Hibernate体系结构
Hibernate框架将开发人员从JDBC的繁琐开发中释放出来,开发人员不需要管制底层数据库连接的获得、数据库访问的实现、事务的控制,而是以OO的方式进行持久化操作。
Hibernate体系结构中对象的功能:
SessionFactory:Hibernate的关键对象,是针对单个数据库映射关系经过编译后的内存镜像。SessionFactory负责初始化Hibernate,充当数据存储源的代理,负责创建Session对象,是一个Session的工厂,一个应用只初始化一个SessionFactory,为不同的线程提供Session
Session: Hibernate持久化操作的关键对象,是应用程序和数据库之间交互操作的一个单线程对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。
Transaction:提供持久化的原子操作,具有数据库事务概念
PersistentObject:持久化对象,于Session相关联,处于持久化状态。
Transient Object:瞬间对象,没有和Session相关联,尚未持久化的对象
ConnectionProvider:数据库连接提供者,用于生成与数据库建立连接的JDBC 的对象。
TransactionFactory:是生成Transaction对象的工厂,实现对事务的封装。
附件User.java&Userhbm.xml:
User.hbm.xml:
<?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="com.yang.model.User" table="user">
<id name="id" column="id">
<generator class="uuid.hex"/>
</id>
<property name="userName" column="username" type="string" not-null="true"/>
<property name="password" column="password" type="string" not-null="true"/>
</class>
</hibernate-mapping>
注意在开头的<!DOCTYPE> 只有3.0的版本,虽然使用的是4.2的库,但是声明还是3.0的dtd
2.Hibernate应用开发方式
Hibernate应用的开发方式有3种:
自底向上,从数据库表到持久化类:采用手动或者开发工具根据数据库中表的结构生成对象的映射文件和持久化类;
自顶向下,从持久化类到数据库表:先写持久化类,然后手动或者是使用工具辨析银蛇文件,进而生成数据库中的表。
从中间触发,从映射文件向上生成持久化类,在向下生成数据库中的结构表。
步骤如下:
配置Hibernate的应用环境,在应用中添加hibernate的jar,创建Hibernate的配置文件;
创建持久化类以及对应的ORM映射配置文件
利用Configuration装载配置
利用SessionFactory创建Session,之后再使用Session进行持久化对象的管理;
利用Transaction管理事务
利用HQL进行HQL查询或者是使用Criteria实现条件查询。
Yangtengfei
2013.11.27