您的位置:首页 > 其它

hibernate框架(2)---Hibernate的核心API

2017-03-01 13:37 302 查看
[b]Hibernate的核心API[/b]

一般我们通过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语法,但是完全面向对象的

举例

//条件查询
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();
}


条件查询
这篇文字就讲到这了,欢迎大家多多指点,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: