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. c语言实验一

    #include <stdio.h> int main(){ int a,b,sum; a=123; b=456; sum = a + b; printf("sum is %d\ ...

  2. Vue history模式支持ie9

    vue 路由里面的history能让浏览器显示平常一样的链接,可以去掉#这种,但是在ie9下面会强制变成hash,因为history不支持ie9自动降级,可能就会影响美感,解决:可以在路由里面添加fa ...

  3. 移动端各种滚动场景需求的插件better-scroll

    移动端各种滚动场景需求的插件: 文档地址: better-scroll:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better- ...

  4. Unity3D协程yield的理解

    Unity3D的协程概括地将就是:对于一段程序,你可以加上yield标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码.协程的作用:①延迟一段时间执行代码.②等某个操作完成之后再执行 ...

  5. php5.6,Ajax报错,Warning: Cannot modify header information - headers already sent in Unknown on line 0

    php5.6ajax报错 Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be remo ...

  6. Maths | 病态问题和条件数

    目录 1. 概念定义 1.1. 病态/ 良态问题 1.2. 适定/ 非适定问题 1.3. 良态/ 病态矩阵和条件数 2. 病态的根源 3. 计算条件数的方法 3.1. 与特征值的关系 3.2. 与奇异 ...

  7. Windows与系统信息相关的DOS命令

    首先,以管理员身份打开CMD命令框, 输入 start msinfo32:回车之后,出现一个弹窗,上面有大部分的系统信息:系统版本,电脑名称,BIOS,CPU,内存等: wmic bios:显示BIO ...

  8. 第4周小组作业:WordCount优化

     Github项目地址:https://github.com/chaseMengdi/wcPro stage1:代码编写+单元测试 PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分 ...

  9. HDU - 1241 Oil Deposits 经典dfs 格子

    最水的一道石油竟然改了一个小时,好菜好菜. x<=r  y<=c  x<=r  y<=c  x<=r  y<=c  x<=r y<=c #include ...

  10. 学习Python第四天

    关于剩下的数据类型:字符串 字符串是有序的,不可变的(不可变的意思是指将变量a重新赋值后不会覆盖原来的值,而是在内存中开辟了一块新的内存地址,存储变量的值) 字符串的各种方法: 1,将字符串中的大写变 ...