hibernate核心接口

Hibernate核心接口:

Session,SessionFactory,Configuration,Transaction,Query,Criteria,


1.Session接口负责执行被持久化对象的crud(crud的任务:完成与数据库交流包含很多常见SQL)

2.SessionFactory接口负责初始化Hibernate,并负责创建Session对象

3.Configuration类负责配置并启动Hibernate,创建SessionFactory对象,Hibernate启动是,Configuration首先定位映射文档位置,读取配置,然后创建SessionFactory对象

4.Transaction接口负责事物相关操作,可选的,也可以编写自己的底层事物

5.Query和riteria接口负责执行各种数据库查询,可以使用HQL,和SQL两种表达式


Hibernate工作原理:

1.通过Configuration().configure()读取并解析Hibernate.cfg.xml配置文件

2.由Hibernate.cfg.xml中的<mappingresource=“com/xx/use.hbm.xml”>读取解析映射文件

3.通过Config.buildSessionFactory(),得到SessionFactory对象

4.SessionFactory.openSession(),启动Session

5.session.beginTransaction(),开启事物

6.persistent operate 操作数据,持久化操作

7.session.getTransaction().commit();提交事物

8.关闭session

9.关闭SessionFactory


为什么使用Hibernate:

1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复代码

2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,很大程度上简化DAO层的编码工作

3.Hibernate使用Java反射机制,而不是字节增强程序来实现透明性

4.Hibernate性能非常好,它是个轻量级框架,映射的灵活性很出色,支持各种关系数据库,从一对一到多对多的各种复杂关系


Hibernate如何延迟加载, get()和load()的区别:

1.get()方法:Hibernate会确认该id对应的数据是否存在,首先在session中查找,然后在二级缓存中查找,都没有的话,就去数据库中查找,数据库没有就返回null;

2.load()方法:加载实体对象的时候,要根据映射文件上类级别的lazy属性的配置(默认为true)

    ①:lazy=true时,首先在session缓存中查找,看看该id对应的对象是否存在,不存在使用延迟加载,返回实体的代理对象,与到具体用到该对象的时候,再查询二级缓存和数据库,如果查不到,就会抛出一个ObjectNotFoundException

    ②:lazy=false时,和get()方法一样


get() 和 load()方法的主要区别

1.没有符合条件的记录,get()方法返回null,laod()方法则抛出一个ObjectNotFoundException

2.laod()方法可返回没有加载实体数据的代理实例,get()方法,永远返回有实体数据的对象


如何优化Hibernate:

1.使用双向一对多关联,不使用单向一对多

2.灵活使用单向一对多关联

3.不用一对一,用多对一取代

4.配置对象缓存,不使用集合缓存

5.一对多集合使用Bay,多对多集合使用set

6.继承类使用显式多态

7.表字段少,表关联不要怕多,有二级缓存撑腰






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值