Hibernate——核心组件(二)

上篇博客大致的介绍了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();
		
		//建立SessionFactory
		SessionFactory factory = cfg.buildSessionFactory();
		
		//取得session
		Session 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()) {
					//关闭session
					session.close();
				}
			}
		}
	}
}

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

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

 

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

技术分享

 

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。