ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HIbernate五大关键接口

2022-05-03 13:04:53  阅读:191  来源: 互联网

标签:HIbernate Session cfg 接口 SessionFactory Hibernate new 五大 Configuration


Hibernate接口

一、Configuration

负责Hibernate配置工作,创建SessionFactory对象,在Hibernate启动过程中,Configuration类的实例首先定位在映射文件位置,读取配置,然后创建SessionFactory对象。用于3、4版本。

    @Test
    public void testConfig(){
    //读取src下hibernate.properties,不推荐使用
    Configuration cfg1 = new Configuration();
    
    //默认读取src下的hibernate,cfg.xml 推荐
    Configuration cfg2 = new Configuration().configure();
    
    //如果hibernate的核心配置文件不叫hibernate.cfg.xml,比如hb.cfg.xml
    Configuration cfg3 = new Configuration().configure("hb.cfg.xml");
    
    //可编程式,可以不使用配置文件
    //cfg.addProperties();
    //cfg.addResource();

}

 

二、SessionFactory

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,使用工厂模式创建Session对象。需要注意的是SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

    @Test
    public void testSessionFactory(){
    //默认读取src下的hibernate.cfg.xml,推荐
    Configuration cfg = new Configuration().configure();
    
    //通过Configuration创建SessionFactory对象
    //在hibernate3.x中是这种写法
    SessionFactory sf1 = cfg.buildSessionFactory();
    
    //在hibernate4.x中是这种写法
    StandardServiceRegistry sr = new StandardServiceRegistryBuilder()
        .applySettings(cfg.getProperties()).build();
    SessionFactory sf2 = cfg.buildSessionFactory(sr);
    
    //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象
    StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
        .configure.build();
    SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata()
        .buildSessionFactory();
}

 


三、Session

Session接口对于Hibernate开发人员来说是一个最重要的接口。在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中非常重要,因为在程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但是Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。Session可以看作介于数据库连接与事务管理一种中间接口。我们可以将Session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为Session负责执行被持久化对象的增、删、改、查操作,类似于JDBC的Connection和Statement,诸如存储持久对象至数据库,以及从数据库中获得它们。需要注意的是,Hibernate的Session不同于JSP应用中的HttpSession。在Hibernate中,我们使用Session这个术语时,指的是Hibernate自己的Session。

  @Test
    public void testSession(){
    //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
            .configure().build();
        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata()
            .buildSessionFactory();
        
        //通过SessionFactory得到Session
        Session session = sessionFactory.openSession();
}

 

四、Transaction

负责事务相关的操作,它代表的是Hibernate事务,本质上也就是数据库事务。一般在Hibernate的增删改中出现,但是使用Hibernate一般使用Spring去管理事务。

 @Test
    public void testTransaction(){
        //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
            .configure.build();
        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata()
            .buildSessionFactory();
        
        //通过SessionFactory得到Session
        Session session = sessionFactory.openSession();
        //第一种写法,创建对象并直接开启事务
        Transaction tx1 = session.beginTransaction();
        //第二种写法,只是创建对象而已,需要调用begin()开启事务
        Transaction tx2 = session.getTransaction();
        tx2.begin();
}

 

五、Query

负责执行各种数值查询功能,它可以使用Hibernate特有的HQL语言和SQL语言两种方式。

标签:HIbernate,Session,cfg,接口,SessionFactory,Hibernate,new,五大,Configuration
来源: https://www.cnblogs.com/mhy123/p/16218114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有