1.Configuration

  1.1 加载核心配置文件,

  加载hibernate.properties时:Configuration configuration = new Configuration();

  加载hibernate.cfg.xml时:Configuration configuration = new Configuration().configure();

  1.2  加载映射文件(不过,一般映射文件都配置在核心配置文件中,该方法用少)

  configuration.addResource("com/itheima/hibernate/domain/Customer.hbm.xml");

  configuration.addClass(Customer.class);//实体类必须和映射文件在同一个包中才行

2.SessionFactory

  SessionFactory负责管理Session,管理连接池,管理Hibernate二级缓存。是一个重量级的, 线程安全的对象.

3.session

  Session是Hibernate程序与数据库之间的桥梁。完成CRUD的操作。Session是一个单线程的对象,内部维护了Hibernate的一级缓存。

hibernate的一级缓存--->session级别的缓存

  一级缓存是session级别的缓存, 同session的声明周期一直. 一级缓存实际上是由session中的一组集合构成的.

  一级缓存的主要作用: 减少对数据库的访问次数

  执行原理: 在session中执行查询操作时,首先会从缓存中获取结果, 如果缓存中没有, 则去数据库中查询, 并将查询结果往缓存中存放一份; 如果缓存中有, 则直接从缓存中获取.

  一级缓存快照区: 在存放在缓存中的数据会在session一级缓存的快照区存放一份, 当数据发生变更时, 缓存中的数据会被修改, 而快照区的数据还是原来的数据, 在事务提交时, 会对比一级缓存和快照区, 如果数据不一致, 则会发送sql语句更改数据库中数据; 如果数据一致,  则不对数据库进行更新操作. 因此, 对于持久态的对象,  即使没有显示的添加update语句, 如果数据发生变化, 在提交事务时, 会自动更新数据库.

  session保存一个对象: session.save(entity);

  session修改对象:session.update(entity);

  session删除对象session.delete(entity);

  session查询对象:session.get()和session.load();

get()方法和load()方法的区别

  1.   加载机制不同. get方法采用的是立即加载,执行到代码的时候,立即发送SQL语句进行查询;  而load方法采用的延迟加载(Lazy)机制, 执行该代码的  时候不会马上发送SQL语句,只有真正使用该对象的时候才会发送SQL语句查询.

  2.    查询结果不同. get方法查询得到的是对象本生,  而load方法查询返回的一个代理对象;

  3.      查询没有找到时的处理应答不同, get方法返回的是null;  而load方法则会抛出异常ObjectNotFoundException;

4. Query:支持HQL查询

获得Query接口可以通过session.createQuery(String hql);获得。

HQL:Hibernate Query Language。Hibernate查询语言。语法与SQL是类似的。HQL中查询的是对象。

public void demo2(){

  //HibernateUtils为编写的获取创建sessionFactory和获取session的工具类

Session session = HibernateUtils.getCurrentSession();

Transaction tx = session.beginTransaction();

// HQL的基本查询

Query query = session.createQuery("from Customer");

List<Customer> list = query.list();

for (Customer customer : list) {

System.out.println(customer);

}

tx.commit();

}

5.Criteria:支持QBC查询

获得Criteria接口可以通过session.createCriteria();获得。

QBC:Query By Criteria。条件查询。一种更加面向对象的方式.

  统计查询

      Criteria criteria = session.createCriteria(Customer.class);

      criteria.setProjection(Projections.rowCount());

Long count = (Long) criteria.uniqueResult();

5.1 离线条件查询 DetachedCriteria.

   DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);

detachedCriteria.add(Restrictions.like("cust_name", "%强%"));

Session session = HibernateUtils.getCurrentSession();

Transaction tx = session.beginTransaction();

Criteria criteria = detachedCriteria.getExecutableCriteria(session);

List<Customer> list = criteria.list();

for (Customer customer : list) {

System.out.println(customer);

}

tx.commit();

}

6.SQLQuery:支持SQL查询

获得SQLQuery接口可以通过session.createSQLQuery();获得。

SQLQuery:通过SQL语句进行查询。

Hibernate中的常用API的更多相关文章

  1. 大数据(5) - HDFS中的常用API操作

    一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...

  2. JavaWeb_(Hibernate框架)Hibernate中重要的api

    Hibernate中重要的api Configuration SessionFactory Session(重点) Transaction 在Dao层中UserDao.java使用Hibernate向 ...

  3. (5)java中的常用API,其实就是一些常见类的使用

    String方法来介绍 两种声明: 1.String str="1";这种首先检查常量池中是否已经有该常量字符串"1" 如果有的话,不会创建新的常量字符串,若有 ...

  4. lua中string常用api

    local a="abcdefgbbb" string.sub(a,1,3) 字符串截取 返回截取的字符串           print(string.sub(a,1,3))   ...

  5. Hibernate总结之常用API

    1. Configuration Configuration是用来读取配置文件,从配置文件中构件SessionFactory的. SessionFactory sessionFactory=new C ...

  6. ios开发中一些常用API总结

    转载于:http://www.cnblogs.com/zhucunliang/archive/2013/11/09/3416039.html //1.init初始化 NSString * str1 = ...

  7. compass General 常用api学习[Sass和compass学习笔记]

    compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...

  8. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

  9. hibernate常用API详解

    根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助. 以下示例均以两张表为例:member和userinfo ...

随机推荐

  1. OpenCV中OpenMP的使用

    vs2010中调用openMP,并添加头文件#include<omp.h> 代码来源: 作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ #inclu ...

  2. 网站开发进阶(十一)如何将一个jsp页面嵌套在另一个页面中

    如何将一个jsp页面嵌套在另一个页面中 这个在做网页中常要用到,有些通用的内容可集中放在一个页面文件中,其它要用到这些内容的页面只需要包含(引用)这个通用文件即可.这样便于维护,如果有很多网页,当通用 ...

  3. MTK平台 Android4.0.3 定制关机动画

    实现效果是这样的,长按电源键弹出关机对话框,选择关机项将呈现关机动画和音乐直到正常关机完毕,下面说说具体思路及实现代码 找到长按电源键控制代码 /frameworks/base/policy/src/ ...

  4. VS2010 / MFC + OpenCV 2.4.9打开图片

    原文地址:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=30832 第一部分,参考http://jingyan.baidu.com ...

  5. Leetcode_260_Single Number III

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/50276549 Given an array of numb ...

  6. css左侧固定宽度右侧自适应

    左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到 ...

  7. CKEditor5 + ckfinder3(php)

    CKEditor5资源下载,这里我们选择ckeditor5-build-classic下载: https://ckeditor.com/ckeditor-5-builds/download/ ckfi ...

  8. subsets(子集)

    Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...

  9. EF中关于TransactionScope的使用

    前提条件 TransactionScope类需要引用System.Transactions; 数据库环境及需求 现在假设有两个表如图:                                 ...

  10. 人手一份核武器 - Hacking Team 泄露(开源)资料导览手册

    https://zhuanlan.zhihu.com/p/20102713 author:蒸米 0x00 序 事先声明本人并不是全栈安全工程师,仅仅是移动安全小菜一枚,所以对泄漏资料的分析难免会有疏忽 ...