2018-03-05
hibernate-主要内容
hibernate 评论:0 浏览:82

转载请注明出处:https://oldnoop.tech/c/129.html

介绍

Hibernate是一个持久层框架, 一般用在dao层

Hibernate的session是线程不安全的,SessionFactory是线程安全的

与spring集成使用,一般Dao层继承spring提供的 HibernateDaoSupport,或者HibernateTemplate,从而获得spring提供的模板方法

 

查询

Hibernate主要有查询有3种方式

session.createQuery(String hsql); 创建hql查询

session.createCriteria(Class<?> clazz); 创建criteria条件查询

session.createSQLQuery(String sql); 创建原生sql查询

 

分页

Hibernate查询分页使用查询对象的使用setFirstResult,setMaxResults这两个方法

 

hibernate连接查询

使用hibernate的连接查询,必须配置映射关系

使用fetch,强制抓取设置为lazy=true的关联数据,避免N+1条查询问题

 

Hibernate缓存

一级缓存即session缓存

一级缓存的生命周期和session的生命周期保持一致,hibernate默认就启用了一级缓存

get,load,iterate都会使用一级缓存

二级缓存sessionFactory

一个实例对应一个数据存储源.它是线程安全的,是重量级的.它需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数等

三级缓存即查询缓存

查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id

 

get 和 load的区别

get不支持懒加载,load支持懒加载,

查询不到数据,get返回null, load抛出异常

 

主键生成策略

使用generator标签配置,class属性配置具体的策略

identity, 使用数据库的生成策略,一般数据库要求支持自增长,mysql可以使用

sequenece, 使用序列, oracle可以使用

uuid 使用uuid的字符串

native, 交给数据库自己处理,

assign, 编码时指定id

 

Hibernate懒加载问题

在视图层显示懒加载数据的问题

Hibernate配置懒加载之后, 在视图层 使用jstl或者freemarker的标签 ${ 对象.属性}, 这个时候需要查询数据库,但是这个时候, session已经关闭了,

可以在web.xml使用OpenSessionInView过滤器, 在视图层打开 hibernate的session



  • 转载请注明出处:https://oldnoop.tech/c/129.html

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1