`
nbaertuo
  • 浏览: 76077 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Ecside整合到SpringSide

阅读更多

Struts基类代码

public ActionForward doQuery(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  // 当列表的分页 过滤 排序等操作是基于数据库时,必须要用到Limit对象.
  // 注意,当页面有多个ec的时候,需要使用带 tableId参数的同名方法.
  // Limit limit=RequestUtils.getLimit(request,"ecGird的Id");
  Limit limit = RequestUtils.getLimit(request);

  // 基于数据库的排序.
  // EC会取得排序的相关信息:当前是按哪个(目前只支持单列排序)column排序的,以及排序的方式desc或asc,
  // 这个信息以key-value方式存放在map里.
  // 但是至于如果处理这些信息(如组装成sql语句),则是由开发人员自己在DAO里完成的.
  Sort sort = limit.getSort();
  Map sortValueMap = sort.getSortValueMap();

  // 基于数据库过滤.
  // EC会取得过滤的相关信息:当前是对哪些column进行过滤,以及过滤的内容是什么,这个信息以key-value方式存放在map里.
  FilterSet filterSet = limit.getFilterSet();
  //Map filterPropertyMap = filterSet.getPropertyValueMap();
  T obcect=entityClass.newInstance();
  bindEntity(form, obcect);
  //filterPropertyMap=BeanUtils.describe(obcect);
  // 在本例中, sort 和 filter 相关信息将被传入 DAO,用于拼装sql语句.
  // 其实,此时的排序 过滤就和我们以前的传统的查询非常类似:从查询页面取得查询条件,传入DAO.
  // RequestUtils.getTotalRowsFromRequest(request);是一个工具类,用来从ECSIDE的列表中取得上次计算出的总行数
  // 如果您不希望每次翻页都重新计算总行数,那么建议参考下面几行代码的做法.
  int totalRows = RequestUtils.getTotalRowsFromRequest(request);
  if (totalRows < 0) {

   // 取得记录总条数时,不要忘了把filter作为参数传入,因为要取得的总行数也是要接受条件限制的.
   //totalRows = getEntityManager().getTotalEntitys(obcect,sortValueMap);
   totalRows = getEntityManager().FindTotalEntitys(obcect,sortValueMap);
  }
  // DEFAULT_PAGE_SIZE ==0 时, 每页记录数会使用 properties文件内的默认设置
  // DEFAULT_PAGE_SIZE <0 时, 每页记录数会等于全部记录数
  limit.setRowAttributes(totalRows, DEFAULT_PAGE_SIZE);
  // 取得当前要查询的页面的记录起止行号
  // offset表示数据编号的起始号,不同的数据库起始号不一样
  int offset = 0;
  int[] rowStartEnd = new int[] { limit.getRowStart() + offset,
    limit.getRowEnd() + offset };
  // rowStartEnd[0], rowStartEnd[1] 左闭 右开
  List list = (List) getEntityManager().FindEntitysForPage(rowStartEnd[0],
    rowStartEnd[1], obcect, sortValueMap);

  request.setAttribute(getEntityListName(), list);
  return mapping.findForward("eclist");

 }

Hibernate 代码

/**
  * ec分页 Query方式 带过滤条件和模糊查询
  *
  * @author DM
  */
 public List<T> FindEntitysForPage(int startRow, int countPerPage, T filter,
   Map order) {

  String sql = " from " + getEntityClass().getName() + " a where 1=1";
  List list = getQuerySql(sql, filter, order);
  sql = list.get(0).toString();
  list.remove(0);
  Object[] objects = list.toArray();
  Query qr = createQuery(sql, objects);
  qr.setFirstResult(startRow);
  qr.setMaxResults(countPerPage - startRow);
  return qr.list();
 }

 /**
  * Query方式 根据查询条件,过滤,得到符合条件的记录总数
  *
  * @param filter
  * @author By Dm
  * @return
  */
 public int FindTotalEntitys(T filter, Map order) {
  int result = 0;
  String sql = "select count(*) from " + getEntityClass().getName()+ " a where 1=1";
  List list = getQuerySql(sql, filter, order);
  sql = list.get(0).toString();
  list.remove(0);
  Object[] objects = list.toArray();
  Query qr = createQuery(sql, objects);

  Integer count = (Integer) qr.uniqueResult();
  if (null == count) {
   result = 0;
  } else {
   result = count.intValue();
  }
  return result;

 }

 // SQL语句自动拼装
 /**
  * @author DM
  */
 public List getQuerySql(String sql, T filter, Map order) {
  List objects = new ArrayList();
  objects.add(sql);
  objects=getSqlByBean(objects, filter, "");
  sql=objects.get(0).toString();
  // 排序
  if (order != null) {
   Set fieldNameSet = order.keySet();
   for (Iterator iterator = fieldNameSet.iterator(); iterator
     .hasNext();) {
    String fieldName = (String) iterator.next();
    if (StringUtils.isNotEmpty(fieldName)) {
     String orderType = order.get(fieldName).toString();
     if ("asc".equalsIgnoreCase(orderType)) {
      sql = sql + "order by " + fieldName + ".asc";
     } else {
      sql = sql + "order by " + fieldName + ".desc";
     }
    }
   }

  }
  objects.set(0, sql);
  return objects;

 }

 /**
  * 通过bean无限遍历SQL语句
  * @author DM
  */
 public List getSqlByBean(List objects, Object filter,
   String BeanName) {
  String sql=objects.get(0).toString();
  BeanUtilsBean beanunit = new BeanUtilsBean();
  PropertyDescriptor origDescriptors[] = beanunit.getPropertyUtils()
    .getPropertyDescriptors(filter);

  for (int i = 0; i < origDescriptors.length; i++) {
   String fieldName = origDescriptors[i].getName();
   Object values = null;
   try {
    values = beanunit.getPropertyUtils().getSimpleProperty(filter,
      fieldName);
    if (fieldName.equals("class")) {
     continue;
    }

    if (values != null) {
     // String类型
     if (values.getClass() == String.class) {
      if (StringUtils.isNotEmpty(values.toString())) {
       sql = sql + " and ( a." + BeanName + fieldName + " like  ?  )";
       objects.add("%" + values + "%");
       objects.set(0, sql);
      }
      // 时间类型
     } else if (values.getClass() == Date.class) {
      if(fieldName.endsWith("Start")){
      fieldName = fieldName.substring(0, fieldName
        .length() - 5);
      sql = sql + " and ( a." + BeanName + fieldName
        + " between ? and  ?  )";
      objects.add(values);
      Date endValues=(Date) beanunit.getPropertyUtils().getSimpleProperty(filter, fieldName + "End");
      if(endValues==null){
       endValues=new Date();
      }
      objects.add(endValues);
      objects.set(0, sql);
         }else if(fieldName.endsWith("End")){
       fieldName = fieldName.substring(0, fieldName
         .length() - 3);
       sql = sql + " and ( a." + BeanName + fieldName
         + " between ? and  ?  )";
       Date SrartValues=(Date) beanunit.getPropertyUtils().getSimpleProperty(filter, fieldName + "Start");
       if(SrartValues==null){
        DateConverter dc=new DateConverter();
        SrartValues=(Date) dc.convert(Date.class, "2000-01-01");
       }
       objects.add(SrartValues);
       objects.add(values);
       objects.set(0, sql);
         }
//       Long类型
      } else if (values.getClass() == java.lang.Long.class) {
      sql = sql + " and ( a." + BeanName + fieldName + " = ? ) ";
      objects.add(values);
      objects.set(0, sql);
      // Set类型
     } else if (values.getClass() == java.util.HashSet.class) {
      continue;
      // Integer类型
     }else if (values.getClass() == java.lang.Integer.class) {
//      需求自己添加
      continue;
      // Boolean类型
     }else if(values.getClass() == java.lang.Boolean.class){
      //需求自己添加
      continue;
     }
      else {
      BeanName = fieldName + "." + BeanName;
      getSqlByBean(objects, values, BeanName);
     }
    }
   } catch (IllegalAccessException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   } catch (InvocationTargetException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   } catch (NoSuchMethodException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }

  }
  
  return objects;
 }

分享到:
评论

相关推荐

    ecside2.0rc1源码及文档jar包等

    通过研究ECSide 2.0rc1的源码,开发者可以了解到其内部机制,如MVC(Model-View-Controller)模式的应用,事件处理,以及对数据库操作的支持等。 - **定制开发**:拥有源码意味着可以按照项目需求进行二次开发,...

    springside3.3.4 使用方法

    ### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...

    springside3.0.zip

    8. **安全控制**:Spring Security(前身Acegi Security)被集成到SpringSide 3.0中,提供了一套全面的安全管理方案,包括身份验证、授权、会话管理等。 9. **日志管理**:SpringSide 3.0 使用Log4j或Logback作为...

    Springside-core-4.1.0/Springside-core-4.1.0

    《SpringSide核心库4.1.0深度解析》 SpringSide是Java开发中的一款轻量级框架,它基于Spring框架,旨在简化企业级应用的开发流程。本文将深入探讨SpringSide-core-4.1.0的核心特性,以及其在实际项目中的应用。 一...

    springside-3.2.2源码

    通过对 Springside 3.2.2 源码的深入学习,开发者可以掌握基于 Spring 的企业级应用开发技术,理解模块化设计、MVC 架构、依赖注入等核心概念,同时也能了解到项目管理和自动化构建的最佳实践。这将有助于提升开发者...

    SpringSide4 参考手册

    SpringSide4参考手册是一份详尽的文档,涵盖了使用SpringSide4.0版本开发应用时可能会用到的各种技术组件和模块。SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂...

    springside开发全面讲解

    总的来说,《springside开发全面讲解》资料将涵盖springside的所有重要方面,从基础到高级,从理论到实践,旨在培养开发者对springside的全面掌握,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。...

    springside

    通过分析这个目录,我们可以学习到SpringSide如何组织项目结构,以及如何配置和使用Spring的各个组件。 在实际应用中,SpringSide可以应用于各种场景,如开发企业级的Web应用、构建微服务、实现数据访问层的自动化...

    springside3.3完整版

    《SpringSide 3.3 完整版:深入解析与实战指南》 SpringSide 是一个开源的Java项目,旨在提供一套简洁、规范的Spring应用开发模板,帮助开发者快速上手Spring框架。本版本,即“springside3.3”,是专为MyEclipse...

    springside-core-4.2.2.GA(含关联的test.jar)

    pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true

    有springside4.2.3-GA.jar 包

    使用springside4.2.3-GA.jar,开发者可以享受到以下优势: 1. **代码规范**:SpringSide遵循一系列编码和设计规范,帮助团队保持代码一致性,提升代码质量。 2. **自动化配置**:基于Spring的自动化配置,减少了...

    springside-4.0.0.GA.zip

    通过深入研究SpringSide 4.0.0.GA,开发者可以学习到如何有效地整合Spring Framework和其他相关技术,提升自己的JavaEE开发技能。无论是对于新手还是资深开发者,SpringSide都是一个不可多得的学习和参考资料库,它...

    springside4(showcase)

    SpringSide 4的showcase还会展示如何整合其他Spring模块,比如Spring Security进行权限管理,Spring Data进行数据访问,Spring AOP实现切面编程,以及Spring Test进行单元测试和集成测试。所有这些都将帮助开发者...

    springside框架

    《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...

    springside4-4.2.3.GA

    总结来说,SpringSide 4.2.3.GA是一个综合性的Java开发框架,它整合了Spring、Spring Boot、Groovy等先进技术,提供了全面的项目结构、自动化测试和持续集成方案。无论是对于初学者还是经验丰富的开发者,SpringSide...

    springside4-4.1.0.GA

    总结,SpringSide 4.1.0.GA作为一款成熟的Java开发框架,通过其对Spring生态的深度整合和一系列实用工具,为企业级应用开发提供了强有力的支持。无论你是Java新手还是资深开发者,都能从中受益,提升项目的开发效率...

    SpringSide3.3.4安装部署

    SpringSide3.3.4 安装部署详解 SpringSide3.3.4 安装部署是指在计算机上安装和部署 SpringSide3.3.4 软件的过程。在这个过程中,我们需要使用 Maven 工具来生成项目模板,安装 mini-web 应用程序,并配置相应的...

    springside.jar

    从项目构建、测试到功能实现,springside.jar都为Java开发者提供了高效、规范的解决方案。在实际开发中,合理利用springside.jar,不仅能提升开发效率,还能保证代码质量和项目稳定性。因此,理解和掌握springside....

    springside5

    这种更换可能涉及到数据库设计、SQL查询优化以及事务处理等方面的知识。 2. **采用MyBatis作为持久层**:MyBatis是一个优秀的Java持久层框架,它允许开发者将SQL语句直接写在XML或注解中,提高了数据库操作的灵活性...

    springside-案例

    【描述】"springside 案例 转换为myeclipse"指的是将SpringSide项目导入到MyEclipse集成开发环境中进行进一步的开发和调试。MyEclipse是一款功能强大的Java EE集成开发工具,支持多种框架和项目类型,包括Spring。将...

Global site tag (gtag.js) - Google Analytics