ORM进阶之 ORM简单介绍

ORM进阶之Hibernate
简单介绍及框架搭

ORM进阶之Hibernate 的三大对象

我们在上一篇博客中讲到了怎样搭建一个Hibernate框架, 提到Hibernate我们就不得不说他的三大对象,Configuration,SessionFactory , Session 。下边我们就分别来解释一下这三大对象!

Configuration对象

Configuration类用来管理我们的配置文件的信息的,通过它。我们能够通过创建一个configuration实例来管理对应的配置文档,可是通常我们仅仅创建一个configuration实例。

创建过程
Configuration cfg =new Configuration().configure();   我们也能够在configure()方法中指定hbm.xml文件的路径。

SessionFactory对象

SessionFactory
顾名思义,他是创建session的工厂。用来创建session对象,令你感到奇怪的是SessionFactory并非轻量级的。实际上它的设计者的意图是让它能在整个应用中共享。典型地来说。一个项目通常仅仅须要一个SessionFactory就够了,可是当你的项目要操作多个数据库时。那你必须为每一个数据库指定一个SessionFactory。

SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自己主动生成的SQL语句和一些其他的映射数据,还缓冲了一些将来有可能反复利用的数据。

一个SessionFactory实例相应一个数据存储源。应用从SessionFactory中获得Session实例。SessionFactory它是线程安全的,这意味着它的同一个实例能够被应用的多个线程共享。

SessionFactory的缓存可分为两类:内置缓存和外置缓存。

SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同一时候也缓存了Hibernate自己主动生成的SQL语句等;

SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。

外置缓存能存放大量数据库数据的拷贝。外置缓存的物理介质能够是内存或者硬盘

Session对象

Session对象的简单介绍

Session接口对于Hibernate   开发者来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类。创建和销毁它都不会占用非常多资源。

这在实际项目中确实非常重要,由于在客户程序中,可能会不断地创建以及销毁Session对象,假设Session的开销太大。会给系统带来不良影响。

但值得注意的是 Session对象是非线程安全的,因此在你的设计中。最好是一个线程仅仅创建一个Session对象。

   在Hibernate的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。我们能够将session想象成一个持久对象的缓冲区。Hibernate能检測到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,由于它包括这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate   的session不同于JSP应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate中的session,而我们以后会将HttpSesion对象称为用户session。

怎样获得Session对象

首先创建SessionFactory对象,应用server假设訪问多个数据源时,则应该产生多个SessionFactory;可是只为了服务与某个请求时,不要创建一个新的SessionFactory,由于创建SessionFactory须要消耗大量的资源.然后依据SessionFactory再创建Session对象 创建session对象有两种方式,各自是openSession()和getCurrentSession(),openSession,打开须要关闭。可是getCurrentSession
是不须要关闭的。他会自己主动的关闭!

<span style="font-size:18px;">Session session=sessionFactory.openSession();

Transaction tx;
try{
tx=session.beginTransaction();//開始一个事务
.......//运行事务
tx.commit();
}catch(Exceptione){//假设出现异常就撤消事务
if(tx!=null)
tx.rollback();
throw e;
}
Finally{ //无论事务运行成功与否,最后都关闭Session而且放在finally中以提高安全性
session.close();
}</span>

我们先通过configuration 读取数据库的一系列的配置文件,然后通过这一系列的配置信息。创建一个创建数据库连接的工厂SessionFactory,然后通过SessionFactory 我们就能够拿到详细的链接的数据库的对象,对数据库进行操作!

ORM进阶之Hibernate 的三大对象的更多相关文章

  1. ORM进阶之Hibernate中对象的三大状态解析

    ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...

  2. ORM进阶:Hibernate框架搭建及开发

    本节将開始.使用hibernate搭建持久层.当然在决定用不用之前,还请斟酌一下是否使用.了解一下Hibernate的优缺点. Hibernate优劣对照 Hibernate是一个持久的ORM框架.首 ...

  3. ORM进阶:Hibernate的优劣对照

    hibernate是一种是轻量级的ORMapping框架.学过EntityFramework的.会感觉挺亲切的. 对于各种层次程序猿对数据库的设计: 小菜程序员这样做:首先考虑数据的存储,对于功能的实 ...

  4. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  5. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

  6. Hibernate学习之对象持久化

    1.  对象持久化 对象的持久化就是把内存中对象形式的业务数据,转换成数据库中的关系数据形式的业务数据.广义理解,对象的持久化还包括内存与关系数据库之交换业务数据的各种操作. 2. 对象持久化模式 1 ...

  7. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

  8. Hibernate (开源对象关系映射框架)

    一.基本介绍1.它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行: Hibern ...

  9. Java进阶2 数组内存和对象的内存管理知识

    Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...

随机推荐

  1. Codeforces 189A. Cut Ribbon

    题目链接:http://codeforces.com/problemset/problem/189/A 题意: 给你一个长度为 N 的布条, 再给你三个长度 a, b , c.你可以用剪刀去剪这些布条 ...

  2. 洛谷——P1033 自由落体

    P1033 自由落体 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公 ...

  3. 19、Django实战第19天:课程列表页

    从今天开始,我们将完成"公开课"课程的相关功能..... 1.把course-list.html复制到templates目录下 2.这个页面的头部.底部与之前定义的base.htm ...

  4. Scrum 实施中遇到的典型问题

    Scrum实施过程中遇到的典型问题,答案综合了网络中的借鉴和自己实践中的体会. Q1:技术负债在敏捷团队中会快速的膨胀. A1:由于敏捷开发过程没有充足的事前(up-front)设计,技术负债是不可避 ...

  5. Problem J: 求方程的解——C语言初学者百题大战之十五

    #include<stdio.h> #include<math.h> int main() { float a,b,c,x1,x2,delta; scanf("%f ...

  6. [shell 编程] if [ $# -eq 0 ]该语句是什么含义?

    $0: shell或shell脚本的名字$*:以一对双引号给出参数列表$@:将各个参数分别加双引号返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后 ...

  7. [Git] 根据commiter过滤该用户的所有提交

    git log --pretty=oneline --author="xxxx" -(n) 仅显示最近的 n 条提交 --since,--after 仅显示指定时间之后的提交 -- ...

  8. [Android 4.4.4] 泛泰A850 三版通刷 Mokee4.4.4 KTU84P 20140626 RC2.2 by syhost

    RC2.1版地址: http://blog.csdn.net/syhost/article/details/34051923 2014.06.26 RC2.2 更新内容: 1 修复相机录像无声的bug ...

  9. CocoaPods安装小步骤

    CocoaPod的安装和使用步骤: 1.开启 terminal终端 2.移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3.使用新 ...

  10. 【前后台分离模式下,使用OAuth Token方式认证】

    AngularJS is an awesome javascript framework. With it’s $resource service it is super fast and easy ...