Hibernate执行流程分析及配置文详解

本文详细介绍了Hibernate的执行流程,包括Configuration对象的配置、ServiceRegistry对象的作用、SessionFactory的构建和Session对象的使用方法,以及Transaction对象在事务管理中的应用。同时,还展示了如何使用HibernateUtils工具类进行CRUD操作的示例。
摘要由CSDN通过智能技术生成

目录

1、Hibernate执行流程分析及配置文件详解

1)Configuration对象

2)ServiceRegistry对象(hibernate4的新特性)

3)SessionFactory对象

4)Session对象

5)Transaction对象

6)hibernate.cfg.xml配置详解

7)Student.hbm.xml配置详解

2、抽取HibernateUtils工具类

3、Session的常用方法详解(CRUD案例)


1、Hibernate执行流程分析及配置文件详解

Hibernate核心的API详解:

1)Configuration对象

Configuration类负责管理Hibernate的配置信息。包括如下内容:

    1)Hibernate运行的底层信息:

       数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。

    2)持久化类与数据表的映射关系(*.hbm.xml 文件)

创建Configuration 的两种方式:

    属性文件(hibernate.properties):

        Configuration cfg = new Configuration();

    Xml文件(hibernate.cfg.xml)(推荐使用)

         Configuration cfg = new Configuration().configure();

2)ServiceRegistry对象(hibernate4的新特性)

ServiceRegistry 是 Service 的注册表, 它为Service提供了一个统一的加载 / 初始化 / 存放 / 获取机制.

3)SessionFactory对象

1)Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。

      Configuration cfg = new Configuration().configure();

      SessionFactory sf = cfg.buildSessionFactory();

2SessionFactory是线程安全的。

3)SessionFactory是生成Session的工厂:

       Session session = sf.openSession();

4)构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory对象

4)Session对象

1)Session是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。

2)持久化类与 Session 关联起来后就具有了持久化的能力。

3)是线程不安全的

4Session 类的方法:

     取得持久化对象的方法: get() load()

     持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()

     开启事务: beginTransaction().

     管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()

5)Transaction对象

1)代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

   Transaction tx = session.beginTransaction();

2)常用方法:

commit():提交相关联的session实例

rollback():撤销事务操作

6)hibernate.cfg.xml配置详解

<hibernate-configuration>

<session-factory>

   <!-- 数据库连接配置 -->

   <property name="hibernate.connection.driver_class">

      com.mysql.jdbc.Driver

   </property>

   <property name="hibernate.connection.url">

      jdbc:mysql://localhost:3306/day14?useUnicode=true&amp;characterEncoding=utf-8

   </property>

   <property name="hibernate.connection.username">root</property>

   <property name="hibernate.connection.password">root</property>

   <!-- 数据库方言 -->

   <property name="hibernate.dialect">

      org.hibernate.dialect.MySQL5InnoDBDialect

   </property>

   <!-- 显示执行的sql语句 -->

   <property name="hibernate.show_sql">true</property>

   <!-- 格式化sql语句 -->

   <property name="hibernate.format_sql">true</property>

   <!-- hibernate自动维护表 -->

   <property name="hibernate.hbm2ddl.auto">update</property>

   <!-- 对象关系映射的配置 -->

   <mapping resource="gz/itcast/entity/Student.hbm.xml" />

</session-factory>

</hibernate-configuration>

7)Student.hbm.xml配置详解

       

2、抽取HibernateUtils工具类

public class HibernateUtils {

   private static SessionFactory sessionFactory = null;

  

   static{

      Configuration config =

             new Configuration().configure();

      StandardServiceRegistry serviceRegistry

                = new StandardServiceRegistryBuilder()

             .applySettings(config.getProperties())

             .build();

      sessionFactory = config.buildSessionFactory(serviceRegistry);

   }

  

   public static Session getSession(){

      return sessionFactory.openSession();

   }

}

3、Session的常用方法详解(CRUD案例)

//演示CURD

public class Demo {

   //添加

   @Test

   public void testInsert(){

      Session session = HibernateUtils.getSession();

      Transaction tx = null;

      try{

          tx = session.beginTransaction();

          Student s = new Student();

          s.setId(3);

          s.setName("王五");

          s.setGender("");

          s.setAge(18);

         

          session.save(s);

        

          tx.commit();

      }catch(Exception e){

          e.printStackTrace();

          tx.rollback();

      }finally{

          session.close();

      }

   }

   //更新

   @Test

   public void testUpdate(){

      Session session = HibernateUtils.getSession();

      Transaction tx = null;

      try{

          tx = session.beginTransaction();

         

          Student s = new Student();

          s.setId(3);

          s.setName("陈六");

          s.setGender("");

          s.setAge(28);

         

          session.update(s);

         

          tx.commit();

      }catch(Exception e){

          e.printStackTrace();

          tx.rollback();

      }finally{

         session.close();

      }

   }

   //删除

   @Test

   public void testDelete(){

      Session session = HibernateUtils.getSession();

      Transaction tx = null;

      try{

          tx = session.beginTransaction();

         

          Student s = new Student();

          s.setId(3);

         

          session.delete(s);

         

          tx.commit();

      }catch(Exception e){

          e.printStackTrace();

          tx.rollback();

      }finally{

          session.close();

      }

   }

   //查询

   @Test

   public void testQuery(){

      Session session = HibernateUtils.getSession();

      Transaction tx = null;

      try{

          tx = session.beginTransaction();

         

          Student s = (Student)session.get(Student.class, 2);

          System.out.println(s);

         

          tx.commit();

      }catch(Exception e){

          e.printStackTrace();

          tx.rollback();

      }finally{

          session.close();

      }

   }

}

  • 39
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值