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

Hibernate入门1. Hibernate基础知识入门的更多相关文章

  1. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  2. Linux基础知识入门

    [Linux基础]Linux基础知识入门及常见命令.   前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1: ...

  3. Python 入门之Python基础知识

    Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...

  4. Oracle 基础知识入门

    前记: 近来项目用到Oracle数据库,大学学了点,后面基本忘记得差不多了,虽然基本语法跟sql 差不多,但是oracle知识是非常多的. 这里简单说点基础知识,希望后面补上更多的关于ORacle知识 ...

  5. SpringMVC(一) 基础知识+入门案例

    SpringMVC基础知识 1.什么是Springmvc 2.springmvc 框架的原理(必须掌握) 前端控制器.处理器映射器.处理器适配器.视图解析器 3.SpringMVC 入门程序 目的:对 ...

  6. JAVAWeb入门之JSP基础知识

    也是到了考试周,很多课都结了,准备去学点新东西.随后就开始自学JAVAWeb. 要学习JAVAWeb,首先需下面的知识: a)      HTML/CSS/JS(前端页面),XML,JSON,vue ...

  7. java学习基础知识入门

    基础入门知识(一) 一.java技术的分类 java按照技术标准和应用场景的不同分为三类,分别是JAVASE.JAVAEE.JAVAME JAVASE : 平台标准版,用于开发部署桌面,服务器以及嵌入 ...

  8. DOM0,DOM2,DOM3事件,事件基础知识入门

    事件是javascript和HTML交互基础, 任何文档或者浏览器窗口发生的交互, 都要通过绑定事件进行交互; 事件有DOM0, DOM2和DOM3的区分(别问我怎么少了一个DOM1, 也没找到DOM ...

  9. 玩耍Hibernate系列(一)补充--基础知识

    基本概述: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库,Hibernate可以应用在任何 ...

随机推荐

  1. log4j的配置和使用

    日志记录 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器 ...

  2. EXTJS 下载

    Extjs各版本的下载链接 Extjs的版本繁多,本文收集了Extjs各个版本的下载链接,包括官网和非官网的,以及各种汉化版api,欢迎大家下载分享. Extjs最新版下载链接:http://www. ...

  3. PHP中构造函数和析构函数解析

    构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用 ...

  4. snapshot与release

    总结自:https://www.jianshu.com/p/084fd2408d9a 这两个概念是用于描述jar包,jar包提供给其他系统作为依赖. 1. snapshot版本代表不稳定.尚处于开发中 ...

  5. 《Java程序设计》实验1实验报告

    20145318 <Java程序设计>实验1实验报告 实验题目 通过对500个数据进行操作,实现快速排序.选择排序.直接插入排序算法时间复杂度的比较:并在排序数据中快速查找某一数据,给出查 ...

  6. 20145322《Java程序设计》第4次实验报告

    实验内容 1.搭建Android环境 2.运行Android 3.修改代码并输出自己的学号 实验步骤 搭建Android环境 安装Android,核心是配置JDK.SDK 运行Android 最终结果 ...

  7. Docker 的一些使用心得

    Docker 的使用心得 预备知识·必备· bash(bsd) Net ,ip know hot to search in Google and Baidu 安装 一般找一个不错的网络环境...不然玩 ...

  8. 【前端】Vue.js经典开源项目汇总

    Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...

  9. 打开Mac OSX原生的NTFS功能

    插上磁盘 从finder或者使用以下命令查看到磁盘的Volume Name: diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID ...

  10. nuget sources

    https://docs.microsoft.com/en-us/nuget/tools/cli-ref-sources https://gemfury.com/help/nuget-server/ ...