zoukankan      html  css  js  c++  java
  • Hibernate HQL ②

    分页查询:

      - setFirstResult(int firstResult):设定从哪一个对象开始检索,参数 firstResult 表示这个对象在查询结果中的索引位置,索引位置的起始值为零。默认情况下,Query 从查询结果中的第一个对象开始检索

      - setMaxResult(int maxResults):设定一次最多检索出的对象的数目。在默认情况下,Query 和 Criteria 接口检索出查询结果中所有的对象

        public void testPageQuery(){
            String hql = "FROM Employee";
            Query query = session.createQuery(hql);
            
            int pageNo = 3;
            int pageSize = 5;
            List<Employee> employees = 
                    query.setMaxResults(pageSize)
                         .setFirstResult((pageNo - 1) * pageSize)
                         .list();
            for(Employee employee : employees){
                System.out.println(employee.getId());
            }
        }

    在映射文件中定义命名查询语句:

      - Hibernate 允许在映射文件中定义字符串形式的查询语句

      - <query> 元素用于定义一个 HQL 查询语句,它和 <class> 元素并列

      - 在程序中通过 Session 中的 getNamedQuery()方法获取查询语句对应的 Query 对象

        public void testNamedQuery(){
            Query query = session.getNamedQuery("myQuery");
            List<Employee> employees = query.setInteger("minId", 100)
                                            .setInteger("maxId", 108)
                                            .list();
            for(Employee employee : employees){
                System.out.println(employee.getId());
            }
        }
    <query name="myQuery"><![CDATA[FROM Employee e WHERE e.id > :minId AND e.id < :maxId]]></query>

    投影查询:

      - 查询结果仅包含实体的部分属性。通过 SELECT 关键字实现。

      - Query 的 list 方法返回集合中包含的是数组类型的元素,每个对象数组代表查询结果的一条记录

      - 可以在持久化类中定义一个对象的构造器来包装投影查询返回的记录,使程序代码能完全运用面向对象的语义来访问查询结果集

      - 通过 DISTINCT 关键字来保证查询结果不会返回重复元素

        @Test
        public void testFieldQuery(){
            String hql = "SELECT new Employee(e.lastName, e.department) FROM Employee e WHERE e.department = :dept";
            Query query = session.createQuery(hql);
            
            Department dept = new Department();
            dept.setDeptId(80);
            List<Employee> employees = 
                    query.setEntity("dept", dept)
                         .list();
            for(Employee employee : employees){
                System.out.println(employee.getId() + ", " + employee.getLastName() +", " + employee.getDepartment().getDeptId());
            }
        }
  • 相关阅读:
    表优化
    存储和压缩
    自定义函数
    Hadoop中SecondaryNameNode和HA(高可用)区别
    ASUS笔记本,更换了固态硬盘,重装系统前后开机都自动进入BIOS界面
    顶部下拉菜单制作笔记
    综合笔记
    工具sublime安装
    head引入样式
    滚动固定导航代码
  • 原文地址:https://www.cnblogs.com/zyx1301691180/p/7722423.html
Copyright © 2011-2022 走看看