`
taiwei.peng
  • 浏览: 235338 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate 分页方法

    博客分类:
  • java
阅读更多
@Repository
public class BulkCargoDao extends BaseEntityDao<BulkCargo> implements IBulkCargoDao {

@Resource
private IZoneCodeInfoBiz zoneCodeInfoBiz;

public void setZoneCodeInfoBiz(IZoneCodeInfoBiz zoneCodeInfoBiz) {
this.zoneCodeInfoBiz = zoneCodeInfoBiz;
}

/**
* 查询监控信息
* @param queryParam
* @return
* @throws DaoException
*/
@Override
@SuppressWarnings("unchecked")
public List<BulkCargo> findBulkCargoByParam(final QueryParam queryParam)
throws Exception {
final List<Object> paramList=new ArrayList<Object>();
final String sqlString = generateSQL(queryParam,paramList);
return (List<BulkCargo>) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createSQLQuery(sqlString);
query.setFirstResult(queryParam.getPageSize()*(queryParam.getPageIndex()));
query.setMaxResults(queryParam.getPageSize());
if (paramList != null && paramList.size() > 0) {
Object[] values = paramList.toArray();
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
return findBulkCargoResult(query.list(),queryParam);
}
});
}

/**
* 拼装Sql
* @param queryParam
* @param paramList
* @return
*/
private String generateSQL(QueryParam queryParam,List<Object> paramList)throws Exception{
StringBuffer sb = new StringBuffer();
String sql="";
sql = SQLProvider.getSQL("query_bulkCargo").trim();
sb.append(sql);
return this.setCommonQueryCondition(queryParam, paramList, sb);
}

/**
* 设置共有的查询条件
* @param queryParam
* @param paramList
* @param sb
* @return
* @throws Exception
*/
private String setCommonQueryCondition(QueryParam queryParam,List<Object> paramList,StringBuffer sb)throws Exception{
String queryValue="";
String commonSql="";
//开始日期
queryValue= queryParam.getQueryValue("query_startDate");
        if(!BlankUtil.isBlank(queryValue)){
        sb.append(" AND T.REPORT_DT>=to_date(?,'yyyy-MM-dd')");
        paramList.add(queryValue);
        }
        //结束日期
        queryValue=queryParam.getQueryValue("query_endDate");
        if(!BlankUtil.isBlank(queryValue)){
        sb.append(" AND T.REPORT_DT<=to_date(?,'yyyy-MM-dd')");
        paramList.add(queryValue);
        }
        //线路编码
        queryValue=queryParam.getQueryValue("query_lineCode");
        if(!BlankUtil.isBlank(queryValue)){
        sb.append(" AND T.LINE_CODE= ? ");
        paramList.add(queryValue);
        }
        //运力名称
        queryValue=queryParam.getQueryValue("query_conveyanceName");
        if(!BlankUtil.isBlank(queryValue)){
        sb.append(" AND T.CONVEYANCE_NAME LIKE ? ");
        paramList.add("%"+queryValue+"%");
        }
        //始发网点
        queryValue=queryParam.getQueryValue("query_srcZoneCode");
        if(!BlankUtil.isBlank(queryValue)){
        commonSql=" AND EXISTS (SELECT 1 FROM TM_DEPARTMENT B WHERE T.SRC_ZONE=B.DEPT_CODE ";
        this.convertSrcZoneCode(queryValue,sb, paramList,commonSql);
        }
        //到达网点
        queryValue=queryParam.getQueryValue("query_destZoneCode");
        if(!BlankUtil.isBlank(queryValue)){
        commonSql=" AND EXISTS (SELECT 1 FROM TM_DEPARTMENT B WHERE T.DEST_ZONE=B.DEPT_CODE ";
        this.convertSrcZoneCode(queryValue,sb, paramList,commonSql);
        }
return sb.toString();  
}

/**
* 输入查询条件为始发网点和到达网点的逻辑
* @param queryValue
* @param sb
* @param paramList
* @param commonSql
* @throws Exception
*/
private void convertSrcZoneCode(String queryValue,StringBuffer sb,List<Object> paramList,String commonSql)throws Exception{
      String [] deptValue=null;
      String res="";
      int typeLevel=0;
      if (!BlankUtil.isBlank(queryValue)){
        String zoneCode=queryValue.toUpperCase().replace(",", ",");
deptValue=zoneCode.split(",");
res = zoneCodeInfoBiz.checkZoneCodesIsEffective(deptValue);
if(res.equals(OmpmgmtConstants.SUCCESS)){
   typeLevel=zoneCodeInfoBiz.getZoneCodeLevel(deptValue[0]);
   sb.append(commonSql);
   switch(typeLevel){
      case 1:sb.append(" AND B.HQ_CODE IN ");break;
      case 2:sb.append(" AND B.AREA_CODE IN ");break;
      case 3:sb.append(" AND B.DEPT_CODE IN ");break;
      case 4:sb.append(" AND B.DIST_CODE IN ");break;
   }
   sb.append("(");
           for(String deptCode:deptValue){
           sb.append("?,");
           paramList.add(deptCode);
           }
           sb.replace(sb.toString().length()-1, sb.toString().length(),"");
           sb.append("))");
   }
       }
}

/**
* 封装返回结果集
* @param transferValue
* @param queryParam
* @return
*/
private List<BulkCargo> findBulkCargoResult(List<Object[]> transferValue,QueryParam queryParam){
List<BulkCargo> bulkCargoList=new ArrayList<BulkCargo>();
BulkCargo bulkCargo=null;
for(int i=0;i<transferValue.size();i++){
int number=0;
bulkCargo=new BulkCargo();
Object [] transferObj=transferValue.get(i);
//日期
bulkCargo.setQueryDate((Date)transferObj[number++]);
//始发网点
bulkCargo.setSrcZoneCode(transferObj[number++].toString());
//始发班次
bulkCargo.setSrcBatchCode(transferObj[number++].toString());
//线路编码
bulkCargo.setLineCode(transferObj[number++]==null?"":transferObj[number-1].toString());
//运力名称
bulkCargo.setConveyanceName(transferObj[number++]==null?"":transferObj[number-1].toString());
//运力类型
bulkCargo.setConveyanceType(ConveynceTypeEnum.getName(TypeUtil.intPrimValue(transferObj[number++])));
//线路等级
bulkCargo.setLineLevel(LineLevelEnum.getDesc(transferObj[number++]==null?"":transferObj[number-1].toString()));
//计划起飞,发车时间
bulkCargo.setPlanDepartTime((Date)transferObj[number++]);
//实际起飞,发车时间
bulkCargo.setActualDepartTime((Date)transferObj[number++]);
//计划落地,到达时间
bulkCargo.setPlanArriveTime((Date)transferObj[number++]);
//实际落地,到达时间
bulkCargo.setActualArriveTime((Date)transferObj[number++]);
//到达网点
bulkCargo.setDestZoneCode(transferObj[number++].toString());
//实际散货班次
bulkCargo.setActualBatchCode(transferObj[number++]==null?"":transferObj[number-1].toString());
//运力实到票数
bulkCargo.setActualLoadCnt(transferObj[number++]==null?"":transferObj[number-1].toString());
//实发班次编码
bulkCargo.setActualDepartBatchCode(transferObj[number++]==null?"":transferObj[number-1].toString());
//实发票数
bulkCargo.setActualDepartCnt(transferObj[number++]==null?"":transferObj[number-1].toString());
//实发占比
bulkCargo.setActualDepartRatio(transferObj[number++]==null?"":transferObj[number-1].toString());
bulkCargoList.add(bulkCargo);
}
return bulkCargoList;
}

/**
* 查询数量
* @param queryParam
* @return
* @throws DaoException
*/
@Override
@SuppressWarnings("unchecked")
public int findBulkCargoSize(QueryParam queryParam) throws Exception {
final List<Object> paramList=new ArrayList<Object>();
final String sqlString = generateCountSQL(queryParam,paramList);
return ((Number) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createSQLQuery(sqlString);
if (paramList != null && paramList.size() > 0) {
Object[] values = paramList.toArray();
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
return query.uniqueResult();
}
})).intValue();
}

/**
* 拼装汇总Sql
* @param queryParam
* @param paramList
* @return
*/
private String generateCountSQL(QueryParam queryParam,List<Object> paramList)throws Exception{
StringBuffer sb = new StringBuffer();
String sql="";
sql = SQLProvider.getSQL("cont_bulkCargo").trim();
sb.append(sql);
return this.setCommonQueryCondition(queryParam, paramList, sb);
}
分享到:
评论

相关推荐

    Hibernate分页查询小结

    Hibernate分页查询小结

    hibernate分页Hibernate 分页的设计和编码

    标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...

    Hibernate分页查询原理解读

    #### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...

    hibernate分页

    本文将详细介绍一种通用的Hibernate分页方法,并通过一个具体的例子来说明其实现细节。 #### 二、分页概念解析 分页是指将数据分割成一系列的页面,每次只显示其中一页的数据。这种方式可以有效地减少单次查询的...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    在Action类中,我们需要处理来自用户的请求参数,如当前页码和每页显示记录数等,并调用DAO中的分页查询方法获取数据。然后将这些数据传递给视图层进行展示。 #### 示例代码分析 下面是一个简化的示例代码片段,...

    hibernate分页查询

    Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults属性来实现分页。FirstResult表示从结果集的第几个元素开始获取,MaxResults...

    hibernate分页查询 数据库连接

    此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...

    struts2+spring+hibernate分页显示完整代码

    本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...

    struts+spring+hibernate通用分页方法

    struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692

    strut2.0 + hibernate3.0 + jquery.datatables+mysql 5.0实现的 hibernate分页

    hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网http://www.datatables.net/,datatables的功能很 全面。 2,建表的sql--studentinfo和插入...

    hibernate分页代码

    总结起来,"hibernate分页代码"是一个关于如何在Hibernate中进行分页查询的实践示例,适用于在MyEclipse环境下运行。通过Criteria API或HQL,开发者能够方便地实现分页功能,提升应用性能,为用户提供更好的体验。...

    Struts + Hibernate 分页实现

    在分页场景下,一个Action类可能会包含获取当前页数、每页显示条数以及执行查询等方法。当用户点击页面链接时,Struts会根据配置的Action Mapping将请求转发到对应的Action。 接下来是Hibernate的使用。在数据库...

    hibernate实现分页

    3. **编写分页方法**:在Action类中,创建一个方法如`execute()`,在该方法内调用Hibernate的分页查询代码,然后将结果集封装到一个模型对象(如`UserPaginationModel`)中。 4. **配置Struts2的配置文件**:在`...

    Struts和Hibernate分页及查询

    在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...

    spring+hibernate 分页 +mysql

    这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...

    java 实现的一个简单的hibernate分页类

    java 实现的一个简单的hibernate分页类 可以设置,从某一条开始取、显示的条数 不依赖struts spring

    Hibernate分页教学视频

    Hibernate分页教学视频 Hibernate分页教学视频 Hibernate分页教学视频

    hibernate分页技巧

    hibernate分页 博文链接:https://iomo.iteye.com/blog/243518

    Hibernate分页封装

    Hibernate分页封装 Hibernate是一个流行的Java持久化框架,提供了对数据库的访问和操作。然而,在实际开发中,分页是一种非常常见的需求,Hibernate也提供了相应的解决方案。下面,我们将对Hibernate分页封装进行...

    用户Hibernate实现的一个分页

    一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了分页功能。使用`setFirstResult()`方法设置查询开始的位置,即第几条记录,以及`setMaxResults()`方法设置一次返回的最大记录数,这两者结合即可...

Global site tag (gtag.js) - Google Analytics