一、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. Centos更换yum源

    Centos更换yum源 步骤如下: 备份原始源 cd /etc/yum.repos.d/ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/ ...

  2. 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用

    我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...

  3. Java中String类型的部分用法

    1.如何将字符串转换为整型数值? int i = Integer.parseInt("20"); 2.如何用“==”还是equals比较两个字符串? “==”是用来比较俩引用是不是 ...

  4. 如何用PHP做到页面注册审核

    用户注册后就有该条用户记录,你对用户表设一个"审核状态"字段,默认值设为"未审核",然后你写几句审核代码做成一个功能,按照你们的意愿若审核通过你把审核状态改为& ...

  5. 弹出层js要这样加才不会失效

    $('body').on('click','.check_eln',function(){    $('#eln_show').toggleClass('hidden'); });

  6. redux-form的学习笔记

    redux是一种常用的与react框架搭配的一种数据流架构,而伴随着redux的出现,也出现了许多基于redux开源的第三方库,而redux-form就是其中之一的开源组件库,到今天我写下这篇笔记为止 ...

  7. 《Machine Learning》系列学习笔记之第二周

    第二周 第一部分 Multivariate Linear Regression Multiple Features Note: [7:25 - θT is a 1 by (n+1) matrix an ...

  8. iOS开发RunLoop

    最近处于离职状态,时间也多了起来,但是学习还是不能放松,今天总结一下RunLoop,RunLoop属于iOS系统层的东西,还是比较重要的. 一.什么是RunLoop 字面意思看是跑圈,也可以看作运行循 ...

  9. SQLServer 数据库不能重命名的解决方案

    无法用排他锁锁定该数据库,以执行该操作 SQL Server2008 因为可能其他用户在占用着该数据库 解决办法为 把数据库先改为单用户的,再改数据库名,再改回多用户的 USE [master] GO ...

  10. extern “ C”的含义

    见博客:http://www.cnblogs.com/xulei/archive/2006/11/12/558139.html