`
sunqitang
  • 浏览: 77068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分页方法getScrollDate

DAO 
阅读更多

[code="java"]import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;

import java.util.LinkedHashMap;



import javax.persistence.EmbeddedId;

import javax.persistence.Entity;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import javax.persistence.Query;



import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;



@Transactional

public abstract class DaoSupport implements DAO{

@PersistenceContext protected EntityManager em;



public void clear(){

em.clear();

}



public  void delete(Class entityClass,Object entityid) {

delete(entityClass, new Object[]{entityid});

}



public  void delete(Class entityClass,Object[] entityids) {

for(Object id : entityids){

em.remove(em.getReference(entityClass, id));

}

}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  T find(Class entityClass, Object entityId) {

return em.find(entityClass, entityId);

}



public void save(Object entity) {

em.persist(entity);

}



@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  long getCount(Class entityClass) {

return (Long)em.createQuery("select count("+ getCountField(entityClass) +") from "+ getEntityName(entityClass)+ " o").getSingleResult();

}



public void update(Object entity) {

em.merge(entity);

}



@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  QueryResult getScrollData(Class entityClass,

int firstindex, int maxresult, LinkedHashMap orderby) {

return getScrollData(entityClass,firstindex,maxresult,null,null,orderby);

}



@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  QueryResult getScrollData(Class entityClass,

int firstindex, int maxresult, String wherejpql, Object[] queryParams) {

return getScrollData(entityClass,firstindex,maxresult,wherejpql,queryParams,null);

}



@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult) {

return getScrollData(entityClass,firstindex,maxresult,null,null,null);

}



@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  QueryResult getScrollData(Class entityClass) {

return getScrollData(entityClass, -1, -1);

}



@SuppressWarnings("unchecked")

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)

public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult

, String wherejpql, Object[] queryParams,LinkedHashMap orderby) {

QueryResult qr = new QueryResult();

String entityname = getEntityName(entityClass);

Query query = em.createQuery("select o from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql)+ buildOrderby(orderby));

setQueryParams(query, queryParams);

if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult);

qr.setResultlist(query.getResultList());

query = em.createQuery("select count("+ getCountField(entityClass)+ ") from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql));

setQueryParams(query, queryParams);

qr.setTotalrecord((Long)query.getSingleResult());

return qr;

}



protected void setQueryParams(Query query, Object[] queryParams){

if(queryParams!=null && queryParams.length>0){

for(int i=0; i orderby){

StringBuffer orderbyql = new StringBuffer("");

if(orderby!=null && orderby.size()>0){

orderbyql.append(" order by ");

for(String key : orderby.keySet()){

orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");

}

orderbyql.deleteCharAt(orderbyql.length()-1);

}

return orderbyql.toString();

}

//获得实体名称

protected  String getEntityName(Class entityClass){

String entityname = entityClass.getSimpleName();

Entity entity = entityClass.getAnnotation(Entity.class);

if(entity.name()!=null && !"".equals(entity.name())){

entityname = entity.name();

}

return entityname;

}



protected  String getCountField(Class clazz){

String out = "o";

try {

PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();

for(PropertyDescriptor propertydesc : propertyDescriptors){

Method method = propertydesc.getReadMethod();

if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){

PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors();

out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName());

break;

}

}

} catch (Exception e) {

e.printStackTrace();

}

        return out;

}

}



QueryResult


[code="java"]public class QueryResult {
private List resultlist;
private long totalrecord;

public List getResultlist() {
return resultlist;
}
public void setResultlist(List resultlist) {
this.resultlist = resultlist;
}
public long getTotalrecord() {
return totalrecord;
}
public void setTotalrecord(long totalrecord) {
this.totalrecord = totalrecord;
}
}
分享到:
评论

相关推荐

    java几种分页方法

    java几种分页方法java几种分页方法java几种分页方法 java几种分页方法java几种分页方法java几种分页方法 java几种分页方法java几种分页方法java几种分页方法 java几种分页方法java几种分页方法java几种分页方法

    javaweb两中分页方法

    本文将详细介绍两种常用的JavaWeb分页方法:基于数据库查询的分页和基于内存的分页。 一、基于数据库查询的分页 1. SQL查询分页: 这种方法直接在SQL查询语句中实现分页。大多数数据库系统如MySQL、Oracle、SQL ...

    一种高效的ASP+ACCESS分页方法

    ### 一种高效的ASP+ACCESS分页方法 #### 知识点概述 在Web开发中,尤其是在使用ASP(Active Server Pages)结合ACCESS数据库进行网站构建的过程中,分页技术是非常重要的一个环节。传统的分页方法虽然简单易懂,但...

    c#分页方法整理,c#语言

    本篇文章将深入探讨C#中实现分页的几种常见方法,并提供实践指导。 一、SQL Server 分页 在与SQL Server数据库进行交互时,我们可以利用SQL查询语句中的`OFFSET-FETCH`或`TOP`结合`WITH TIES`来实现分页。例如,...

    DataList分页技巧方法

    DataList分页技巧方法 DataList分页技巧方法是一种实现DataList和Repeater控件的分页显示的方法。该方法使用PagedDataSource类来实现分页显示。PagedDataSource类是ASP.NET提供的一个功能强大的类,用于实现数据...

    数据库分页方法

    ### 数据库分页方法 在处理大量数据时,分页技术是提高用户体验、优化系统性能的重要手段之一。本文将深入探讨数据库分页的基本概念、原理以及实现方式,并通过具体的SQL语句示例来帮助读者更好地理解和掌握这一...

    PHP中数据列表分页方法研究.pdf

    对于小规模的数据,可以使用简单的分页方法,但是对于大规模的数据,需要使用更复杂的分页方法来提高性能。本文对不同数据规模的应用环境进行了测试,结果表明,选择合适的分页方法可以提高 Web 应用系统的性能。 5...

    java一个通用的分页方法

    ### Java通用分页方法解析与应用 在Java开发中,特别是在Web应用中,分页功能是数据展示中不可或缺的一部分。合理的分页不仅能够提升用户体验,还能优化服务器性能,避免一次性加载大量数据导致的延迟和资源消耗。...

    通用分页方法接口.rar

    通用分页方法接口的设计旨在提供一种标准化的、可复用的解决方案,使得不同的数据访问层(如数据库查询、API调用等)都能够方便地进行数据分页操作。下面我们将详细探讨这个主题。 一、分页的基本概念 分页是指将...

    分页处理方法,分页处理,分页代码,分页方法

    在JSP中,可以使用request对象获取请求参数,例如`pageNo`,然后通过调用后端方法获取到分页数据并传递给JSP页面。在`BeanServlet.java`的示例中,数据被存储到`list`列表中,并通过`request.setAttribute("list", ...

    最佳的数据库分页方法

    数据库 分页 web编程 最佳的数据库分页方法

    调用函数分页_分页方法不错_带省略号

    在提供的文件列表中,"page1.jpg"和"page2.jpg"可能是示例分页效果的截图,而"调用函数分页_分页方法不错_带省略号"可能是一个包含具体代码实现的文本文件。通过分析这些文件,可以更深入地理解如何在实际项目中应用...

    asp十万级数据分页方法 长文章分页方法

    在ASP(Active Server Pages)开发中,处理大量数据时,分页是一种常见的优化手段,尤其在展示如文章列表这样的长内容时。本文将详细介绍如何在ASP中实现...在实际开发中,应根据项目需求和资源限制灵活应用这些方法。

    sturts +hernate+ spring分页通用方法

    3. **Spring Service层**:在Service层,创建Spring的`PageRequest`对象,包含分页参数,然后调用Repository层的分页查询方法。 4. **Hibernate查询**:Repository层使用Hibernate的分页API,结合`PageRequest`对象...

    可重用的MVC分页方法(ASP.NET MVC)

    综上所述,这个"可重用的MVC分页方法"案例通过纯手工的方式展示了如何在ASP.NET MVC中实现分页,同时强调了代码的可复用性和易维护性。通过学习这个案例,开发者可以更好地掌握MVC架构下分页功能的实现技巧。

    PHP分页(四种分页方法)类

    本压缩包提供了一个分页类,包含四种不同的分页实现方法,适用于前后台应用。以下是这四种方法的详细说明: 1. 基础查询分页 基础查询分页是最常见的分页方式,它通过在SQL查询语句中添加LIMIT和OFFSET关键字来限制...

    极限超强百度,谷歌分页方法

    这个主题,"极限超强百度,谷歌分页方法",涉及到如何高效地处理大量数据并提供用户友好的分页体验。下面将详细介绍这一领域的关键知识点。 首先,分页的目的是为了提高网页加载速度和用户体验。当搜索引擎返回...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    ### 数据库分页方法概述 在数据库操作中,分页是一项非常重要的技术,尤其是在处理大量数据时,能够有效地提升查询效率和用户体验。本文将详细介绍Oracle、MySQL、SQL Server等常见数据库系统的分页方法。 ### ...

    24款网页分页方法满足网站需要

    在“24款网页分页方法满足网站需要”这个主题中,我们将探讨各种分页实现方式及其优缺点,帮助开发者根据项目需求选择最适合的方案。 1. 基础样式分页:基础的HTML与CSS结合,通过`<ul>`、`<li>`等元素创建分页链接...

    经典struts2分页方法 JAVA_WEB必备分页 源码

    经典Struts2分页方法是Java Web开发者需要掌握的核心技能之一。 分页的实现通常涉及到以下几个关键知识点: 1. **Action类**:在Struts2中,Action类是处理用户请求的中心。为了实现分页,我们需要创建一个包含...

Global site tag (gtag.js) - Google Analytics