一、Hibernate体系结构

  

二、Hibernate-api详解

  2.1、Configuration配置对象

    Configuration是用来加载配置文件的

   我们Hibernate中主要有两个配置文件,第一个是核心的配置文件,第二个是映射文件。

    

  2.2、SessionFactory工厂

    SessionFactory 相当于java web连接池,用于管理所有session
    获得方式:config.buildSessionFactory();
    sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
    SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题。

    

    SessionFactory与连接池的区别

      

    getCurrentSession()方法

    

  2.3、session对象

    用来操作数据库的。Sesion相当于JDBC中的Connection。我们通过session操作PO对象实现增删改查。

    2.3.1、增

      

    2.3.2、改  

      

    2.3.3、删

      

    2.3.4、查

      A.使用session中的get方法查询

      

    结果:

    B.使用session中的load方法

      load方法.返回一个代理对象,获得其内容时,会查询数据库,是每次访问属性都会查询数据库吗?

        答:不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过. 

      代理都是要基于接口的,用load方法返回的代理,就没有实现任何接口? 

        答:java中的动态代理是基于接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的.

           该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口.

    

    出现bug:

    分析:get和load的执行原理

      

    C.使用HQL语言查询数据库中表的所有记录

    

    D.使用Criteria查询所有数据库

    

    E.使用原生的SQL语句查询

    

    2.3.5、总结

    在增删改查中我们学习的方法有    

     session.save();
     session.update();
     session.delete();
     session.get();
     session.load(); 对比get
     session.createQuery();
     session.createCritieria();
     session.createSqlQuery();

  2.4、Transaction对象

      Transaction封装了事务的操作

       一般事务的操作中有:

          开启事务  beginTransaction()

          获得事务  getTransaction()

          提交事务  commit()

          回滚事务  rollback()

      

    细节处理

      

          从这里中我们使用getCurrentSession()方法获得一个事务,当你没有关闭这个事务的时候,

          当你再次获取事务,它们属于同一个事务。

  2.5、Query对象

    Query对象封装了HQL语句对象,且封装了查询的细节

    

  2.6、Criteria对象(了解)

    

    使用like查找

      

    一些基本的查询条件查询

    

  2.7、工具类

    我们知道在使用hibernate进行增删改查的时候都要获取到session,这导致代码的重用性很强,所以我们可以

    创建一个工具类去解决这个问题。   

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session; //完成Hibernate工具类
//封装配置文件读取操作
//封装Sessionfactroy创建操作
//封装session获得操作
public class HibernateUtils { private static SessionFactory sf; static{
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
sf = conf.buildSessionFactory();
//
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override
public void run() {
System.out.println("虚拟机关闭!释放资源");
sf.close();
}
})); } public static org.hibernate.Session openSession(){ //3 获得session
Session session = sf.openSession(); return session;
} public static org.hibernate.Session getCurrentSession(){
//3 获得session
Session session = sf.getCurrentSession(); return session;
} }

    

    

  

     

        

  

  

        

Hibernate(二)之Hibernate-api详解的更多相关文章

  1. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  2. 分享知识-快乐自己:Hibernate 中Criteria Query查询详解

    1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...

  3. Hibernate配置文件和映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  4. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  5. DOM API详解

    来源于:http://zxc0328.github.io/2016/01/23/learning-dom-part1/ https://zxc0328.github.io/2016/01/26/lea ...

  6. Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)

    一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...

  7. Android Developer -- Bluetooth篇 开发实例之四 API详解

    http://www.open-open.com/lib/view/open1390879771695.html 这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每 ...

  8. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验(一 ...

  9. Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合

    Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...

  10. --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能

    PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...

随机推荐

  1. Django实现用户注册登录

    学习Django中:试着着写一个用户注册登录系统,开始搞事情 =====O(∩_∩)O哈哈~===== ================= Ubuntu python 2.7.12 Django 1. ...

  2. angular.js学习笔记:实现商品价格计算实例

    <!DOCTYPE html> <html lang="en" ng-app> <!-- ng-app:初始化的指令 也可以解析局部--> &l ...

  3. 分别用C/C++实现栈

    用C语言的方式实现栈: #include <stdio.h> #include<stdlib.h> #include<assert.h> struct Link { ...

  4. 项目架构开发:数据访问层之Logger

    接上文 项目架构开发:数据访问层之Cache 本章我们继续ILogger的开发 ILogger.cs public interface ILogger { void Info(object messa ...

  5. 关于Storm Stream grouping

    在Storm中, 开发者可以为上游spout/bolt发射出的tuples指定下游bolt的哪个/哪些task(s)来处理该tuples.这种指定在storm中叫做对stream的分组,即stream ...

  6. Java代码审查工具findbugs的使用总结

    findbugs简介 Findbugs是一个Java代码静态分析工具,可以用它来检查源代码中可能出现的问题,以期尽可能在项目的初始阶段将代码问题解决. FindBugs检查的是类或者JAR文件即字节代 ...

  7. 第二章 mac上运行第一个appium实例

    一.打开appium客户端工具 1      检查环境是否正常运行: 点击左边第三个图标 这是测试你环境是否都配置成功了 2      执行的过程中,遇到Could not detect Mac OS ...

  8. ActiveMQ学习系列(四)----消息持久化到mysql

    前记:目前学习还比较杂乱,还未找到系统化地学习ActiveMq的方法.在网上看到消息持久化的demo,了解了一下,在此记录. 一.目前ActiveMq支持的持久化方法 url:http://activ ...

  9. Java面试07|Redis数据库

    1.Redis持久化的几种方式 (1)RDB(Redis DataBase)持久化 (2)AOF(Append Only File)持久化 2.Redis的缓存失效策略 主要涉及到expire对主键过 ...

  10. 跨专业学习编程的苦逼生活 QWQ嘤嘤嘤

    一串串小小的代码,竟然可以做出辣么多的东西,彻底颠覆了我的世界观.人生观.价值观. 话不多说,一个例子证明一切>>>> <!DOCTYPE html> <ht ...