java面试题网

普通会员

257

帖子

9

回复

131

积分

楼主
发表于 2018-03-22 16:11:51 | 查看: 294| 回复: 0

①Session在调用数据查询功能之前,首先会在缓存中进行查询,在一级缓存中,通过实体类型和主键进行查询,如果一级缓存查找命中且数据状态合法,则直接返回;

②如果一级缓存没有命中,接下来Session会在当前NonExists记录(相当于一个查询黑名单,如果出现重复的无效查询可以迅速判断,从而提升性能)中进行查询,如果NonExists中存在同样的查询条件,则返回null;

③对于load方法,如果一级缓存查询失败,则查询二级缓存,如果二级缓存命中则直接返回;

④如果之前的查询都未命中,则发出sql语句,如果查询未发现对应的记录,则此次查询添加到Session的NonExists中加以记录,并返回null;

⑤根据映射配置和sql语句,得到ResultSet,并创建对应的实体对象;

⑥将对象纳入Session(一级缓存)管理;

⑦执行拦截器的onload方法(如果有对应的拦截器);

⑧将数据对象纳入二级缓存;

⑨返回数据对象。



您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018