Hibernate入门

3.Hibernate入门:
1.Hibernate是作用于数据持久层的一个框架
核心原理:
Hibernate是面向对象的,是ORM映射框架
ORM - 对象,关系映射(model,表,映射)

Hibernate从直接对表中的字段进行操作进化到了对model类对象进行操作
model类和表示如何映射起来的呢?
通过实体类名.hbm.xml配置文件映射
位置:和实体类在同一目录下
内容:
1.导入头信息
2.映射的内容(model类和表对应,表中的字段和model类中的字段对应) - 去PPT看

2.框架搭建:
步骤:
1.导入jar包,
|-核心包
|-required文件夹下的所有jar包
|-jpa文件夹下的jar包
|-log4j,slf4j两个关于日志的jar包
|-数据库的包
|-测试的包
2.将hibernate的核心配置文件导入 。。.cfg.xml
,,.cfg.xml内容:
1.数据连接信息
2.加载ORM映射文件
3.测试案例:
JUNIT4集成测试
步骤:
1.加载核心配置文件
Configuration con = new Configuration.configu();
2.创建sessionFactoty对象
SessionFactory factory = con.bulidSessionFactory();
3.获取session对象
Session session = factory.openSession();
4.开启事务
Transaction tx = session.beginTransaction();
5.具体操作:
User user = new User();
user.set...
session.save(user);
6.事务的提交
tx.commit();
7.释放资源:
session.close();
factory.close();

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

总结:
1.hibernate的常用操作:
save(Object),update(),saveOrUpdate(),delete(),get()/load()
get和load 的区别?
1. 加载机制(发起SQL的时机不同:)
load采用懒加载机制,get采用立即检索
2.返回的对象不同:
laod返回代理对象
get返回真实对象

3.如果查询的数据不存在,报的异常不同:
laod:ObjectNotFoundException
get:空指针

HQL查询: - Hibernate Query Language
1.查询所有信息
Query query = session.createQuery("from Objct");
query.list(); - List

2.条件查询多用户
Query query = session.createQuery("from Objct where name=?");
query.list(); - List
3.条件查询单用户
Query query = session.createQuery("from Objct where name=?");
query.uniqueResult() - Object

分页:
Query query = session.createQuery("from Objct");
query.setFirstResult(0);
query.setMaxResullt(4);
query.list() - List


2.持久化对象的状态:
瞬时态:没ID,没Seesion的管理
持久态:有ID和session的管理
脱管态:有ID ,没Session的管理

三种状态间可以相互转换

持久化对象有自动更新数据库的能力
为什么?
- 因为有一级缓存的存在,这个能力依赖于一级缓存
3.Hibernate中的一级缓存:
一级缓存伴随着session的整个生命周期,session对象结束,那么一级缓存也就销毁了

一级缓存的原理:
Map - key:一级缓存区
- valule:快照区


持久态对象有自动更新数据库的能力的原理:
当session操作一个持久态的对象时,这个对象会自动保存到一级缓存区,和快照区中,而之后如果对象的内容发生改变,那么会同步到一级缓存区,,而快照区的值不变,在事务提交的时候,会将一级缓存区的内容和快照区进行对比,如果值不同,那么以一级缓存区为准,将数据更新到数据库

4.一级缓存的管理:
close()/clear()/evict(Object)/flush()/refresh()

posted @ 2017-05-24 17:19  xxt838541976  阅读(120)  评论(0)    收藏  举报