SpringSide
很好很强大,整合了各式主流的、实用的、好玩的开源项目,非常值的学习。springSide3中有一个功能很实用、很方便、就是页面条件过滤(搜索)功能。由于springSide该功能目前只支持String类型的搜索,但在项目中仅仅只有String类型是远远不够的,所以自己就将其功能做了一些扩展。
在扩展中需考滤以下几个问题:
1、需将PropertyFilter类中的枚举MatchType扩展更多的属性比较类型。
2、在构建Criterion对象时,由于由于PropertyFilte中的过滤的属性值都是通过request.getParameter(name)方式所获取,所以需将String类型的值转换成与过滤属性类型一致。
3、要将String类型进行转换,首先需获得过滤属性的类型,属性单一时很好处理,如果为链方式时(如A.B.C.id),怎样处理?怎样来获取最后一个属性类型(id的类型),又假如属性是继承父类而来的又将怎样处理。
围绕以上3点,我主要做了以下扩展:
一、扩展PropertyFilter类中的枚举MatchType
public enum MatchType {
EQ, LIKE, LT, LE, GT, GE;
}
添加了小于、小于等于、大于、大于等于.
二、在ReflectionUtils类中添加获取过滤属性的类型方法
public static Class<?> getFieldType(Class<?> entityClass, String propertyName) {
Assert.hasText(propertyName, "propertyName不能为空");
Class<?> propertyType = null;
try {
if (StringUtils.contains(propertyName, ".")) {
for (String str : propertyName.split("\\.")) {
Field declaredField = getDeclaredField(entityClass, str);
entityClass = declaredField.getType();
}
propertyType = entityClass;
} else {
propertyType = getDeclaredField(entityClass, propertyName).getType();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return propertyType;
}
三、在HibernateWebUtils类中添加值类型转换方法
public static Object convertValue(Object value, Class<?> toType) {
Assert.notNull(value, "value不能为空");
Object result = null;
try {
if (toType == Date.class) {
result = DateUtils.parseDate((String) value, new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss" });
} else {
result = OgnlOps.convertValue(value, toType);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
public static Object convertValue(Object value, Class<?> entityClass, String propertyName) {
return convertValue(value, ReflectionUtils.getFieldType(entityClass, propertyName));
}
四、重构HibernateDao类中的buildPropertyFilterCriterion方法
protected Criterion buildPropertyFilterCriterion(final String propertyName, final Object value,
final MatchType matchType) {
Assert.hasText(propertyName, "propertyName不能为空");
Criterion criterion = null;
Object pValue = null;
try {
pValue = HibernateWebUtils.convertValue(value, entityClass, propertyName);
if (MatchType.EQ.equals(matchType)) {
criterion = Restrictions.eq(propertyName, pValue);
}
if (MatchType.LIKE.equals(matchType)) {
criterion = Restrictions.like(propertyName, (String) value, MatchMode.ANYWHERE);
}
if (MatchType.LT.equals(matchType)) {
criterion = Restrictions.lt(propertyName, pValue);
}
if (MatchType.LE.equals(matchType)) {
criterion = Restrictions.le(propertyName, pValue);
}
if (MatchType.GT.equals(matchType)) {
criterion = Restrictions.gt(propertyName, pValue);
}
if (MatchType.GE.equals(matchType)) {
criterion = Restrictions.ge(propertyName, pValue);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return criterion;
}
分享到:
相关推荐
封装SpringSide扩展功能的Hibernat DAO泛型基类. 扩展功能包括分页查询,按属性过滤条件列表查询. 可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释.
本文将深入探讨springside.jar的核心功能,以及如何在实际项目中有效利用它。 一、springside.jar简介 springside.jar是基于Spring框架的一个轻量级工具库,旨在简化企业级Java开发。它由springside-project组织...
1. **模块化设计**:springside采用模块化设计,将项目划分为多个独立的模块,如核心模块、安全模块、AOP模块等,使得代码结构清晰,易于维护和扩展。 2. **依赖管理**:springside使用Maven进行依赖管理,通过预...
整体来看,SpringSide4参考手册是一份非常详尽的指南,它不仅包含了SpringSide4平台的功能介绍,还提供了实际应用中可能遇到的各种技术问题的解决方案。无论是前端技术如Ajax、JQuery,还是后端技术如SpringMVC、...
4. **模块化设计**:SpringSide-core-4.1.0采用模块化设计,每个模块都有明确的职责,易于维护和扩展。 5. **测试支持**:提供了丰富的单元测试和集成测试支持,确保代码质量。 三、关键特性详解 1. **自动配置**...
《SpringSide3-core-3.3.4:深入解析核心模块与扩展功能》 SpringSide3-core-3.3.4是SpringSide项目的一个重要版本,它是一个基于Java的轻量级开发框架,旨在简化Spring的使用,提高开发效率。这个压缩包包含了两个...
通过熟练掌握SpringSide,开发者不仅可以提高开发效率,还能确保项目具有良好的可维护性和扩展性。 总的来说,SpringSide是Spring Framework的一个重要补充,它通过提供模版项目、最佳实践和丰富的示例,降低了使用...
《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...
总结起来,SpringSide 3.0 是一个全面的Java开发平台,结合了Spring框架的强大功能和其他优秀开源组件,为开发者提供了一个高效、易用的开发环境。理解并掌握SpringSide 3.0 的核心知识点,对于提升Java企业级应用的...
Springside 3.3.4版本作为一个成熟的发布版,不仅集成了Spring框架的核心功能,还提供了对其他开源技术如Hibernate和Struts等的支持。在本文档中,我们将详细介绍如何使用Springside 3.3.4版本,并特别关注SSH...
SpringSide将Spring的核心功能如依赖注入、AOP(面向切面编程)、事务管理、数据访问等进行了封装和优化,使得开发者可以更加专注于业务逻辑,而非底层实现细节。 在“springside-4.0.0.GA”压缩包中,我们可以期待...
使用"springside4-4.1.0.GA"的jar包,开发者可以快速搭建一个基于Spring的项目骨架,然后根据实际需求进行扩展和定制。这不仅可以减少重复工作,还能确保项目遵循最佳实践,提高整体开发效率和代码质量。同时,随着...
springside4.2.3-GA.jar是SpringSide框架的一个版本,包含了该框架的所有核心组件和依赖,使得开发者可以快速地引入并使用SpringSide的相关功能。 SpringSide是一个开源的Java企业级开发工具集,它基于Spring ...
在本次讨论中,我们将深入探讨springside3-core-3.3.4.jar这一核心组件,它是SpringSide 3项目的基石,包含了项目的核心功能和模块。 1. **SpringSide 3概述**: SpringSide 3 是由中国的Java社区开发的一个开源...
第三层是HibernateExtendDao,它是HibernateEntityDao的扩展,主要用于添加一些特定或扩展的功能,比如更复杂的查询、自定义业务逻辑等。这层封装可以根据项目需求来定制,以满足特定场景下的需求。 使用SpringSide...
本版本,即“springside3.3”,是专为MyEclipse集成环境设计的,包含了完整的功能代码,方便开发者在MyEclipse中进行开发和调试。同时,它还附带了数据.sql文件,意味着我们可以直接导入数据库,快速搭建项目环境。 ...
SpringSide框架在整合上述技术的基础上,提供了完善的权限管理功能。这通常涉及到用户认证(Authentication)、授权(Authorization)以及角色(Role)和权限(Permission)的管理。通过集成Spring Security或Apache...
在 SpringSide3.3.4 中,我们可以使用 Spring Framework 的功能来开发 Web 应用程序。我们可以使用 Spring MVC 框架来开发控制器、视图和模型。我们还可以使用 Spring Security 来实现身份验证和授权。 SpringSide...
4.1.0.GA版本是该项目的一个稳定发布,包含了对SpringSide核心功能的优化和改进,确保了代码的稳定性和性能。 首先,"springside-core-4.1.0.GA"是核心模块的主JAR文件,其中封装了SpringSide的核心类和接口。这个...
接着,"springside3-extension-3.3.4.jar"是SpringSide 3.x的扩展模块,提供了更多的功能和插件。这些扩展可能包括对其他开源框架的集成,如Hibernate ORM、MyBatis等数据访问框架,或者对Spring Security、Spring ...