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系列笔记(1)---Hibernate增删改查

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

  2. hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等

    核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...

  3. Hibernate 系列 03 - 使用Hibernate完成持久化操作

    引导目录: Hibernate 系列教程 目录 康姆昂,北鼻,来此狗.动次打次,Hibernate继续走起. 目录: 使用Hibernate实现按主键查询 使用Hibernate实现数据库的增.删.改 ...

  4. hibernate学习笔记之四 Hibernate的增删改查

    采用JUnit测试,继承TestCase import java.util.Date; import junit.framework.TestCase; import org.hibernate.Se ...

  5. Hibernate学习笔记(六) — Hibernate的二级缓存

    我们知道hibernate的一级缓存是将数据缓存到了session中从而降低与数据库的交互.那么二级缓存呢? 一.应用场合 比方.在12306购票时.须要选择出发地与目的地,假设每点一次都与数据库交互 ...

  6. hibernate系列笔记(3)---持久化对象

    持久化对象 再讲持久化对象之前,我们先来理解有关session中get方法与 load方法区别: 简单总结: (1)如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库 ...

  7. hibernate学习笔记之一 hibernate简介

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架 hibernate可以自动生成SQL语句,自 ...

  8. 笔记-Nodejs中的核心API之Events

    最近正在学习Node,在图书馆借了基本关于Node的书,同时在网上查阅资料,颇有收获,但是整体感觉对Node的理解还是停留在一个很模棱两可的状态.比如Node中的模块,平时练习就接触到那么几个,其他的 ...

  9. JBoss 系列二十一:JBossCache核心API

    内容简介 本处介绍JBossCache相关的主要API,我们目的通过本部分描述,读者可以使用JBossCache API,在自己的应用中使用JBossCache. Cache接口 Cache 接口是和 ...

随机推荐

  1. PLSQL的一些事儿

    每一个软件都是设计精妙的 plsql就可以使用一些简单代码代替长的语句,比如s=SELECT * FROM 数据插入报错: 原因: 一般情况下,数据库的NLS_CHARACTERSET 为AL32UT ...

  2. [NOI2011]阿狸的打字机(好题!!!!)

    2785: [NOI2011]阿狸的打字机 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][We ...

  3. mysql 子查询优化

    今天用到要查询七天内都没有装机的门店信息,首先想到了用not in,先把装机的userid查出来,然后再id not in,但是这样就必须使用子查询,数据量少还可以,数据量大了的话,肯定效率特别低,因 ...

  4. YII 1.0 上传文件

    $upload = CUploadedFile::getInstance($articleModel,'thumb'); if($upload){ $name = date("Ymd&quo ...

  5. cvc-complex-type.2.4.c: The matching wildcard...

    在家里的电脑好好的,在单位的就不行,需要把web app libraties提到 最前面,然后clean一下项目

  6. win7如何安装mircosoft SDKs

    WIN7不能安装SDK 7.1是因为系统程序里含Microsoft .NET Framework 4 Extended和Microsoft .NET Framework 4 Client Profil ...

  7. ZeroMQ 的模式

    在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多.Erlang ,Go 都使用这一手段来让并行任务之间协同工作. 最近读完了 ZeroMQ 的 Guide.写的很 ...

  8. js运算符单竖杠“|”的作用

    在js整数操作的时候,相当于去除小数点,parseInt.在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注: 1. Math.ceil()用作向上取整. 2. M ...

  9. Bootstrap入门(七)组件1:字体图标

    Bootstrap入门(七)组件1:字体图标   包括200个来自 Glyphicon Halflings 的字体图标,允许 Bootstrap 免费使用. 部分可用图标截图: 所有图标都需要一个基类 ...

  10. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...