hibernate优化方法,hibernate性能优化

  hibernate优化方法,hibernate性能优化

  我相信大家都在用hibernate(我这里用的是3.6,因为我更喜欢spring,但是hibernate4.x和未来的spring有很多相似之处。而且spring也认为hibernate4.x是一个很完善的框架,从spring3.x开始很多hibernate支持类都被放弃了,所以我就不升级hibernate了),也就是说在配置hibernate映射文件的时候,如果有一对多(或者多对多)的属性,hinernate提供了一个优化机制,lazy属性,但是问题是配置文件是一次性配置的。如果我的项目中有些地方需要延迟加载,有些地方不需要,那么必须强制lazy=false,这样一来

  经过一段时间的经验积累,我们终于有了一套可行的方案:

  默认情况下,项目中的所有惰性属性都设置为true,不再设置为false。项目中添加了一个commonService,它提供了两种方法,一种是查询单个对象,另一种是查询列表:

  @覆盖

  公共对象findById(类。Objclass,类?idClass,对象id,String[]字段){

  Object o=dao.findById(Objclass,(Serializable)id class . cast(id));

  if(字段!=null){

  for(字符串字段:字段){

  string target method= get upper first word(field);

  method[]methods=obj class . getdeclaredmethods();

  for(方法m:方法){

  if(m.getName()。equals(targetMethod)){

  尝试{

  hibernate . initialize(m . invoke(o));

  打破;

  } catch(异常e) {

  e . printstacktrace();

  返回o;

  }

  Objclass字段需要查询的对象的classidClass id字段的type id的值需要初始化。

  公共列表?找(类?entityClazz,QueryParameterSetter paraSetter,Sorter sorter,Page page,String[] fields) {

  DetachedCriteria DC=DetachedCriteria . for class(entity clazz);

  如果(paraSetter!=空)

  parasetter . set parameters(DC);

  如果(分拣员!=null sorter.getOrder()!=空)

  DC . add order(sorter . get order());

  列表?l=findpagelistbycredirect(DC,page.getPageSize()、page . getrecordstartindex());

  lazyInitialize(entityClazz,l,fields);

  返回l;

  private void lazyInitialize(类。entityClazz,List?l,String[]字段){

  if(字段!=null){

  for(字符串字段:字段){

  string target method= get upper first word(field);

  method[]methods=entity clazz . getdeclaredmethods();

  for(方法m:方法){

  if(m.getName()。equals(targetMethod)){

  尝试{

  对于(对象o:l){

  hibernate . initialize(m . invoke(o));

  } catch(异常e) {

  e . printstacktrace();

  }

  EntityClazz实体类型paraseter参数集接口排序器排序页面分页对象

  需要初始化的字段

  这样在项目中,需要加载相关对象数据的人只需要使用这两种方法,并且可以指定属性,所以性能大大提高。

  这里只是一个代码片段,相信大部分程序员都能看懂。至于那些看不懂的程序员,自己考虑吧。

hibernate优化方法,hibernate性能优化