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!有了事务管理呢,数据库系统发现这次事务出现了中断,就不会把你的钱扣除。