hibernate中的核心接口及用法

一、Hibernate的接口分布图:




  我先对该接口分布图进行一下讲解:

   1.位于最底层的JNDI,JDBC和JTA是J2EE13个技术规范中的三个规范。

 

   2.位于PersistenceLayer持久层的是Hibernate封装好的接口,用到时直接使用,不需要对其进行实现。

 

   3.位于Business Layer业务逻辑层的Lifecycle,Validatable和Persistent Classes是与业务逻辑层进行打交道的。

     其中Lifecycle接口和Validatable接口放在这里是因为之前的Hibernate的实体对象需要通过实现Lifecycle接口和Validatable接口才能触发一些特定的处理及验证(它俩是侵入性的);但是现在Hibernate又提供了新的Interceptor接口,是一种非侵入性的拦截机制,也可以实现相应的功能。

     至于Persistent Classes就是持久化类,也就是咱们所说的实体类,需要自己编写,所以放在了业务逻辑层。

 

二、Hibernate的接口分类:

   1)核心接口:

    1、Configuration接口

      Configuration用于配置并启动Hibernate。

      Configuration可以创建相应的SessionFactory实例。

 

    2、SessionFactory接口

    一个SessionFactory对应一个数据源,一个数据库对应一个SessionFactory。

    它是线程安全的,同一个实例可以被应用中的多个线程共享。

    它是个重量级对象,通过查看Hibernate的源码,发现SessionFactory存放了大量预定义的SQL语句以及映射元数据,所以需要很大的缓存,因为有了Mapping文件,很多SQL语句就已经确定了,只需要动态生成一次就可以了(不可随意生成多个实例),这个设计也是为了提高持久化的效率。

 

    3、Session接口

    从SessionFactory中可以获得Session实例。

    Session接口是Hibernate应用中使用最广泛的接口,它是持久化管理器,提供添加、更新、删除、加载、查询对象。

    Session不是线程安全的,所以应避免多个线程共享同一个Session实例。

    Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。

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

 

    4、Transaction接口

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

    Hibernate应用可以通过一致Transaction接口来声明事务边界,这有助于应用可以在不同的环境或容器中移植。具体的事务实现使用在Hibernate.properties中进行指定。

 

    5、Query和Criteria接口

    这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。

    Query实例包装了一个HQL(Hibernate Query Language)来查询。

    Criteria接口完全封装了基于字符串形式的查询语句,比Query更面向对象,Criteria更擅长执行动态查询。

 

   这5个核心接口是我们在使用Hibernate时经常用到的,下面列举一个查询的示例,通过这个示例我们可以对这5个接口有一个清晰的认识:


public static void main(String[] args) {  
    //Configuration读取hibernate.cfg.xml文件  
    Configuration cfg = new Configuration().configure();  
      
    //Configuration建立SessionFactory实例  
    SessionFactory factory = cfg.buildSessionFactory();  
      
    //取得Session  
    Session session = null;  
    try {  
        session = factory.openSession();  //SessionFactory创建Session实例  
        //开始事务  
        session.beginTransaction();  
          
        //使用Query查询  
        List users = session.createQuery("from User").list();  
          
        //使用Criteria查询  
        //List users =session.createCriteria(User.class).list();  
          
        //提交事务  
        session.getTransaction().commit();  
    } catch(Exception e){  
        e.printStackTrace();  
        //回滚事务  
        session.getTransaction().rollback();  
    } finally {  
        if (session != null){  
            if (session.isOpen()){  
                //关闭session  
                session.close();  
            }  
        }  
    }  
}  


2)回调接口:

    1、Lifecycle接口

    实体对象通过实现Lifecycle接口,即可以在特定的持久化阶段,触发特定的处理过程。

 

    2、Validatable接口

    Validatable接口定义了数据验证实现方式。实体对象实现Validatable接口,并在validate方法中对当前待保存的数据进行验证,以保证数据的逻辑合法性。

 

    3、Interceptor接口

    以上2种方法都要求实现Hibernate中的Lifecycle或Validatable接口,具有很大的侵入性,使得实体对象的移植很不方便。Hibernate又提供了一种拦截机制,为对象持久化事件的捕获和处理提供了一个非侵入性的实现。

    实现Interceptor接口,在创建session时,指定加载Interceptor相应的实现类,此session的持久化操作都将首先经由此拦截器捕获处理。

 

  3)映射类型接口:

    Type接口:表示Hibernate映射类型,用于把域对象映射为数据库关系数据。

 

  4)可扩展接口:

    1、定制主键的生成策略:IdentifierGenerator接口

    2、定制缓存机制:Cache和CacheProvider接口

    3、定制本地SQL方言:Dialect抽象类

    4、定制事务管理:TransactionFactory,Transaction和TransactionManagerLookup接口

    5、定制ORM策略:ClassPersister接口

    6、定制属性访问策略:PropertyAccessor接口

    7、创建代理:ProxyFactory接口

 

    对于Hibernate中的接口,我们只需要熟知它的核心接口即可,其它的可作为了解。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值