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;
}
分享到:
相关推荐
通过研究ECSide 2.0rc1的源码,开发者可以了解到其内部机制,如MVC(Model-View-Controller)模式的应用,事件处理,以及对数据库操作的支持等。 - **定制开发**:拥有源码意味着可以按照项目需求进行二次开发,...
### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...
8. **安全控制**:Spring Security(前身Acegi Security)被集成到SpringSide 3.0中,提供了一套全面的安全管理方案,包括身份验证、授权、会话管理等。 9. **日志管理**:SpringSide 3.0 使用Log4j或Logback作为...
《SpringSide核心库4.1.0深度解析》 SpringSide是Java开发中的一款轻量级框架,它基于Spring框架,旨在简化企业级应用的开发流程。本文将深入探讨SpringSide-core-4.1.0的核心特性,以及其在实际项目中的应用。 一...
通过对 Springside 3.2.2 源码的深入学习,开发者可以掌握基于 Spring 的企业级应用开发技术,理解模块化设计、MVC 架构、依赖注入等核心概念,同时也能了解到项目管理和自动化构建的最佳实践。这将有助于提升开发者...
SpringSide4参考手册是一份详尽的文档,涵盖了使用SpringSide4.0版本开发应用时可能会用到的各种技术组件和模块。SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂...
总的来说,《springside开发全面讲解》资料将涵盖springside的所有重要方面,从基础到高级,从理论到实践,旨在培养开发者对springside的全面掌握,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。...
通过分析这个目录,我们可以学习到SpringSide如何组织项目结构,以及如何配置和使用Spring的各个组件。 在实际应用中,SpringSide可以应用于各种场景,如开发企业级的Web应用、构建微服务、实现数据访问层的自动化...
《SpringSide 3.3 完整版:深入解析与实战指南》 SpringSide 是一个开源的Java项目,旨在提供一套简洁、规范的Spring应用开发模板,帮助开发者快速上手Spring框架。本版本,即“springside3.3”,是专为MyEclipse...
使用springside4.2.3-GA.jar,开发者可以享受到以下优势: 1. **代码规范**:SpringSide遵循一系列编码和设计规范,帮助团队保持代码一致性,提升代码质量。 2. **自动化配置**:基于Spring的自动化配置,减少了...
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
通过深入研究SpringSide 4.0.0.GA,开发者可以学习到如何有效地整合Spring Framework和其他相关技术,提升自己的JavaEE开发技能。无论是对于新手还是资深开发者,SpringSide都是一个不可多得的学习和参考资料库,它...
SpringSide 4的showcase还会展示如何整合其他Spring模块,比如Spring Security进行权限管理,Spring Data进行数据访问,Spring AOP实现切面编程,以及Spring Test进行单元测试和集成测试。所有这些都将帮助开发者...
《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...
总结来说,SpringSide 4.2.3.GA是一个综合性的Java开发框架,它整合了Spring、Spring Boot、Groovy等先进技术,提供了全面的项目结构、自动化测试和持续集成方案。无论是对于初学者还是经验丰富的开发者,SpringSide...
总结,SpringSide 4.1.0.GA作为一款成熟的Java开发框架,通过其对Spring生态的深度整合和一系列实用工具,为企业级应用开发提供了强有力的支持。无论你是Java新手还是资深开发者,都能从中受益,提升项目的开发效率...
SpringSide3.3.4 安装部署详解 SpringSide3.3.4 安装部署是指在计算机上安装和部署 SpringSide3.3.4 软件的过程。在这个过程中,我们需要使用 Maven 工具来生成项目模板,安装 mini-web 应用程序,并配置相应的...
从项目构建、测试到功能实现,springside.jar都为Java开发者提供了高效、规范的解决方案。在实际开发中,合理利用springside.jar,不仅能提升开发效率,还能保证代码质量和项目稳定性。因此,理解和掌握springside....
这种更换可能涉及到数据库设计、SQL查询优化以及事务处理等方面的知识。 2. **采用MyBatis作为持久层**:MyBatis是一个优秀的Java持久层框架,它允许开发者将SQL语句直接写在XML或注解中,提高了数据库操作的灵活性...
【描述】"springside 案例 转换为myeclipse"指的是将SpringSide项目导入到MyEclipse集成开发环境中进行进一步的开发和调试。MyEclipse是一款功能强大的Java EE集成开发工具,支持多种框架和项目类型,包括Spring。将...