首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

发一个Hibernate工具种

2012-10-24 
发一个Hibernate工具类为了简化分页查询的条件参数,写了一个工具类。前提是,页面的参数命名必须按照一定规

发一个Hibernate工具类

为了简化分页查询的条件参数,写了一个工具类。

前提是,页面的参数命名必须按照一定规则,这个规则是f_dataType_property以及s_sortType_property。

f_前缀代表这是一个过滤器(filter),s_前缀代表这是一个排序器(Sort)。

dataType是数据类型,可以写一个枚举来定义这些类型,sortType是排序类型,也可以写一个枚举来定义。

接下来,页面提交到类里面的时候,需要用一个类的静态方法来处理并解析提交的参数。

Map<String, String> parametersMap = org.springframework.web.util.WebUtils.getParametersStartingWith(request, prefix);

prefix就是前缀,根据f_前缀以及s_前缀,就可以拿到过滤器以及排序器的Map集合

然后,

SimpleFilter simpleFilter = new SimpleFilter();

for (Map.Entry<String, String>?entry : parametersMap.entrySet()) {

? // 添加过滤器,这行添加过滤器仅作为一个例子,实际上并不正确,还需要根据dataType来转换value的值类型

? // 并且key也有可能需要添加级联处理

? simpleFilter.addFilter(entry.getKey(), entry.getValue(), MatchType.EQ);

}

最后,只需要xxxDao.findCount(simpleFilter); Collection<xxx> items = xxxDao.find(simpleFilter);

这样就可以得到结果集的数目以及结果集数组

然后可以方便的在页面展示出来。

仅将SimpleFilter的代码贴出来:

上述过滤器参考自Jmesa源码的一个过滤器,有兴趣的同学可以研究一下Jmesa的源码。Jmesa的TableFacade.getLimit().getSortSet().getSorts()可以拿到页面的所有排序集合,而TableFacade.getLimit().getFilterSet().getFilters()则取得所有过滤对象。

接下来,使用SimpleFilter,并配合通用Hibernate泛型DAO,就可以很方便的处理页面表格了。

?

补充两个类:

?

import org.hibernate.criterion.Criterion;/** * 用于为SimpleFilter添加OR过滤条件 * */public class OrClausePair {private String property;private Object value;private Object lo;private Object hi;private MatchType matchType;private Criterion criterion;public OrClausePair(String property, Object value, MatchType matchType) {if (matchType == MatchType.BETWEEN) {throw new RuntimeException("匹配模式不正确");} else {this.property = property;this.value = value;this.matchType = matchType;}}public OrClausePair(String property, Object lo, Object hi) {this.property = property;this.lo = lo;this.hi = hi;this.matchType = MatchType.BETWEEN;}public OrClausePair(Criterion criterion) {this.criterion = criterion;}public String getProperty() {return property;}public Object getValue() {return value;}public Object getLo() {return lo;}public Object getHi() {return hi;}public MatchType getMatchType() {return matchType;}public Criterion getCriterion() {return criterion;}}
?

?

1 楼 whaosoft 2010-03-02        嗯 拿走了 这个写的还是挺不错 挺全面的 感谢之 2 楼 mxdba321123 2010-03-02   貌似类似的工具类 在springside和rapidframework等框架里都有,呵呵 3 楼 清晨阳光 2010-03-03   这个仿了一部分SpringSide 4 楼 peak 2010-03-03   这个写的不错,可惜啊,我觉得还是用sql拼凑出来的好 5 楼 清晨阳光 2010-03-04   如果你的系统有大量的表格都需要分页,并且都是符合条件查询的,那么SQL拼接的数量是惊人的! 6 楼 wenxiang_tune 2010-11-25   所以我们需要一个更好的分页插件,我对自己现在的分页设计不太满意,各位有没更好建议? 7 楼 ycyangcai 2010-12-24   很不错,不知道相关的类能否提供。你说你参照springside的,但发现你的比springside更强大! 8 楼 mib168 2010-12-28   楼主能不能给总结下Criteria和HQL平时项目中都应用于什么情况下呢?  用Criteria比较少 呵呵

热点排行