Hibernate读取配置文件,创建sessionFactory的执行过程以及用工具类优化

hibernate.cfg.xml被称为核心配置文件
实体类名.hbm.xml被称为映射文件

记忆就像运行内存一样,一次开机,疯狂读取数据,一次关机,清空所有内存!!

Hibernate核心API的基本使用

Configuration

Configuration config=new Configuration();
config.configure();
  • 到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

另外,就算把核心配置文件放到其它目录也可以加载,只是业界方面不推荐。我们只需要知道就行了!

Configuration config=new Configuration().configure("xml文件位置");

/*此种写法hibernate 会去指定位置查找配置文件,例如,想要使用src下面的config包中的hibernate.cfg.xml文件,只需将文件位置加入configure()中即可

,其代码如下:*/

Configuration.config=new Configuration().configure("/config/hibernate.cfg.xml");

/*
[加载映射文件]:Hibernate除了可以使用Configuration对象加载核心配置文件以外,还可以利用该对象加载映射文件。可以在手动编写代码的时候去加载映射

文件。
*/

Configuration configuration=new Configuration().configure("xml文件位置");

configuration.addResource("cn/domarvel/domain/Customer.hbm.xml");

SessionFactory(重点)

使用Configuration对象创建SessionFactory对象

  • 创建SessionFactory过程中做事情。
  • 根据核心配置文件中的内容(现在已经被封装到Configuration对象里面了),有数据库配置,有Hibernate信息配置,有映射文件部分,到数据库里面根据

映射关系把表创建。

但是要想Hibernate帮你创建数据表,你必须配置以下内容:

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

*经过试验,hibernate.hbm2ddl.auto这里面的值为update时,如果数据库中无表,会创建。插入数据时,数据库字段不够会更新表。但是如果数据库字段本来

就包含当前插入的实体类属性时,就不会更新表。所以在SessionFactory创建时会有很麻烦耗时的数据库字段检测代码。并且在开始的时候还会读取Hibernate核心配置文件,这些都是非常耗时的操作!*

为了不要造成不必要的浪费:

  • 在Hibernate操作中,建议一个项目一般创建一个SessionFactory对象。

具体实现过程:

  • 写工具类,写静态代码块实现。
  • 静态代码块在类加载时候执行,执行一次。
public class HibernateUtils{

    private static Configuration cfg=null;
    private static SessionFactory sessionFactory=null;

    //静态代码块实现
    static{
        //加载核心配置文件
        cfg=new Configuration();
        cfg.configure();

        sessionFactory = cfg.buildSessionFactory();
    }

    //提供方法返回 sessionFactory
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }

}

Session(重点)

Session session=sessionFactory.openSession();

session类似于jdbc中的connection

调用session里面不同的方法实现crud操作

  • 添加save方法
  • 修改 update方法
  • 删除delete方法
  • 根据id查询get方法

session对象单线程对象

  • session对象不能共用,只能自己使用。

Transaction

//开启事务
Transaction tx=session.beginTransaction();

//事务的提交和回滚

tx.commit();

tx.rollback();

事务和回滚:

事务的概念:

  • 事务四个特性:原子性、一致性、隔离性、持久性。

原子性:所有成功,就成功。一个失败就全部失败。

一致性:操作之前之后数据总量不会变化。

隔离性:多个事务同时操作同一条记录时,相互之间不会受影响。

持久性:当我们提交数据到数据库。数据库数据真正生效。

对于事务这里有一篇文章

平时见到的数据库操作都是原子性的,也就是说单纯性的,要嘛插入,要嘛修改,要嘛删除。
事务就是一系列相关数据库操作的集合,因此,只有事务里的所有操作都正常完成才算一次事务提交,如果有一个操作不完成,数据库就恢复到操作前状态,

这叫做回滚。
举个例子:
你要给老妈汇100元,一次完整的汇款操作就是一个事务。
简单列举下汇款的主要流程:
1:从你帐号拿出100元,相应的数据库操作就是---》减去100元从你的帐号
2:银行将100元存入老妈的帐号,相应的数据库操作就是----》修改老妈的帐号的余额
步骤1,2和一起算一次事务,它包括两次数据库的修改处理,因此,如果两则有一个出现异常(比如汇款时停电),则正常的银行系统不会将你的100元丢失,

也不会将老妈帐户加100.
如果没有事务管理,减去100和加上100是两个单独的操作,这时候如果 把你帐户减去100元后,突然停电, 不仅老妈收不到钱,你的100元也没了。很可怕吧

!还好只是100!有了事务管理呢,数据库系统发现这次事务出现了中断,就不会把你的钱扣除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值