Java之旅hibernate(3)——第一个hibernate的样例

 在解说样例之前。我们首先来理解一下hibernate的工作原理。理解原理将会帮助我们更好地理解hibernate和运用hibernate。

 1.      原理图

  利用hibernate进行数据的持久化操作,必定离不开与数据库打交道。依据上张图我们来看看hibernate是怎样工作的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

  ?  Congratulation

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

  一个使用hibernate的程序必须引入这三个核心文件。

  Configuration读取Hibernate的配置文件和映射文件里的信息。即载入配置文件和映射文件。并通过Hibernate配置文件生成一个多线程的SessionFactory对象;

  Configurationcfg = new Configuration().configure();这是读取配置的写法。

  具体功能的具体解释:

  Configuration类负责配置并启动Hibernate。创建SessionFactory对象。在Hibernate的启动过程中。Configuration类的实例首先定位映射文档位置、读取配置。然后创建SessionFactory对象。

  ?  SessionFactory

  这是创建session必须的对象,也就是说SessionFactory对象生成一个线程Session对象。详细的获取是:

        
SessionFactoryfactory = cfg.buildSessionFactory();

  详细作用:

  SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理。并负责创建Session对象。这里用到了工厂模式。须要注意的是SessionFactory并非轻量级的,由于普通情况下,一个项目通常仅仅须要一个SessionFactory就能够了。当须要操作多个数据库时。能够为每一个数据库指定一个SessionFactory。SessionFactroy产生Session
实例的工厂。

  ?  Session

  session =factory.openSession();

  Session对象生成Query对象或者Transaction对象。可通过Session对象的get(),load(),save()。update()。delete()和saveOrUpdate( )等方法对PO(PO是持久化对象)进行载入、保存、更新、删除等操作;在查询的情况下。可通过Session 对象生成一个Query对象,然后利用Query对象运行查询操作;假设没有异常,Transaction对象将提交这些操作结果到数据库中。

  详细作用:

  Session接口负责运行被持久化对象的操作,它有get( ),load( ),save( ),update( )和delete( )等方法用来对PO 进行载入、保存、更新及删除等操作。

但须要注意的是Session对象是非线程安全的。

  ?  Transaction

  在hibernate中。session创建事务对象。而且事务是没有自己主动提交的,我们仅仅能手动去控制。故而session中的事务须要我们手动开启和关闭。

  详细作用:

  Transaction接口负责事务相关的操作。用来管理Hibernate事务,它的主要方法有commit()和rollback(),能够使用Session的beginTransaction()方法生成。它是可选的,开发者也能够设计编写自己的底层事务处理代码。

  ?  Query

  Query接口负责运行各种数据库查询。它能够使用HQL语言,用来对PO进行查询操作。它能够使用Session的createQuery()方法生成

  ?  Hibernate的配置文件和映射文件

   配置文件

   Hibernate配置文件主要用来配置数据库连接參数,比如,数据库的驱动程序。URL,username和password、数据库方言等。它有两种格式:hibernate.cfg.xml和hibernate.properties。

   这两种的配置内容基本一致,仅仅是前者比后者在使用上面更加的方便而已。使得映射配置比之前更加的方便。

hibernate.cfg.xml能够在其<mapping>子元素中定义用到的xxx.hbm.xml 映射文件列表。而使用hibernate.properties则须要在程序中以硬编码方式指明映射文件。

在普通情况下。hibernate.cfg.xml 是Hibernate的默认配置文件。

   映射文件

   而映射文件是:映射文件(xxx.hbm.xml)用来把PO与数据库中的数据表、PO之间的关系与数据表之间的关系。以及PO的属性与表字段一一映射起来,它是Hibernate的核心文件。

   讲到这里不得不提PO,
