`

分页查询

 
阅读更多
HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate 实例后,注入一个SessionFactory的引用就可以了.无须手动创建sessionFactory,更加智能的管理Hibernate 的Session,没有大量的try/catch操作,
   void delete(Object entity)删除指定持久化实例
   deleteAll(Collection entities)删除集合内全部持久化实例
   find(String queryString)根据HQL查询字符串返回实例集合
   findByNamedQuery(Striing QueryName)根据命名查询返回实例集合
   Get(Class entityClass,Serializable id)割据主键加载特定持久化类的实例
   save(Object entity)保存实例
   saveOrUpdate(Object entity)根据实例状态,选择保存或者更新
   update(Object entity)更新实例的状态
   setMaxResults(int maxResults)设置分页大小

Hibernate的复杂用法HibernateCallback
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。
HibernateTemplate的灵活访问方式是通过如下两个方法完成:

(1)Object execute(HibernateCallback action)
 
(2)List execute(HibernateCallback action)

这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。
程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),
该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
方法doInHibernate的方法体就是Spring执行的持久化操作。


    @SuppressWarnings({ "unchecked", "rawtypes" })
    public List<T> findByCriteria(final Class<T> entityClass,final String propertyName,final boolean isAsc,final int firstResult,final int maxResults,final Criterion... criterions){
        List<T> list = (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

            public Object doInHibernate(Session session)
                    throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(entityClass);
                //按属性条件查询
                for(Criterion criterion : criterions){
                    criteria.add(criterion);
                }
                //按某个属性排序
                if(null != propertyName){
                    if(isAsc){
                        criteria.addOrder(Order.asc(propertyName));//升序
                    }else{
                        criteria.addOrder(Order.desc(propertyName));
                    }
                }
                //用于分页查询
                if(maxResults != 0){
                    criteria.setFirstResult(firstResult);
                    criteria.setMaxResults(maxResults);
                }
                List<T> list = criteria.list();
                return list;
            }
        });
        return list;
    }
  
  
    @SuppressWarnings({ "unchecked", "rawtypes" })
public int findCountsByCriteria(final Class<T> entityClass,final Criterion... criterions){
            int totalCounts = (Integer)getHibernateTemplate().execute(new HibernateCallback(){

            public Object doInHibernate(Session session)
                    throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(entityClass);
                //按属性条件查询
                for(Criterion criterion : criterions){
                    criteria.add(criterion);
                }
                int totalCounts = criteria.list().size();
                return totalCounts;
            }
        });
        return totalCounts;
    }
  
         做分页:
public List findByPage(final String hql,
        final int offset, final int pageSize)
    {
        //通过一个HibernateCallback对象来执行查询
        List list = getHibernateTemplate()
            .executeFind(new HibernateCallback()
        {
            //实现HibernateCallback接口必须实现的方法
            public Object doInHibernate(Session session)
                throws HibernateException, SQLException
            {
                //执行Hibernate分页查询
                List result = session.createQuery(hql)
                    .setFirstResult(offset)
                    .setMaxResults(pageSize)
                    .list();
                return result;
            }
        });
        return list;
    }

  
    public List findByPage(final String hql , final Object value ,
        final int offset, final int pageSize)
    {
        //通过一个HibernateCallback对象来执行查询
        List list = getHibernateTemplate()
            .executeFind(new HibernateCallback()
        {
            //实现HibernateCallback接口必须实现的方法
            public Object doInHibernate(Session session)
                throws HibernateException, SQLException
            {
                //执行Hibernate分页查询
                List result = session.createQuery(hql)
                    //为hql语句传入参数
                    .setParameter(0, value)
                    .setFirstResult(offset)
                    .setMaxResults(pageSize)
                    .list();
                return result;
            }
        });
        return list;
    }

  
    public List findByPage(final String hql, final Object[] values,
        final int offset, final int pageSize)
    {
        //通过一个HibernateCallback对象来执行查询
        List list = getHibernateTemplate()
            .executeFind(new HibernateCallback()
        {
            //实现HibernateCallback接口必须实现的方法
            public Object doInHibernate(Session session)
                throws HibernateException, SQLException
            {
                //执行Hibernate分页查询
                Query query = session.createQuery(hql);
                //为hql语句传入参数
                for (int i = 0 ; i < values.length ; i++)
                {
                    query.setParameter( i, values[i]);
                }
                List result = query.setFirstResult(offset)
                    .setMaxResults(pageSize)
                    .list();
                return result;
            }
        });
        return list;
    }
}

分享到:
评论

相关推荐

    SQLite 查询所有 分页查询 查询个数

    在处理大量数据时,为了提高效率并避免一次性加载所有数据导致性能下降,通常会采用分页查询的方式来获取数据。下面我们将详细探讨SQLite中的查询所有、分页查询以及查询个数的相关知识点。 1. 查询所有数据: 在...

    hbase分页查询实现.pdf

    HBase分页查询实现 HBase作为一个NoSQL数据库,具有高性能、高可扩展性和高可靠性等特点,但是在查询方面却存在一些限制,例如不支持分页查询。这就使得开发者需要自己实现分页查询功能。本文将讲解如何使用Java...

    基于springmvc实现分页查询

    本篇文章将详细探讨如何基于Spring MVC实现分页查询,这对于任何处理大量数据的Web应用都是至关重要的。 首先,理解分页的基本概念。分页是将大型数据集划分为较小、更易管理的部分,以提高用户体验并减少服务器...

    Android开发之数据库的分页查询代码

    在Android应用开发中,数据库是数据存储的重要方式,特别是在处理大量数据时,为了提高用户体验,分页查询就显得尤为重要。本篇文章将详细讲解如何在Android中实现数据库的分页查询功能,以高效、流畅地加载和展示...

    完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    在开始解决分页查询问题之前,我们先来了解一下MyBatis Plus的基本概念。MyBatis Plus的核心组件之一是PaginationInterceptor,这是一个分页拦截器,它负责在执行SQL时自动添加分页条件。在不启用这个拦截器的情况下...

    JPA分页查询与条件分页查询

    在这个场景中,我们将探讨如何使用JPA进行分页查询以及带有条件的分页查询。 首先,为了使用Spring Data JPA,我们需要在项目中引入相应的依赖。在Maven的pom.xml文件中,你需要添加`spring-boot-starter-data-jpa`...

    JPA复杂查询加分页查询的快速开发

    JPA复杂查询加分页查询的快速开发 JPA(Java Persistence API)是 Java 的持久层 API,用于访问、持久化数据。使用 JPA,可以快速开发复杂查询,实现高效的数据访问。下面是 JPA 复杂查询加分页查询的快速开发知识...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    winform高效率的分页查询

    本话题聚焦于“winform高效率的分页查询”,我们将探讨如何在VS2013环境下,结合SQL Server 2008数据库,实现高效的数据分页加载到`DataGridView`中。 首先,理解分页查询的原理至关重要。在大数据量的情况下,一次...

    oracle分页查询sql

    ### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...

    Jsp+Servlet+MyBatis完成分页查询

    在本文中,我们将深入探讨如何使用JSP、Servlet和MyBatis这三种技术来实现一个分页查询的功能。这是一个常见的需求,在许多Web应用程序中,为了提高用户体验,通常需要将大量数据分批次展示,而不是一次性加载所有...

    大数据量多线程执行分页查询

    多线程技术与分页查询相结合,可以有效地解决这一问题,提高系统性能并优化用户体验。以下是对标题和描述中涉及知识点的详细解释: 1. **大数据量处理**:当数据库中的数据达到百万甚至亿级时,单线程查询可能导致...

    PB 做的分页查询24行一页

    标题中的“PB 做的分页查询24行一页”指的是使用PowerBuilder(PB)这一编程工具进行数据库查询时实现的分页功能。在数据库交互中,分页查询是常用的技术,它允许用户逐页浏览大量数据,而不是一次性加载所有记录,...

    oracle分页查询并返回总记录数据存储过程

    ### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...

    java语言的分页查询功能(mysql和sql server)

    在Java编程中,分页查询是一项非常重要的功能,特别是在处理大量数据时,它能有效地减少内存负担,提高应用性能。本教程将详细讲解如何在Java中实现不分框架的分页查询,同时涵盖对MySQL和SQL Server数据库的支持。 ...

    springmvc+mybatis+分页查询

    在本项目中,我们主要探讨的是如何利用Spring MVC和MyBatis两大流行框架构建一个具有分页查询功能的Web应用。Spring MVC作为控制层,负责处理HTTP请求和响应,而MyBatis则作为数据访问层,用于处理数据库交互。下面...

    ArcGIS API for Flex 2.0开发应用之分页查询

    ArcGIS API for Flex 2.0开发应用之分页查询 在GIS应用系统中,对GIS数据进行分页查询一直是一个亟待解决的问题。传统的WEB开发中,分页查询数据库已经是一个历史悠久的功能,但是在GIS应用系统中,这个简单的分页...

    JavaWeb实现分页查询案例

    在JavaWeb开发中,分页查询是一个非常常见的需求,它能有效地提高网页加载速度,提升用户体验。本案例通过原生的PageBean实现分页查询,采用JDBC(Java Database Connectivity)进行数据库操作,Servlet作为控制层...

    千万级数据分页查询存储过程SQLServer

    在SQL Server中,面对千万级别的大数据量,进行有效的分页查询是数据库性能优化的重要环节。存储过程在这种场景下显得尤为重要,因为它们可以提高查询效率,减少网络传输,并且便于管理和重用代码。本文将深入探讨...

    实现分页查询(上)

    在网页开发中,分页查询是一项非常重要的技术,它能够帮助用户有条不紊地浏览大量数据,提高用户体验,同时也减轻了服务器一次性处理过多数据的压力。本篇文章将深入探讨分页查询的概念、实现原理以及常见方法,以...

Global site tag (gtag.js) - Google Analytics