Hibernate分页和投影查询

uniqueResult()方法

public Long obtainRowCount(double salary) {
        String hql = "select count(empNo) from Emp emp where emp.salary>=:salary";
        return (Long) this.getCurrentSession().createQuery(hql).setParameter("salary", salary).uniqueResult();
    }

Hibernate:
select
count(emp0_.empNo) as col_0_0_
from
project.Emp emp0_
where
emp0_.salary>=?

分页查询

 public List<Emp> findByPage(int pageNo,int pageSize)
    {
        if (pageNo>=1&&pageSize>=0) {
            return this.getCurrentSession().createQuery("from Emp order by empNo")
                    .setFirstResult((pageNo - 1) * pageSize)
                    .setMaxResults(pageSize)
                    .list();
        }
        else {
            return null;
        }
    }

Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_
from
project.Emp emp0_
order by
emp0_.empNo limit ?

 int totalPages=(int)((count%pageSize==0)?(count/pageSize):(count/pageSize+1));

投影查询

  • 每条查询结果仅包含一个结果列
public List<String> selectEmp()
    {
       return this.getCurrentSession().createQuery("select emp.empName from Emp  as emp ").list();
    }

Hibernate:
select
emp0_.empName as col_0_0_
from
project.Emp emp0_

  • 每条查询结果包含不止一个结果列
public List<Object[]> selectEmp()
    {
       return this.getCurrentSession().createQuery("select emp.empName ,emp.job from Emp  as emp ").list();
    }

Hibernate:
select
emp0_.empName as col_0_0_,
emp0_.job as col_1_0_
from
project.Emp emp0_

  • 每个查询结果通过构造方法封装成对象(需要有对应的构造方法)
public List<Emp> selectEmp()
    {
       return this.getCurrentSession().createQuery("select new Emp(empNo,empName,job,salary) from Emp ").list();
    }

Hibernate:
select
emp0_.empNo as col_0_0_,
emp0_.empName as col_1_0_,
emp0_.job as col_2_0_,
emp0_.salary as col_3_0_
from
project.Emp emp0_

总结
查询中用到表达式和聚合函数得到计算列的特殊结果或者查询的目的是为了展示,不需要保持持久化维持数据,都应该用投影查询减少开销。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 5,291评论 0 0
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 3,688评论 0 0
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 12,042评论 0 3
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,837评论 0 0
  • 人生是一场游戏,有人赢,有人输。有人陪着你,也有一个人单独着。或许你自己都不知道,下一步该何去何从,但会知道你这一...
    幻影意念阅读 2,905评论 7 7

友情链接更多精彩内容