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更擅长执行动态查询。
上面的几个组件也可以用下面的图展示一下:
结尾:要详细的了解这几个核心组件,我觉得还是应该到官网上去下载一下源码,仔细研究。官网地址:点击打开链接
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。