通过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,但是没必要获取整条记录,只需要获取其中的两三个字段而已.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值