hibernate查询优化----延迟加载优化 (二)

2014-11-24 11:45:07 · 作者: · 浏览: 21
}
}
}
}
}

public List< > find(Class< > entityClazz, QueryParameterSetter paraSetter, Sorter sorter, Page page,String[] fields) {
DetachedCriteria dc = DetachedCriteria.forClass(entityClazz);
if (paraSetter != null)
paraSetter.setParameters(dc);
if (sorter != null && sorter.getOrder() != null)
dc.addOrder(sorter.getOrder());
List< > l = findPageListByCriteria(dc, page.getPageSize(), page.getRecordStartIndex());
lazyInitialize(entityClazz,l,fields);
return l;
}

private void lazyInitialize(Class< > entityClazz,List< > l ,String[] fields){
if(fields!=null){
for(String field:fields){

String targetMethod = "get"+upperFirstWord(field);

Method[] methods = entityClazz.getDeclaredMethods();
for (Method m : methods) {
if(m.getName().equals(targetMethod)){
try {
for(Object o:l){
Hibernate.initialize(m.invoke(o));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}entityClazz 实体类型
paraSetter 参数设置接口
sorter 排序规则
page 分页对象
fields需要初始化的字段

这样的话在项目中,那些需要加载关联对象数据的时候只需要使用这两个方法就可以了,而且是可以指定属性的,不用全部加载,在性能上有了很大的提高.

这里只是一个代码片段,相信大部分程序员都能看懂,至于看不懂的伸手党程序员就自己琢磨吧