Hibernate——核心组件(二)

来源:互联网 发布:sql注入工具下载 编辑:程序博客网 时间:2024/04/30 09:08

上篇博客大致的介绍了Hibernate的一些基本概念,这篇博客在简单的介绍几个Hibernate的核心组件。分别简单介绍一下:

  • Configuration接口:装载配置类,负责配置并启动Hibernate,创建SessionFactory对象

Configuration用于配置并启动Hibernate:动态配置Hibernate的属性,创建相应SessionFactory实例。

//加载Hibernate的配置文件 Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");//还可以加载映射文件 Configuration config = new Configuration().addFile("TRegister.hbm.xml");//方法一 Configuration config = new Configuration().addClass(hibernate.PO.TRegister.class);//方法二 Configuration config = new Configuration().addURL(Configuration.class.getResource("TRegister.hbm.xml"));//方法三

  • SessionFactory接口:初始化Hibernate,创建Session对象

一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。对于一般的单数据库应用来说,只需要一个SessionFactory就足够了。当然如果有多个数据库的话,还是需要为每个数据库生成对应的SessionFactory。它是线程安全的,同一个实例可以被应用中的多个线程共享。

代码:

Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");SessionFactory    sessionFactory = config.buildSessionFactory();

  • Session接口:负责操作数据库,Session是非线程安全的

Hibernate应用中使用最广泛的接口,是持久化管理器,提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例。Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。

Session有一个缓存,称之为Hibernate的一级缓存,它存放当前工作单元加载的持久化对象,每个Session都有自己的缓存,缓存中的对象只能被当前工作单元访问。

  • Transaction接口:负责事务相关的操作

Transaction是Hibernate的数据库事务接口,它对底层的事务接口进行了封装,底层事务接口包括:

    JDBC API

    JTA(Java Transaction API)

    CORBA(Common Object RequetBroker Architecture) API

package com.bjpowernode.hibernate;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Client {public static void main(String[] args) {//读取hibernate.cfg.xml文件Configuration cfg = new Configuration().configure();//建立SessionFactorySessionFactory factory = cfg.buildSessionFactory();//取得sessionSession session = null;try {session = factory.openSession();//开启事务session.beginTransaction();User user = new User();user.setName("张三");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());//保存User对象session.save(user);//提交事务session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();//回滚事务session.getTransaction().rollback();}finally {if (session != null) {if (session.isOpen()) {//关闭sessionsession.close();}}}}}

  • Query和Criteria接口:执行数据库查询。 

查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例包装了一个HQL(Hibernate QueryLanguage)来查询。Criteria接口完全封装了基于字符串形式的查询语句,比Query更面向对象,Criteria更擅长执行动态查询。

 

上面的几个组件也可以用下面的图展示一下:


 

结尾:要详细的了解这几个核心组件,我觉得还是应该到官网上去下载一下源码,仔细研究。官网地址:点击打开链接

 

0 0
原创粉丝点击