一、hibernate总体知识架构图
本文主要是按照这幅图来组织知识点
二、知识准备
1.hibernate使用的场景
只能说hibernate不适应的场景来说:
1.不适合OLAP(On-Line Analytical Processing联机分析处理),以查询分析数据为主的系统;适合OLTP(On-line transaction processing 联机事务处理)。
2.对于些关系模型设计不合理的老系统,也不能发挥hibernate优势。
3.数据量巨大,性能要求苛刻的系统,hibernate也很难达到要求,批量操作数据的效率也不高。
总之:hibernate对数据的查询效率较低
给程序员提供的一些便利是以消耗性能来提供的。
2.hibernate常用API(五大核心接口)
具体方法
Configuration配置对象,对应着配置文件
configure(String)
configure() 加载默认的主配置文件(hibernate.cfg.xml)
addResource(String)
addClass(Class)
buildSessionFactory()
方法链
SessionFactory Session工厂
openSession() 打开一个新的Session
getCurrentSession()
close()
Session
beginTransaction()
getTransaction()
close() 关闭
----------
save(Object)
update(Object)
delete(Object)删除的是实体对象
get(Class, id) : Object
createQuery(String hql) : Query
...
Query
list() : List
uniqueResult() : Object
setFirstResult(int)
setMaxResults(int)
Criteria(不算是核心类)
一种查询方法
Criteria.add(Restrictions.eq("name", name))
Transaction
begin()
commit()
rollbacl()
3.如何搭建hibernate;
1)导入jar包
2)在src下建立hibernate.cfg.xml文件
3)创建实体类
4)建立实体类对应的XXX .hbm.xml;
5)将XXX .hbm.xml;注册到hibernate.cfg.xml
6)创建HibernateUtil
代码如下:
private static SessionFactory sessionFactory = null ;
//静态初始化快(在类加载时创建)
static {
try{
//Configuration表示hibernate初始器
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(Throwable e){
System.out.println("hibernate 初始化失败!");
e.printStackTrace();
//throw new ExceptionInInitializerError(e);
}
}
/**
* 得到SessionFactory
* @return
*/
public static SessionFactory getSeesionFactoty()
{
return sessionFactory;
}
/**
* 得到Session
* @return
*/
public static Session getSession()
{
return sessionFactory.openSession();//一个作用就是拥有事务
}
4.持久化对象的三种状态
分别为:瞬时状态(Transient),持久化状态(Persistent),离线状态(Detached)。三种状态下的对象的生命周期如下:
三种状态的区别是:
瞬时状态的对象:没有被session管理,在数据库没有;
离线状态:没有被session管理,但是在数据库中存在。
持久化状态的对象:被session管理,在数据库存在,当属性发生改变,在清理缓存时,会自动和数据库同步;(注意,改变会同步)
hibernate访问持久化对象(如下图):