高级java工程师-------hibernate的作用和关键点
2013-02-21 15:36
148 查看
一、在ssh框架中hibernate的作用是什么呢?
1、hibernate是一种ORM(对象映射)框架的持久性框架,它是对JDBC做了轻量级的封装,使得程序员可以面向对象思维的对数据库进行操作。
2、支持各种关系数据库,它的级联功能很好的支持着表与表之间的各种关系。
3、与spring整合之后连接数据库的代码和控制事物的代码都统一由spring管理,简化了代码,以及更好的管理事物。
4、hibernate提供一级和二级缓存的功能,极大的提高了性能。
5、hibernate提供方便的API进行CURD,减轻了大量SQL语句的编写。
二、级联关系中重要的属性及意义
1、inverse(由哪一端维护关联关系)
这时inverse值用来标明由谁来维护关联关系。设为true时反转控制角色,即由该 属性关联的对象维护关联关系。
2、casecade(级联删除、存储、更新、all)
all : 所有操作都传递到相关联的对象
save-update 保存和更新传递到相关联的对象
delete 删除操作传递到相关联的对象
delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象。
3、lazy 懒加载(必须保持session有效否则无法获取,默认为true延迟加载)
lazy=false表示已启动就会将所有关联表的记录加载
lazy=true表示只有调到关联的方法才会加载
三、缓存机制
一级缓存:一级缓存是hibernate默认存在的,不能人为的开启和配置的,就是session缓存。一级缓存的生命周期依赖于session的生命周期
session.evict(对象) 从一级缓存中移除指定对象 session.clear()从缓存中移除所有缓存对象
session.readOnly()
二级缓存:二级缓存是有sessionfactory对象负责管理,是应用级别的缓存,所以生命周期更长,故称为sessionFactory缓存,是跨session的,sessionFactory是单例模式
的对象,所以sessionFactory的所有session都共享二级缓存。
ehcahe中配置需要二级缓存的类
1、query.list和query.iterate的区别?
当缓存中有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,这种情况下query.iterate效率稍高
当缓存中没有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,匹配缓存没有对应值时,会再去数据库查询这样效率就偏低。
2、二级缓存的管理
sessionFactory.evict( 指定类型) sessionFactory.evictCollection("集合") sessionFactory.evictEntity(对象) sessionFactory.evictEntity(对象,id)
3、查询缓存
----------------------------------------------------------------------------------------------------------要求严格,参数一至------------------------------------------------------------------------------
四、hibernate优化
1、dynamic-update="true" 或者dynamic-insert="true"
是指更新或者插入记录的时候只针对属性值改变的属性进行更新或者插入,针对性强,从而提高效率
2、延迟加载 lazy loading
1.设置持久化类得加载 默认lazy=true
2.设置集合的加载 默认lazy=true
3.设置属性的加载 默认lazy=false
除了属性 时,lazy=true是指延迟加载,只有当需要时,才去调用数据库获取数据
lazy="false"是指不延迟加载,一次性获取所有的数据,不管调用不调用
副作用:解决org.hibernate.LazyInitializationException
Hibernate.initialize
3、集合对象的抓取策略(fetching strategies)
查询抓取(select fetching)默认值
子查询抓取(subselect fetching)
连接抓取(join fetching)
批量抓取
4、 hibernate中1+n问题
具体问题具体分析 query.list和query.iterate的合理使用
五、hibernate 的search
1、hibernate是一种ORM(对象映射)框架的持久性框架,它是对JDBC做了轻量级的封装,使得程序员可以面向对象思维的对数据库进行操作。
2、支持各种关系数据库,它的级联功能很好的支持着表与表之间的各种关系。
3、与spring整合之后连接数据库的代码和控制事物的代码都统一由spring管理,简化了代码,以及更好的管理事物。
4、hibernate提供一级和二级缓存的功能,极大的提高了性能。
5、hibernate提供方便的API进行CURD,减轻了大量SQL语句的编写。
二、级联关系中重要的属性及意义
1、inverse(由哪一端维护关联关系)
这时inverse值用来标明由谁来维护关联关系。设为true时反转控制角色,即由该 属性关联的对象维护关联关系。
2、casecade(级联删除、存储、更新、all)
all : 所有操作都传递到相关联的对象
save-update 保存和更新传递到相关联的对象
delete 删除操作传递到相关联的对象
delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象。
3、lazy 懒加载(必须保持session有效否则无法获取,默认为true延迟加载)
lazy=false表示已启动就会将所有关联表的记录加载
lazy=true表示只有调到关联的方法才会加载
三、缓存机制
一级缓存:一级缓存是hibernate默认存在的,不能人为的开启和配置的,就是session缓存。一级缓存的生命周期依赖于session的生命周期
session.evict(对象) 从一级缓存中移除指定对象 session.clear()从缓存中移除所有缓存对象
session.readOnly()
二级缓存:二级缓存是有sessionfactory对象负责管理,是应用级别的缓存,所以生命周期更长,故称为sessionFactory缓存,是跨session的,sessionFactory是单例模式
的对象,所以sessionFactory的所有session都共享二级缓存。
ehcahe中配置需要二级缓存的类
1、query.list和query.iterate的区别?
当缓存中有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,这种情况下query.iterate效率稍高
当缓存中没有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,匹配缓存没有对应值时,会再去数据库查询这样效率就偏低。
2、二级缓存的管理
sessionFactory.evict( 指定类型) sessionFactory.evictCollection("集合") sessionFactory.evictEntity(对象) sessionFactory.evictEntity(对象,id)
3、查询缓存
----------------------------------------------------------------------------------------------------------要求严格,参数一至------------------------------------------------------------------------------
四、hibernate优化
1、dynamic-update="true" 或者dynamic-insert="true"
是指更新或者插入记录的时候只针对属性值改变的属性进行更新或者插入,针对性强,从而提高效率
2、延迟加载 lazy loading
1.设置持久化类得加载 默认lazy=true
2.设置集合的加载 默认lazy=true
3.设置属性的加载 默认lazy=false
除了属性 时,lazy=true是指延迟加载,只有当需要时,才去调用数据库获取数据
lazy="false"是指不延迟加载,一次性获取所有的数据,不管调用不调用
副作用:解决org.hibernate.LazyInitializationException
Hibernate.initialize
3、集合对象的抓取策略(fetching strategies)
查询抓取(select fetching)默认值
子查询抓取(subselect fetching)
连接抓取(join fetching)
批量抓取
4、 hibernate中1+n问题
具体问题具体分析 query.list和query.iterate的合理使用
五、hibernate 的search
相关文章推荐
- [置顶] java高级工程师--------hibernate的知识重点
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- java高级工程师--------hibernate的知识重点
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试总结
- 招聘 .NET/Java高级软件开发工程师(服务端)
- 想要成功应聘Java高级开发工程师,8个你必须知道的面试考纲
- 怎样成为一个高级JAVA工程师 .
- JVM知识点总览-高级Java工程师面试必备
- Java高级工程师面试总结
- java 高级工程师面试
- 成为JAVA(高级)工程师,该学什么?
- JVM 知识点总览 - 高级 Java 工程师面试必备
- Java高级工程师面试题目汇集
- JAVA高级工程师课程笔记整理——(六)网页三剑客
- 高级Java工程师招聘——北京西二旗