码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-21 11:54:21      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:数据库

使用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查询用户,但是只返回指定的字段

标签:数据库

原文地址:http://blog.csdn.net/hw1287789687/article/details/46581013

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!