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()

浙公网安备 33010602011771号