1.建索引
2.减少表的间关联
3.优化sql尽量让sql很快定位数据不要让sql做全表查询应该走索引,把数据量大表排在前面
4.简化查询字段没用字段不要已经对返回结果控制尽量返回少量数据
2.在Hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来结果集并没有个实体类和的对应,如何解决这个问题?
解决方案按照t数据取出数据然后自己组bean
解决方案 2对每个表bean写构造比如表要查出field1,field2两个字段那么有个构造就是Bean(type1filed1,type2field2)然后在hql里面就可以直接生成这个bean了具体如何用请看相关文档我说不是很清楚
session.load和session.get区别
Session.load/get思路方法均可以根据指定实体类和id从数据库读取记录并返回和的对应实体对象其区别在于:
如果未能发现符合条件记录get思路方法返回null而load思路方法会抛出个tNotFoundException
Load思路方法可返回实体代理类例子而get思路方法永远直接返回实体类
load思路方法可以充分利用内部缓存Cache和 2级缓存Cache中现有数据而get思路方法则仅仅在内部缓存Cache中进行数据查找如没有发现对应数据将越过 2级缓存Cache直接SQL完成数据读取
Session在加载实体对象时将经过过程:
首先Hibernate中维持了两级缓存Cache第级缓存Cache由Session例子维护其中保持了Session当前所有关联实体数据也称为内部缓存Cache而第 2级缓存Cache则存在于SessionFactory层次由当前所有由本SessionFactory构造Session例子共享出于性能考虑避免无谓数据库访问Session在数据库查询功能的前会先在缓存Cache中进行查询首先在第级缓存Cache中通过实体类型和id进行查找如果第级缓存Cache查找命中且数据状态合法则直接返回
的后Session会在当前“NonExists”记录中进行查找如果“NonExists”记录中存在同样查询条件则返回null“NonExists”记录了当前Session例子在的前所有查询操作中未能查询到有效数据查询条件(相当于个查询黑名单列表)如此来如果Session中个无效查询条件重复出现即可迅速作出判断从而获得最佳性能表现
对于load思路方法而言如果内部缓存Cache中未发现有效数据则查询第 2级缓存Cache如果第 2级缓存Cache命中则返回
如在缓存Cache中未发现有效数据则发起数据库查询操作(SelectSQL)如经过查询未发现对应记录则将此次查询信息在“NonExists”中加以记录并返回null
根据映射配置和Select SQL得到ResultSet创建对应数据对象
将其数据对象纳入当前Session实体管理容器(级缓存Cache)
执行Interceptor.onLoad思路方法(如果有对应Interceptor)
将数据对象纳入 2级缓存Cache
如果数据对象实现了LeCycle接口则数据对象onLoad思路方法
TAG: hibernate Hibernate
="xspace-totlerecord">2="xspace-totlepages">1/2="xspace-current">12>
最新评论