Hibernate的核心API

一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解:

 1  public void testInsert() {
2 //(1) 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
3 Configuration configuration = new Configuration().configure();
4 //(2)创建会话工厂
5 SessionFactory sessionFactory = configuration.buildSessionFactory();
6 //(3) 创建会话
7 Session session = sessionFactory.openSession();
8 //(4) 开启事务
9 Transaction transaction = session.beginTransaction();
10
11 /*
12 *编写自己的逻辑代码
13 */
14
15 // 提交事务
16 transaction.commit();
17 session.close();
18 sessionFactory.close();
19 }

  (1) 实例化配置对象 configuration 

这一步是用来加载核心配置文件

    核心配置有两种:
      hibernate.properties
        加载:Configuration configuration = new Configuration();
      hibernate.cfg.xml:
        加载:Configuration configuration = new Configuration().configure();

 (2)创建会话工厂  sessionFactory 

     Configuration对象根据当前的配置信息生成 SessionFactory对象,

SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句

    SessionFactory 对象是线程安全的,SessionFactory还负责维护Hibernate的二级缓存,

SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象

 (3)创建会话 session对象(相当于 JDBC的 Connection)

Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,是线程不安全的

所有持久化对象必须在 session 的管理下才可以进行持久化操作,Session 对象有一个一级缓存

显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处,持久化类与 Session 关联起来后就具有了持久化的能力,

Session维护了Hiberante一级缓存.

session对象提供了许多的方法来实现增删改差:

save()/persist()         :添加
    update()         :修改
    saveOrUpdate()      :增加和修改对象
    delete()          :删除对象
    get()/load()       :根据主键查询
    createQuery()      :创建一个Query接口,编写HQL语句
    createSQLQuery()   :创建一个SQLQuery接口,编写SQL语句数据库操作对象
    createCriteria()     :返回一个Criteria接口.条件查询

(4)提取工具类

因为我们在项目开发中经常需要进行相关增删改查的操作,所以都需要这个session对象,这个时候我们可以把她变成一个工具类

 public class HibernateUtils {

     private static Configuration configuration;

     private static SessionFactory sessionFactory;

     static{
configuration=new Configuration().configure(); sessionFactory=configuration.buildSessionFactory();
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
/*
*通过这个工具类,只要你每次HibernateUtils.getSession
*就可以获得session对象
*/

(5) 开启事务 Transaction 对象

  获得:Transaction tx = session.beginTransaction();

  常用方法:
    commit() :提交相关联的session实例
    rollback() :撤销事务操作
    wasCommitted() :检查事务是否提交

  如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务

6.Query 对象
  Query代表面向对象的一个Hibernate查询操作
  session.createQuery 接收一个HQL语句
  HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的

举例

 //1.查询所有的数据
public void testQuery(){
//这里就是通过足记编写的工具类,来获得session对象
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); String hql="from Customer"; //类名 Query query =session.createQuery(hql); List<Customer> customers=query.list();
System.out.println(customers); transaction.commit();
session.close();
}
}

查询所有的数据

   //批量插入数据
public void testBathInsert(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); for(int i=0;i<1000;i++){
Customer customer =new Customer();
customer.setName("小明_"+i);
customer.setAddr("余杭区_"+i);
customer.setCity("杭州_"+i);
customer.setAge(i);
session.save(customer);
}
transaction.commit();
session.close();

批量插入数据

 //分页查询
public void testQueryByPage(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); //查询所有数据
String hql=" from Customer";
Query query =session.createQuery(hql); //设置查询条件
query.setFirstResult(20);//设置开始查询的位置
query.setMaxResults(20);//要查询的长度 List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}

分页查询

 //通过select关键字 查询指定的属性和对应的列
public void testQuerySelect(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction();
//这里既然是new Customer(name,age),那么就需要通过这样的构造函数
String hql="select new Customer(name,age) from Customer"; Query query =session.createQuery(hql); List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}

选择特定的列

 //通过where条件
public void testQueryParamter(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); String hql="from Customer where name=? and age=?"; Query query =session.createQuery(hql);
query.setParameter(0, "小明_4");
query.setParameter(1, 4); List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}

