Hibernate API 详解

1.Configuration

 功能:配置加载类,用于加载主配置,orm元数据加载

   .创建:

 Configuration conf = new  Configuration();

   读取指定配置文件(加载主配置文件,即我们经常创建的"hibernate.cfg.xml")  

    从下图中可以发现有很多关于读取方法的重载。。。

    虽然有这么多重载,但是一般咱就用无参构造方法把,默认找到src下的hibernate.cfg.xml文件

    

 conf.configure();

  当然可以在创建Configuration对象的时候直接执行:

  

Configuration conf = new  Configuration().configure();

 

    它们的源码如下:

 

2.SessionFactory

  功能:用于创建数据库核心对象session对象的工厂,简单的说,功能就只有一个-------------------创建session对象

    注意:

      1.sessionFactory负责保存和使用所有配置信息,消耗内存非常大

      2.sessionFactory属于线程安全的对象设计(不同的用户对应不同的session)

    结论:保证在web项目中,只创建一个sessionFactory

 读取完主配置文件(hibernate.cfg.xml)后自然要拿到SessionFactory    

SessionFactory sf = conf.buildSessionFactory();

3.session对象

  创建:

  ①:一个新的session对象

Session session = sf.openSession();

  ②:获得一个与线程绑定的session对象

Session cSession = sf.getCurrentSession();

      ①插入

        注意:

          增删改查操作之前要开启事务,结束后要提交事务

          最后要session释放资源(后面的操作我就不完整写了)

        拿到对象,直接用save方法就行了

        Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setCust_id(2);
     customer.setCust_name("测试");
session.save(customer);
tx.commit();
    session.close();

      ②根据主键查询 

Customer customer = session.get(Customer.class, 2);

      ③修改

      拿到对象然后调用update方法()

Customer customer = session.get(Customer.class, 2);
customer.setCust_name("测试2");
session.update(customer);

      发现一个"插入或者修改" 

      ④删除

       首先拿到对象,然后调用delete()

Customer customer = session.get(Customer.class, 2);
session.delete(customer);

4.自定义Hibernate工具类

   对于SessionFactory,提到最好只创建一个,其次就是封装重复代码,提高代码的复用性 

package deep.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; /**
* Hibernate工具类
* @author DeepSleeping
*
*/
public class HibernateUtils { private static SessionFactory sessionFactory; static{
Configuration conf = new Configuration().configure();
sessionFactory = conf.buildSessionFactory(); } public static Session getSession(){
return sessionFactory.openSession();
} public static Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
}

  

  

Hibernate入门(二)——hibernateAPI详解的更多相关文章

  1. Hibernate(二)之Hibernate-api详解

    一.Hibernate体系结构 二.Hibernate-api详解 2.1.Configuration配置对象 Configuration是用来加载配置文件的 我们Hibernate中主要有两个配置文 ...

  2. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  3. [转]hibernate缓存机制所有详解

    以下文章来自http://www.blogjava.net/tbwshc/articles/380013.html Hibernate 所有缓存机制详解 hibernate提供的一级缓存 hibern ...

  4. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  5. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  6. [转]hibernate三种状态详解

    本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼   分类: hibernate ...

  7. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  8. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  9. 经典Spring入门基础教程详解

    经典Spring入门基础教程详解 https://pan.baidu.com/s/1c016cI#list/path=%2Fsharelink2319398594-201713320584085%2F ...

随机推荐

  1. ASP.NET Core 微服务初探[2]:熔断降级之Polly

    当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...

  2. eclipse运行spark程序时日志颜色为黑色的解决办法

    自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...

  3. Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围

    操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少 ...

  4. Day3:html和css

    Day3:html和css 多类名选择器 样式的显示效果是跟html元素中的类名先后顺序无关,而是跟css样式的书写上下顺序有关. <!DOCTYPE html> <html lan ...

  5. 如何实现一个基于 jupyter 的 microservices

    零.背景: 现有基于 Node.js 的项目,但需要整合 Data Science 同事的基于 python(jupyter) 的代码部分,以实现额外的数据分析功能.于是设想实现一个 microser ...

  6. 几种归一化方法的概念及python实现

    一 (0,1)标准化: 这是最简单也是最容易想到的方法,通过遍历feature vector里的每一个数据,将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据 ...

  7. 机器学习入门01 - 框架处理(Framing)

    原文链接:https://developers.google.com/machine-learning/crash-course/framing (监督式)机器学习的定义:机器学习系统通过学习如何组合 ...

  8. JS中部分不常用小功能记录

    1.serializeArray()在表单中使用,必须在form标签中,需要手机的元素要有name属性.源生JS将对象转成json   resulrMK = JSON.stringify(resulr ...

  9. mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)

    一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同 ...

  10. Win32线程安全问题.同步函数

    线程安全问题.同步函数 一丶简介什么是线程安全 通过上面几讲.我们知道了线程怎么创建.线程切换的原理(CONTEXT结构) 每个线程在切换的时候都有自己的堆栈. 但是这样会有安全问题. 为什么?  我 ...