通过id查询用户,但是只返回指定的字段

使用hibernate和spring MVC 通过id查询到一个用户,但是只返回指定的字段 方式一: 拼接hql

/**** 通过数据库ID查询用户,但是只返回指定的字段* @param id* @param propertyNames : 指定的多个成员变量* @return*/public Object[] getPropertiesById(int id,String[] propertyNames){if(ValueWidget.isNullOrEmpty(propertyNames)){return null;}String hql=”select “+propertyNames[0];for (int i = 1; i < propertyNames.length; i++) {String string = propertyNames[i];hql+=”,”+string;}String parameterId=”id22″;hql+=” from “+clz.getCanonicalName()+” c where c.id=:”+parameterId;Query q= this.sessionFactory.getCurrentSession().createQuery(hql);Object result=q.setInteger(parameterId, id).uniqueResult();Object[]objs=null;if(result instanceof Object[]){objs=(Object[])result;}else{//当只返回一个成员变量的时候objs=new Object[]{result};}return objs;} /**** 通过id,查询到一条记录,但是只返回指定的两个字段* @param id* @param propertyName1 : 类的成员变量* @param propertyName2 : 类的成员变量* @return*/public Object[] getPropertiesById(int id,String propertyName1,String propertyName2){String hql=”select “+propertyName1;if(!ValueWidget.isNullOrEmpty(propertyName2)){hql+=”,”+propertyName2;}String parameterId=”id22″;hql+=” from “+clz.getCanonicalName()+” c where c.id=:”+parameterId;Query q= this.sessionFactory.getCurrentSession().createQuery(hql);Object result=q.setInteger(parameterId, id).uniqueResult();Object[]objs=null;if(result instanceof Object[]){objs=(Object[])result;}else{//当只返回一个成员变量的时候objs=new Object[]{result};}return objs;}

方式二:使用投影

/**** 通过数据库ID查询用户,但是只返回指定的字段* @param id* @param propertyNames : 指定的多个成员变量* @return*/public Object[] getPropertiesById2(int id,String[] propertyNames){Criteria c=this.sessionFactory.getCurrentSession().createCriteria(clz);ProjectionList projectionList=Projections.projectionList();if(!ValueWidget.isNullOrEmpty(propertyNames)){for (int i = 0; i < propertyNames.length; i++) {String string = propertyNames[i];projectionList.add(Projections.property(string));}}Object result=c.add(Restrictions.idEq(id)).setProjection(projectionList).uniqueResult();Object[]objs=null;if(result instanceof Object[]){objs=(Object[])result;}else{//当只返回一个成员变量的时候objs=new Object[]{result};}return objs;}/**** 通过id,查询到一条记录,但是只返回指定的两个字段* @param id* @param propertyName1 : 类的成员变量* @param propertyName2 : 类的成员变量* @return*/public Object[] getPropertiesById2(int id,String propertyName1,String propertyName2){Criteria c=this.sessionFactory.getCurrentSession().createCriteria(clz);ProjectionList projectionList=Projections.projectionList().add(Projections.property(propertyName1));if(!ValueWidget.isNullOrEmpty(propertyName2)){projectionList.add(Projections.property(propertyName2));}Object result=c.add(Restrictions.idEq(id)).setProjection(projectionList).uniqueResult();Object[]objs=null;if(result instanceof Object[]){objs=(Object[])result;}else{//当只返回一个成员变量的时候objs=new Object[]{result};}return objs;}

使用场景:知道id,但是没必要获取整条记录,只需要获取其中的两三个字段而已.

,有一种缘,放手后成为风景,有一颗心,坚持中方现真诚。

通过id查询用户,但是只返回指定的字段

相关文章:

你感兴趣的文章:

标签云: