- 浏览: 185914 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
梦行Monxin商城系统:
最困难的事情就是认识自己
分享我的大型Java多用户商城系统开发的心得和困难 -
梦行Monxin商城系统:
只要坚持下去,总会有意想不到的收获。
java多用户商城系统LegendShop开发指南 -
onecan:
听从了大家的意见,LegendShop已经把Hibernate ...
分享我的大型Java多用户商城系统开发的心得和困难 -
onecan:
最新版本已经不是免费的了
Java多用户商城,给你一个创业的平台 -
www314599782:
架构很不错我要把它写到我的项目里去
分享我的大型Java多用户商城系统开发的心得和困难
接上:
在struts的Action中:
java 代码
- private ActionForward findAllRole(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
- String curPageNO = request.getParameter("curPageNO");
- String myaction;
- String search=request.getParameter("search");
- //String myform="forms[0]";
- if(search==null){
- search="";
- myaction="findAllRole.do";
- }else{
- myaction="findAllRole.do?search="+search;
- }
- removeRequestAttribute(mapping,request);
- try {
- //Qbc查找方式
- CriteriaQuery cq=new CriteriaQuery(Role.class,curPageNO,myaction);
- cq.setPageSize(Constants.PAGE_SIZE);
- if(!AppUtils.isBlank(search)){
- cq.like("name","%"+search+"%");
- cq.add();
- }
- IState state=new StateImpl();
- PageSupport ps= (PageSupport)getBiz().findAllRole(cq, state);
- request.setAttribute("search",search);
- request.setAttribute("curPageNO",new Integer(ps.getCurPageNO()));
- request.setAttribute("offset", new Integer(ps.getOffset()+1));
- request.setAttribute("list", ps.getResultList());
- if(!AppUtils.isBlank(ps.getResultList()))
- request.setAttribute("toolBar", ps.getToolBar());
- }catch (Exception e){
- return handleException(mapping, request, e, "RoleAction's findAllRole");
- }
- return mapping.findForward("view");
- }
采用QBC对单表的分页很简单,只需要改变参数,并且在action和jsp之间传递。如果要分页的内容涉及到几张表,可以将业务逻辑封装为一个视图,并且做好视图相应的实体类,便可以象操纵单表一样。
<!---->1、 <!---->另外可以使用HQL来实现分页,在dao中:
java 代码
- public PageSupport find(final HqlQuery hqlQuery,final boolean needParameter)
- {
- //logger.debug("find PageSupport ,HQL is: "+hqlQuery.getQueryString());
- return (PageSupport)getHibernateTemplate().execute(
- new HibernateCallback() {
- public Object doInHibernate(Session session) throws HibernateException, SQLException {
- Query query=session.createQuery(hqlQuery.getQueryString());
- if(needParameter)
- query.setParameters(hqlQuery.getParam(), hqlQuery.getTypes());
- int allCounts=query.list().size();
- int curPageNO = PagerUtil.getCurPageNO(hqlQuery.getCurPage());
- int offset = PagerUtil.getOffset(allCounts, curPageNO, hqlQuery.getPageSize());
- String toolBar = PagerUtil.getBar(hqlQuery.getMyaction(),allCounts,curPageNO,hqlQuery.getPageSize());
- query.setFirstResult(offset);
- query.setMaxResults(hqlQuery.getPageSize());
- return new PageSupport(query.list(),toolBar,offset,curPageNO);
- }
- }
- ,true);
- }
HqlQuery 代码如下:
java 代码
- public class HqlQuery implements Serializable{
- private String curPage=null ;
- private int pageSize=10;
- private String myaction;
- private String myform;
- private String queryString;
- private Object[] param;
- private Type[] types;
- public HqlQuery(String queryString, Object[] param) {
- this.queryString = queryString;
- this.param = param;
- }
- public HqlQuery(String myaction) {
- this.myaction = myaction;
- }
- public Object[] getParam() {
- return param;
- }
- public HqlQuery(String myaction, String queryString, Object[] param,Type[] types) {
- this.myaction = myaction;
- this.queryString = queryString;
- this.param = param;
- this.types=types;
- }
- public void setParam(Object[] param) {
- this.param = param;
- }
- public String getCurPage() {
- return curPage;
- }
- public void setCurPage(String curPage) {
- this.curPage = curPage;
- }
- public String getMyaction() {
- return myaction;
- }
- public void setMyaction(String myaction) {
- this.myaction = myaction;
- }
- public String getMyform() {
- return myform;
- }
- public void setMyform(String myform) {
- this.myform = myform;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public String getQueryString() {
- return queryString;
- }
- public void setQueryString(String queryString) {
- this.queryString = queryString;
- }
- public Type[] getTypes() {
- return types;
- }
- public void setTypes(Type[] types) {
- this.types = types;
- }
- }
如此的单元测试:
java 代码
- public final void testfindOtherFunctionByHql() {
- logger.debug("testfindFunctionByRole");
- long l1=System.currentTimeMillis();
- String queryString="from Function where id=?";
- HqlQuery hqlQuery=new HqlQuery("myaction");
- hqlQuery.setCurPage("1");
- //hqlQuery.setPageSize(10);
- PageSupport functions=BeanFactory.getInstance().getRightDelegate().findOtherFunctionByHql(hqlQuery,"1", state);
- long l2=System.currentTimeMillis();
- AppUtils.printCollection(functions.getResultList());
- List list=functions.getResultList();
- for(int i=0;i
- Function f=(Function)list.get(i);
- System.out.println("getId = "+f.getId());
- }
- System.out.println("一共用时为 : "+(l2-l1));
- }
总结:将分页的功能封装起来,每次请求构造参数不同的CriteriaQuery 和HqlQuery,后台的操作都是重复不变的,变得是查询的条件。如使用CriteriaQuery可以这样构造条件,Or或者and的条件可以用面向对象的方式来构造:
java 代码
- public final void findAllRole() {
- logger.debug("findAllRole");
- long l1=System.currentTimeMillis();
- String curPage = "2";
- String myaction="xxx.do?"; //Struts action的名字,看工具条的提示
- String myform="forms[0]"; //html 里面相应的form的名字
- CriteriaQuery cq=new CriteriaQuery(Role.class,curPage,myaction,myform); //Role.class为指定的类
- cq.setPageSize(2); //不填默认为10
- cq.setCurPage(curPage); //当前页,默认是第一页
- cq.addOrder("asc","id"); //根据id来排序,顺序是asc,或者是desc
- cq.like("name", "ROLE_SUPERVISOR"); //条件0是name='test',其余大于小于like调用相应的API
- cq.eq("enabled", "1");//1 //条件1
- cq.eq("roleType", "ROLE_SUPERVISOR");//条件2
- //cq.add(); //条件1&&条件2
- cq.add(cq.or(cq.and(cq, 0, 1), cq, 2));
- //cq.add(); //增加条件,如果没有条件之间的关系则可以直接add()不带参数。
- PageSupport ps=BeanFactory.getInstance().getRightDelegate().findAllRole(cq,state);
- long l2=System.currentTimeMillis();
- System.out.println("list size: "+ps.getResultList().size());
- System.out.println("一共用时为 : "+(l2-l1));
- for(int i=0;i
- Role role=(Role)ps.getResultList().get(i);
- System.out.println("id = "+ role.getId());
- //print your code here
- System.out.println("-----------------");
- }
- AppUtils.printCollection(ps.getResultList());
- System.out.println(ps.getToolBar());
- }
看cq.add(cq.or(cq.and(cq, 0, 1), cq, 2)),这句是为CriteriaQuery增加条件。意思是条件(0 and 1) or 2。以下是日志打出来的结果:<o:p></o:p>
java 代码
- DEBUG [14:50:53] (POJODelegate.java:execute:82) - POJODelegate executing
- INFO [14:50:53] (SequenceProcessor.java:doActivities:23) - SequenceProcessor 流程开始 <-- FindAllRoleProcessor
- INFO [14:50:53] (SequenceProcessor.java:doActivities:32) - 活动 : FindAllRole
- Hibernate: select count(*) as y0_ from t_role this_ where ((this_.name like ? and this_.enabled=?) or this_.role_type=?) order by this_.id asc
- //首先查出总的记录数
- Hibernate: select this_.id as id0_, this_.name as name3_0_, this_.role_type as role3_3_0_, this_.enabled as enabled3_0_, this_.note as note3_0_ from t_role this_ where ((this_.name like ? and this_.enabled=?) or this_.role_type=?) order by this_.id asc limit ?
- INFO [14:50:53] (SequenceProcessor.java:doActivities:69) - SequenceProcessor 流程结束 -->
- list size: 1
- 一共用时为 : 531
- id = 1
- -----------------
- 首页 上一页 下一页 尾页 共1条记录 转到"location='xxx.do?&curPageNO='+this.options[this.selectedIndex].value">1' selected>第1页
- pager.rar (9.3 KB)
- 下载次数: 765
评论
4 楼
ljm3256748
2008-05-04
onecan
你给的代码不全呀,能给个全的吗?
ljm3256748@163.com
你给的代码不全呀,能给个全的吗?
ljm3256748@163.com
3 楼
cqjc
2007-07-30
源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user.
打不开
打不开
2 楼
onecan
2007-07-27
源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user.
1 楼
zzb888
2007-07-26
能给个完整的包吗? 老大 谢谢了
我的地址
cwzb@dhc.com.cn
我的地址
cwzb@dhc.com.cn
发表评论
-
dao2
2014-09-24 09:47 0dao1212 -
resume-mr wang
2014-08-05 15:59 0f aaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... -
legendshop dao
2014-04-14 09:20 0legendshop dao -
ControlDataPopulate
2014-01-06 18:35 0package util; import java.io.B ... -
Excel2SqlConvertor
2014-01-06 18:34 0import java.io.File; import jav ... -
test
2013-01-07 23:26 0dfgdfg -
java多用户商城系统LegendShop开发指南
2012-09-08 18:33 16351LegendShop是基于JAVA编程语言开发的开源电子商 ... -
Java多用户商城LegendShop功能说明
2012-09-08 18:13 1775... -
用Spring Cache 实现Hibernate的二级缓存机制
2012-05-14 12:40 4435因为系统中同时采用Hibernate和Jdbc两种技术, ... -
答复: 大型Java多用户商城系统设计开发的心得和困难
2012-01-04 13:35 2168evanzzy 写道非要拿掉Hiber ... -
分享我的大型Java多用户商城系统开发的心得和困难
2012-01-03 15:37 16385看到别的朋友在ITEYE上发表的“开发电子商务网站技术选型“有 ... -
Java多用户商城,给你一个创业的平台
2011-06-05 11:08 8873现在网上开店的趋 势是越来越多了,一个好的商城系统是如虎添翼。 ... -
关于一个java网购平台的技术方案
2010-05-02 23:38 1754最近用Java做了一个网上购物平台,其技术方案终于写完了 ... -
关于产品动态属性的做法
2010-04-14 14:17 2765最近在做一个电子商务网站( http://www ... -
[Java][JavaScript]字符串数组与字符串之间的互转
2010-02-24 15:49 63281、Java 1-1、字符串数组=>字 ... -
Eclipse WTP 入门
2010-02-24 15:43 2206(转)WTP (Web Tools Platform) 是一个 ... -
JPA annotation 参考
2010-02-24 15:35 1264(转)Table Table用来定义entity主表的name ... -
JMS - javax.jms.IllegalStateException in JBOSS问题之解决
2007-07-07 17:38 4318在jms中的代码如下: java 代码 ... -
设计模式之Command
2007-06-24 12:16 1432原作:板桥里人 Command ... -
扩展hibernate的主键生成策略
2007-06-23 11:35 7790Hibernate的主键生成策略有好几种:1) assigne ...
相关推荐
struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692
7. **文件`struts+spring+hibernate通用分页方法.doc`**:这个文档可能包含了具体的实现步骤、代码示例和注意事项,详细阐述如何将Struts、Spring和Hibernate整合起来,构建一个通用的分页功能。读者可以参考文档中...
### Struts2 + Spring2 + Hibernate3 经典分页技术解析 #### 一、概述 在企业级应用开发中,分页显示是常见的需求之一。对于数据量较大的查询结果,采用分页的方式不仅能减轻服务器的压力,提高用户体验,还能更好...
总的来说,这个"Struts2+Spring2+Hibernate3注册查询搜索分页实例"是一个很好的学习资源,涵盖了Java Web开发中的基础和核心部分。通过学习这个实例,开发者不仅可以掌握三大框架的基本用法,还能了解到如何将它们...
2. **创建DAO**:实现分页查询的方法,使用Hibernate的Session或SessionFactory进行数据库操作。 3. **配置Service**:在Spring中声明Service,注入DAO,实现业务逻辑,包括计算总页数、获取当前页数据等。 4. **...
"使用Struts + Spring + Hibernate完成分页笔记"这个主题涵盖了三个关键的Java EE框架:Struts、Spring和Hibernate,它们分别负责表现层、业务逻辑层和数据访问层的管理。下面将详细介绍这三个框架在分页实现中的...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...
【新闻发布系统JAVA源码(struts+spring+hibernate)】是一个典型的Java Web应用程序,它利用了Struts、Spring和Hibernate三大开源框架的集成来构建高效、可维护的新闻发布平台。这个系统的主要目的是提供一个发布、...
同时,Struts2和Spring也可以配合提供分页支持,例如通过Action类中的方法返回分页信息,或者利用Spring的Pageable接口和Page对象。 在实际项目中,"sshext"的结构可能包含以下几个部分: 1. `WebRoot`:这是Web...
在 Struts+Spring+Hibernate 结构中实现分页,需要结合这三大框架的特点来设计和实现。 首先,Struts 在控制器层中处理用户的请求,比如用户点击分页链接时,Struts 框架会调用相应的Action类方法。在这个方法中,...
此压缩包含有两个工程,一个工程是struts2+spring2.5+hibernate3.3整合的服务器端技术(全注解)(云端),另一个工程是android的手机应用,包含对ssh整合的云端数据的访问,能够在android输入信息,将数据传递给...