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

来源:互联网 发布:js实现图片放大缩小 编辑:程序博客网 时间:2024/05/20 13:36
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!有了事务管理呢,数据库系统发现这次事务出现了中断,就不会把你的钱扣除。
0 0
原创粉丝点击