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

简介: <div class="markdown_views"><p>使用hibernate和spring MVC <br>通过id查询到一个用户,但是只返回指定的字段 <br><strong>方式一: 拼接hql</strong></p><pre class="prettyprint"><code class="language-java hljs "><span class

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

相关文章
|
8月前
|
SQL 关系型数据库 MySQL
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
51 0
|
JSON 前端开发 数据格式
根据ID集合查询符合某种类型的用户信息,并按其他类型分类
根据ID集合查询符合某种类型的用户信息,并按其他类型分类
111 0
|
NoSQL MongoDB 开发者
根据上级 ID 查询文章评论的分页列表 | 学习笔记
快速学习 根据上级 ID 查询文章评论的分页列表
155 0
根据上级 ID 查询文章评论的分页列表 | 学习笔记
|
XML 设计模式 前端开发
“禁止用 select * 作为查询字段列表”落地指南
《阿里巴巴 Java 开发手册》 MySQL 数据库部分,ORM 映射部分,谈到: 【强制】 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明: 1)增加查询分析器解析成本。 2)增减字段容易与 resultMap 配置不一致。 3)无用字段增加网络消耗,尤其是 text 类型的字段。 甚至有些公司还会对代码进行扫描,当发现代码或者 MyBatis 配置中出现 `select *` 时会给出告警要求修改。
334 0
“禁止用 select * 作为查询字段列表”落地指南
EF部分字段更新,自动忽略null字段
原文:EF部分字段更新,自动忽略null字段  某个项目里的update代码是类似这样的 public T Update(T entity) where T : ModelBase { var set = this.
1636 0
|
PHP
Laravel中pluck的使用——返回指定的字段值信息列表
$model = self::where(['is_delete' => 0, 'is_on_sale' => 1]) ->whereIn('goods.cat_id', GoodsCategory::getCategoryIds($category)) ...
2406 0
|
PHP
Laravel返回不重复的某个字段信息列表
->groupBy('brand_id') ->pluck('brand_id');  学习交流群:364976091
2063 0
如何通过多个id查询多条数据
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/77995822 ...
1279 0