PO就是持久化对象(Persistent Objects,PO)。能够是普通的JavaBean,惟一特殊的是它们与(仅一个)Session相关联。JavaBean在Hibernate中存在三种状态:暂时状态(transient)、持久化状态(persistent)和脱管状态(detached)。当一个JavaBean对象在内存中孤立存在不与数据库中的数据有不论什么关联关系时,那么这个JavaBean对象就称为暂时对象(TransientObject);当它与一个Session相关联时。就变成持久化对象(Persistent
Object);在这个Session被关闭的同一时候,这个对象也会脱离持久化状态。变成脱管对象(Detached Object)。能够被应用程序的不论什么层自由使用,比如,可用做与表示层打交道的传输数据对象(Data transfer Object)。

         关于hibernate的三种状态我们会在之后进行具体的解说。

 2.      代码展示

  不知不觉中说了这么多,代码展示仅仅好放到下一篇了~

时间: 2024-11-13 04:42:16

Java之旅hibernate(3)——第一个hibernate的样例的相关文章

新手上路之Hibernate:第一个Hibernate例子

一.Hibernate概述 (一)什么是Hibernate? Hibernate核心内容是ORM(关系对象模型).可以将对象自动的生成数据库中的信息,使得开发更加的面向对象.这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC.所以,Hibernate处于三层架构中的D层(持久层). (二)使用Hibernate的优点 1.Hibernate可以使用在java的任何项目中,不一定非要使用在java web项目中.因为Hibernate不需要类似于tomact这些容器的支持

JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MSC 替换了之前的 JMX Kernel 和 MicroContainer,它主要特定能够总结例如以下三点: 高并发容器(A highly concurrent state machine) 无多相位,设计简单(No multiple phases, much simpler) 不依赖 JMX 和 J

gdb系列之一 一个GDB会话样例

 翻译:shyboysby.spaces.live.com 本翻译遵从GPL.参见: gdb is free software, protected by the gnu General Public License (GPL). The GPL gives you the freedom to copy or adapt a licensed program-but every person getting a copy also gets with it the freedom to m

socket编程——一个简单的样例

从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client +++++++                                          ++++++++ 创建socket                                          创建socket +++++++                            

android一个上传图片的样例,包含怎样终止上传过程,假设在上传的时候更新进度条(一)

先上效果图: Layout为: <? xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent&qu

java基础入门-多线程同步浅析-以银行转账为样例

在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次执行活动.一个进程有一个或者多个线程 线程与进程的本质差别就是有么有数据共享空间.线程之间能够共享数据.进程不能够 以下进入主题:线程间的同步 因为如今业务流程添加.业务节点也添加.使用业务的人员也同一时候添加.这个时候就不可避免的出现并发问题,多个线程同一时候訪问操作某一个数据单元 我们以银行转账为例说明,以下先上代码: 建立一个银行的类,里面主要包含三个方法,一个是转账,一个是得

一个简单演示样例来演示用PHP訪问表单变量

首先编写表单页面orderform.html,用post方法请求服务端脚本文件:processorder.php orderform.html: <!DOCTYPE html> <html> <head lang="zh_CN"> <meta charset="UTF-8"> <title>订单页面</title> </head> <body> <h2>Jas

java多线程样例

这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别: package debug; import java.io.*;import java.lang.Thread; class MyThread extends Thread{ public int x = 0; public void run(){ System.out.println(++x); }} class R implements Runnable{ private int x = 0; public void ru

Java之旅hibernate(8)——基本关系映射

何为关系,何为映射,关系这个词想必大家都不陌生.比方你和老师之间是师生关系,你和父母之间是父子或者父女(母子或者母女关系). 关系是存在某种联系物体之间产生的.什么都是可能的.比方你和工具,你仅仅能使用工具,可是工具不能使用你.这种关系是单向的.可是换种说法.你拥有工具,工具也属于你,那么这种关系就是双向的了,此外一个人能够拥有多个工具,而且多个工具也能够是属于一个人的.还有就是多个人拥有多个工具,而且多个工具也属于人,依据这些特征,我们将关系分为下面几种: 单向关系: one2one,(一对一