where条件查询

7.Criteria(条件查询接口)

可以实现和Query一样的效果

举例

   // 查询所有
public void testQueryAll() { // 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction();
//
Criteria criteria =session.createCriteria(Customer.class); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();
}

查询所有 

    //分页查询
public void testQueryByPage(){
// 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction(); Criteria criteria =session.createCriteria(Customer.class);
criteria.setFirstResult(30);
criteria.setMaxResults(20); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();

分页查询

 //条件查询
public void testQueryByCondition(){
// 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction();
Criteria criteria =session.createCriteria(Customer.class); //创建条件对象
Criterion criterion =Restrictions.eq("name", "小明_4"); //把查询条件对象加载到查询对象
criteria.add(criterion); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();
}

条件查询

这篇文字就讲到这了,欢迎大家多多指点,谢谢!

hibernate框架(2)---Hibernate的核心API的更多相关文章

  1. hibernate框架学习笔记3:API详解

    Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...

  2. hibernate框架(1)---Hibernate增删改查

    Hibernate增删改查 1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获 ...

  3. JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能

    使用Hibernate开发用户注册功能: 用户在register.jsp表单成功后,页面跳转到login.html,数据库中会存放用户注册的信息 <%@ page language=" ...

  4. Hibernate框架笔记01_环境搭建_API_CRUD

    目录 1. Hibernate框架的概述 1.1 什么是框架 1.2 经典三层架构 1.3 Hibernate框架 2 Hibernate入门 2.1 下载Hibernate的开发包 2.2 创建项目 ...

  5. Hibernate框架基础

    Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...

  6. Hibernate框架之入门

    1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...

  7. Hibernate框架学习笔记

      Hibernate 是一个 JDO( Java Data Objects)工具.它的工作原理是通过文件把值对象(Java对象)和 数据库表之间建立起一个映射关系,还提供数据查询和获取数据的方法. ...

  8. Struts2,Spring,Hibernate框架的优缺点

    Struts2,Spring,Hibernate框架的优缺点 Struts2框架(MVC框架)的优点如下:         1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现:   ...

  9. Hibernate框架简介(二)基本使用增、删、改、查

    一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...

随机推荐

  1. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

    pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...

  2. @ReequestParam

    @RequestParam:传递参数,即将请求参数区数据映射到功能处理方法的参数上 eg. public String queryUserName(@RequestParam String usern ...

  3. java33

    1.面向接口编程:将实现类对象(键盘鼠标)赋值给接口类型的变量(USB) interface修饰的类名称 好处:调用时可以是一个方法体即可(实现通用编程) 2.内部类:在类中定义了一个类 ------ ...

  4. Sql Server免域,异地备份

    --先决条件 开启xp_cmdshellEXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_c ...

  5. php如何实现原址排序数组使奇数位于偶数前面(代码)

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1.遍历数组,判断元素奇数偶数 ...

  6. android各种笔记

    一.生成key http://blog.csdn.net/anyanyan07/article/details/53493785 二.mac os项目变大 删除 项目中app->build文件夹 ...

  7. 2019浙大校赛--A--Thanks, TuSimple!(简单模拟题)

    这题前三段都是一堆吹爆赞助商的屁话,正式题目在图片下边,一个简单模拟题. 题目大意: 有n个男生,m个女生在进行舞会,其中一部分男生祥和比自己矮的女生跳舞,一部分男生想和比自己高的女生跳舞,一部分女生 ...

  8. 使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)

    zhuan:https://segmentfault.com/a/1190000002697929 本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称 P2V .采用 ...

  9. VS2017 处理 Rdlc , microsoft report viewer 轻量级报表处理(WPF CS客户端版本)

    VS 2017没有安装处理Rdlc的包,需要手动安装: 点击主菜单中Tools 下拉菜单中 扩展和升级: 点选左侧Online  ,然后在右侧输入rdlc进行查询,然后 Download 下载安装 M ...

  10. web实验博客3.css-position

    css-position属性为块级元素的定位提供了可能,今天我将讲述我所了解的position属性. div.h.p元素都可以称为块级元素,display属性可以改变其框类型,其值可以对框进行设置,默 ...