Struts Hibernate Spring 后台数据查询
本文源自:http://blog.csdn.net/tannongchun/article/details/11034047 ,感谢作者的分享
自定义查询PropertyFilter与QBC
1、页面参数传递规则
参数规则:前缀+"_"+操作符+属性类型+"_"+属性名称
前缀:以"filter"开头
操作符:NE,EQ, LIKE,SLIKE,ELIKE, LT, GT, LE, GE;//不等于,等于,全模糊匹配,左匹配、右匹配,小于、大于
属性类型:S代表String,I代表Integer,L代表Long, N代表Double, D代表Date,B代表Boolean
属性名称:bo属性名称
Filter_ EQD_taskDate
1)常用查询
filter_LIKES_name 等价于 "from Menu mwhere m.name like '%?%'"
1)多个属性间用"_OR_"分割
filter_EQL_id_OR_parentId 等价于 "from Menu mwhere m.id = ? or m.parentId =?"
2)BO包含实体的子属性以两条下划线分割"__"(注:非主键需要设置别名参看第5点【使用别名的查询】)
filter_EQL_id_OR_parentMenu__id等价于 " from Menu m where m.id =? or m.parentMenu.id =?"
public class Menu{
private String id;//主键ID
private Menu parentMenu;//父级菜单
}
2、自定义构造PropertyFilter,无需前缀,其余不变。
例如:
//根据过来规则构造页面传递的参数
List<PropertyFilter>filters = HibernateWebUtils
.buildPropertyFilters(Struts2Utils.getRequest());
PropertyFilter propertyFilter = newPropertyFilter("LIKES_name","菜单管理");
//自定义的过滤规则添加到filters中进行分页查询
filters.add(propertyFilter);
//等价于 "from Menu mwhere m.name like '%菜单管理%'"
3、PropertyFilter结合Hibernate QBC查询.
注意:PropertyFilter仅支持NE,EQ, LIKE,SLIKE,ELIKE, LT, GT, LE, GE这几种查询方式
如果需求超出以上范围需要按照原始方式查询数据或者直接使用Hibernate QBC查询方式
类EntityManager提供了PropertyFilter转换成Criterion的方法,
这样可以结合PropertyFilter以及原始QBC查询满足不同需求
List<PropertyFilter>转Criterion[]
public Criterion[] getCriterionsByFilter(List<PropertyFilter>filters)
自定义Criterion查询:通过以下方法实现分页查询
publicPage<T> findByCriteria(Page<T> page, Criterion... criterions)
throws DaoException, SystemException,ServiceException
示例代码:
//根据过来规则构造页面传递的参数
List<PropertyFilter> filters =HibernateWebUtils
.buildPropertyFilters(Struts2Utils.getRequest());
//PropertyFilter转换Criterion
Criterion[] cs = sensorDataReportService.getCriterionsByFilter(filters);
//between条件
Criterion c = Restrictions.between("createTime",new Date(), new Date());\
//合并查询条件
cs = (Criterion[])ArrayUtils.add(cs, 0, c);
//分页查询
Page<Menu>p = new Page<Menu>(20);//分页对象
p =menuManger.findByCriteria(p, cs);
public void eqJoin(String key,Object val) {
if (val != null && val != "") {
String[] keys = key.split("\\.");
switch (keys.length) {
case 3:
detachedCriteria.createCriteria(keys[0]).createCriteria(keys[1]).add(Restrictions.eq(keys[2], val));
break;
case 4:
detachedCriteria.createCriteria(keys[0]).createCriteria(keys[1]).
createCriteria(keys[2]).add(Restrictions.eq(keys[3], val));
break;
case 5:
detachedCriteria.createCriteria(keys[0]).
createCriteria(keys[1]).createCriteria(keys[2]).
createCriteria(keys[3]).add(Restrictions.eq(keys[4], val));
break;
}
flag = true;
}
}
4、附QBC参数构造方法
Restrictions工具类:
eq --> equal,=等于.
ne --> not equal,<>不等于.
allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions .eq 的效果
gt --> great-than > 大于
ge --> great-equal >= 大于等于
lt --> less-than, < 小于
le --> less-equal <= 小于等于
between --> 对应SQL的between子句
like --> 对应SQL的LIKE子句
in --> 对应SQL的in子句
and --> and 关系
or --> or 关系
isNull --> 判断属性是否为空,为空则返回true
isNotNull --> 与isNull相反
sqlRestriction --> SQL限定的查询
Order.asc --> 根据传入的字段进行升序排序
Order.desc --> 根据传入的字段进行降序排序
MatchMode.EXACT --> 字符串精确匹配.相当于"like 'value'"
MatchMode.ANYWHERE --> 字符串在中间匹配.相当于"like '%value%'"
MatchMode.START --> 字符串在最前面的位置.相当于"like 'value%'"
MatchMode.END --> 字符串在最后面的位置.相当于"like '%value'"
5、使用别名的查询
在使用外键查询的时候会报错,可能是由于Hibernate自身的限制,具体原因未考察,只知道这个时候需要使用别名查询。
例如:
//能够正常使用
PropertyFilterp = Propertyfilter("EQL_parentMenu__id","1");
//等价于 “from Menu m wherem.parentMenu.id = ?”
// 无效方式
PropertyFilterp = Propertyfilter("LIKES_parentMenu__name","管理");
//等价于 “from Menu m where m.parentMenu.namelike ?”(此HQL语句是可以正常查询出数据)
自定义查询只是简单的一种封装,如果要使用别名查询的,可以自行扩展DAO实现相关查询需求。
扩展DAO层,设置别名(其实只要覆盖父类方法即可)
@Repository
public classMenuDao extends HibernateDao<Menu, Long> {
/**
* 设置别名(覆盖父类SimpleHibernateDao方法).
* @param filters
* @return
*/
public CriteriacreateCriteria(final Criterion... criterions) {
Criteria criteria =getSession().createCriteria(entityClass);
//设置别名
criteria.createAlias("parentMenu", "pm");
for (Criterion c : criterions) {
criteria.add(c);
}
return criteria;
}
}
使用方法(特别注意:使用“LIKES_pm__name”而非“LIKES_parentMenu__name”)
List<PropertyFilter>filters = HibernateWebUtils.buildPropertyFilters(Struts2Utils.getRequest());
PropertyFilterp = Propertyfilter("LIKES_pm__name","管理");
filters.add(p);
...
相关推荐
《学生公寓管理系统:Struts、Hibernate与Spring的整合应用》 在信息技术日益发展的今天,学生公寓管理系统的构建已经成为高等教育机构提升后勤服务效率的关键一环。本资料主要关注使用Struts、Hibernate和Spring三...
在Struts2和Spring的配合下,Hibernate可以通过Spring的HibernateTemplate或JPA的EntityManager进行透明化操作,实现数据层的高效管理。 这个光盘源码上部分可能包含了项目初始化配置、Struts2的Action配置、Spring...
在新闻发布系统中,Spring可以用来管理Struts的Action类,以及Hibernate的数据访问对象(DAO),通过配置文件或注解来注入所需的依赖,降低了代码间的耦合。Spring还提供了事务管理服务,可以方便地在多个数据库操作...
本人自己动手集成的struts+spring+hibernate 网站后台管理系统,希望对刚学习struts的朋友带来一定的帮助,这是我上传此文件的最大愿望,里面有三个框架所需要的jar包和所有的配置文件,只要下载即可运行,不需要...
Struts、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,共同构建出高效、可维护的Web应用程序。Struts主要处理MVC(Model-View-Controller)架构中的控制层,Hibernate则专注于对象关系...
SSH,即Struts2、Hibernate和Spring的组合,是Java Web开发中的一种经典框架集成,用于构建企业级的MVC(Model-View-Controller)应用。这个整合旨在提供一个高效、灵活且可扩展的开发环境,使开发者可以专注于业务...
Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的集成使用可以帮助开发者构建高效、模块化且易于维护的企业级应用程序。在这个经典权限管理系统中,这三者协同工作,为系统提供了模型-视图-控制器...
【Struts+Hibernate+Spring高校选课系统】是一款基于Java技术栈开发的教育管理软件,主要面向初学者,旨在提供一个实践平台,帮助学习者掌握Web应用开发中的核心技术。这个系统整合了三个主流的Java开源框架:Struts...
基于Spring+Struts+Hibernate的轻型架构实现生产数据采集系统.pdf 基于SSH构架的MIS用户管理模块的实现.pdf 基于SSH的播客资源平台的设计与实现.pdf 基于SSH的本科教学评估辅助系统的设计与实现.pdf 基于SSH的物流...
在这个“Struts2+Hibernate+Spring后台表格分页”项目中,我们将深入探讨如何整合这三个框架实现数据的动态展示和分页。 1. **Struts2框架**:Struts2作为MVC(模型-视图-控制器)架构的实现,主要负责处理用户的...
Struts、Hibernate和Spring是Java Web开发中的三大框架,它们的组合使用,即SSH(Struts2、Hibernate4、Spring4),在企业级应用中非常常见。这个名为"当当网struts+hibernate+spring"的项目,显然旨在模拟和学习...
在SSH框架下,可以通过Struts的拦截器或Spring的Pageable接口来实现分页查询,从而避免一次性加载大量数据导致的性能问题。 DWR(Direct Web Remoting)是一种JavaScript到Java的远程调用技术,它使得前端能够直接...
【新闻发布系统JAVA源码(struts+spring+hibernate)】是一个典型的Java Web应用程序,它利用了Struts、Spring和Hibernate三大开源框架的集成来构建高效、可维护的新闻发布平台。这个系统的主要目的是提供一个发布、...
在“网上订餐系统”中,用户可以通过前端界面浏览菜单、下单、支付,后台则通过Struts处理请求,Spring管理业务逻辑和服务,而Hibernate负责与数据库的交互,保存和检索数据。这种三层架构的设计,使得系统的各部分...
Struts、Hibernate和Spring是Java开发中非常流行的三大框架,它们各自负责Web应用程序的不同层面:Struts处理MVC模式中的视图和控制器,Hibernate管理持久层的数据操作,而Spring则提供了一个全面的轻量级应用框架,...
它通过HQL(Hibernate查询语言)或SQL语句进行数据查询,提供了事务管理和缓存机制,提高了数据访问的性能。 【Spring】框架则是一个全面的企业级应用开发框架,包括依赖注入(DI)、面向切面编程(AOP)、数据访问...
(1)该项目是基于spring3+struts2+hibernate3+spring security3的权限管理项目 (2)后台我已经实现了权限管理,包括用户,角色和资源的分配。前台实现了spring security3的管理 (3)网上案例普遍是后台单一登陆。...
**基于Struts+Spring+Hibernate的网上订餐系统详解** 在现代互联网技术中,开发复杂的Web应用程序时,常常会采用MVC(Model-View-Controller)设计模式,以实现业务逻辑与视图的分离,提高代码的可维护性和可扩展性...
Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,而将它们整合在一起可以构建出高效、灵活的企业级应用。在这个批量删除的源码中,我们可以看到这三个框架协同工作的实例。 首先,...
在车辆管理系统中,Spring管理着所有bean的生命周期,包括Struts的Action、Hibernate的SessionFactory等,还可能包含了事务管理,确保数据操作的一致性。 Oracle数据库是这个系统的数据存储中心,它提供了高性能、...