`
chengyu2099
  • 浏览: 469068 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SQL 组合查询 分页(hibernate+webwork+spring)

阅读更多
hibernate 支持分页,由于组合查询在DAO层分页,业务逻辑比较混乱
这里用SQ在业务层分页处理

1.Action 层
获取Web端的参数,这里用webwork机制获取
/**
	 * 查询问题列表
	 */
	public String queryQuestion()
	{
		System.out.println("********************查询问题列表 queryQuestion.action************************");
//		String expertName = ServletActionContext.getRequest().getParameter("expertName");
//		String sortId = ServletActionContext.getRequest().getParameter("questionSort");
		String expertName = expertQuery.getQuestionExpert();
		String sortId = expertQuery.getQuestionSort();
		System.out.println("expertName = "+expertName +" --- sortId = "+sortId);
		
		List<ExpertQuestion> queryQuestionCount = new ArrayList<ExpertQuestion>();
		List<ExpertQuestion> queryQuestion = new ArrayList<ExpertQuestion>();
		try {
			queryQuestionCount = mavinService.queryQuestionCount(expertName,sortId);
			/**
			 * ***** 分页 ***** 
			 */
			PageMavin page = new PageMavin();
			page.setCurPageTwo(pagesTwo);
			page.setPageSizeTwo(pageSizeTwo);
			page.setTotalRowTwo(queryQuestionCount.size());
			Mypagebar=page.getToolsMenuTwo();
			queryQuestion = mavinService.queryQuestionPage(expertName,sortId,page.getCurPageTwo(),page.getPageSizeTwo());
			ServletActionContext.getRequest().setAttribute("QUERY_QUESTION",queryQuestion);
		} catch (BOException e) {
			e.printStackTrace();
		}
		
		return SUCCESS;
	}


2.业务层 处理SQL
/**
	 * 组合查询 问题列表
	 * 组建 SQL
	 */
	public List<ExpertQuestion> queryQuestionCount(String expertName,String sortId)throws BOException;
	public List<ExpertQuestion> queryQuestionPage(String expertName,String sortId,int currPage,int pageSize)throws BOException;

public List<ExpertQuestion> queryQuestionPage(String expertName,String sortId,int currPage,int pageSize)throws BOException
	{
		System.out.println("currPage = "+currPage+" - pageSize = "+pageSize);
		List<ExpertQuestion> queryQuestion = new ArrayList<ExpertQuestion>();
		String SQL = "";
		//所有专家 AND 所有分类
		if(expertName.equals("allExpert") && sortId.equals("allSort"))
		{
			System.out.println("所有专家 AND 所有分类");
			SQL = " select q.question_id,q.question_title,q.question_infor,q.question_sort,q.question_expert,q.question_state,q.question_author,q.question_time,q.question_access,q.question_breviary,q.question_delete from expert_question q where q.question_delete='1' and question_Access='0'";
		}
//		根据专家名 AND 分类ID 查询
		if(!expertName.equals("allExpert") && !sortId.equals("allSort"))
		{
			System.out.println("根据专家名 AND 分类ID 查询");
			SQL = " select q.question_id,q.question_title,q.question_infor,q.question_sort,q.question_expert,q.question_state,q.question_author,q.question_time,q.question_access,q.question_breviary,q.question_delete from expert_question q where q.question_delete='1' and question_Access='0' and q.question_expert = '"+expertName+"'"+" and q.question_sort ='"+sortId+"'";
		}
//		所有专家 + 具体分类
		if(expertName.equals("allExpert") && !sortId.equals("allSort"))
		{
			System.out.println("所有专家 + 具体分类");
			SQL = " select q.question_id,q.question_title,q.question_infor,q.question_sort,q.question_expert,q.question_state,q.question_author,q.question_time,q.question_access,q.question_breviary,q.question_delete from expert_question q where q.question_delete='1' and question_Access='0' and q.question_sort ='"+sortId+"'";
		}
//		具体专家 + 所有分类
		if(!expertName.equals("allExpert") && sortId.equals("allSort"))
		{
			System.out.println("具体专家 + 所有分类");
			SQL = " select q.question_id,q.question_title,q.question_infor,q.question_sort,q.question_expert,q.question_state,q.question_author,q.question_time,q.question_access,q.question_breviary,q.question_delete from expert_question q where q.question_delete='1' and question_Access='0' and q.question_expert = '"+expertName+"'";
		}
		SQL = "select * from ( select t1.*,rownum rownum_ from("+SQL+" ) t1 where rownum <= "+ currPage * pageSize +" ) where rownum_ > "+  ((currPage-1) * pageSize);
		System.out.println("SQL PAGE = "+ SQL );
		try {
			queryQuestion = mavinDAO.queryQuestion(SQL);
		} catch (DAOException e) {
			e.printStackTrace();
		}
		return queryQuestion;
	}


3.DAOImpl
/**
	 * 获取问题列表 expertName 、sortId 
	 * 组合查询 SQL 
	 * 可参照 查询专家列表 41行
	 * public List<TbExpert> searchMavinCount ... 写
	 * 但是 解耦性 不强、业务层和DAOImpl 换乱、可维护性降低
	 * 用 SQL 业务层 控制参数 DAOImpl不变 解耦性增强 
	 */
	@SuppressWarnings("unchecked")
	public List<ExpertQuestion> queryQuestion(final String SQL) throws DAOException
	{
		List<ExpertQuestion> queryQuestion = this.getMyHibernateTemplate().executeFind(new HibernateCallback()
		{
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query q = session.createSQLQuery(SQL).addEntity(ExpertQuestion.class);
				return q.list();
			}
		});
		System.out.println("-query question-"+queryQuestion.size());
		return queryQuestion;
	}


4.分页源码 【直接用这个类就可以了,我的分页是继承了重写,里面有其他需求,一般用这个就哦了】
package com.linkage.util.page;

/**
 * @{#} PageUtilsTabOne.java Create on 2009-9-30 上午09:27:09    
 *    
 * Copyright (c) 2009 by linkaged. 
 *     
 * @author wenge
 *
 * @version 1.0  
 * 
 * @Desc: 前台选项卡一分页BEAN
 */

public class PageUtilsTabTwo {
	 protected int curPageTwo = 0; //当前页
	 protected int pageSizeTwo = 0; //每页多少行
	 protected int endSizeTwo ; //用于not in(select top endSize id)不在多少行内
	 protected int totalRowTwo ; //共多少行
	 protected int totalPageTwo ; //共多少页
	 
	 public int getStartTwo(){
		 if(curPageTwo>1)
	     	  return (curPageTwo-1)*pageSizeTwo;
		 else
			  return 0;
	 }
	 

	 public int getEndTwo(){
		 return pageSizeTwo;
	 }
	 public int getCurPageTwo() {
		 return curPageTwo;
	 }
	 public void setCurPageTwo(int curPageTwo) {
	  
	  int tempTwo = pageSizeTwo * (curPageTwo-1);
	  this.setEndSizeTwo(tempTwo);
	  this.curPageTwo = curPageTwo;
	 }
	 public int getEndSizeTwo() {
	  return endSizeTwo;
	 }
	 public void setEndSizeTwo(int endSizeTwo) {
	  this.endSizeTwo = endSizeTwo;
	 }
	 public int getPageSizeTwo() {
	  return pageSizeTwo;
	 }
	 public void setPageSizeTwo(int pageSizeTwo) {
	  this.pageSizeTwo = pageSizeTwo;
	 }
	 public int getTotalRowTwo() {
	  return totalRowTwo;
	 }
	 public void setTotalRowTwo(int totalRowTwo) {
	  
	  totalPageTwo = totalRowTwo/pageSizeTwo;
	  if(totalRowTwo%pageSizeTwo > 0)
	   totalPageTwo = totalPageTwo + 1;
	  
	  this.totalRowTwo = totalRowTwo;
	 }
	 public int getTotalPageTwo(){
	  
	  return this.totalPageTwo;
	 }
	 
	 public String getToolsMenuTwo() {
	        StringBuffer strTwo = new StringBuffer("");
	        int nextTwo, prevTwo;
	        prevTwo = curPageTwo - 1;
	        nextTwo = curPageTwo + 1;

	        if (curPageTwo > 1) {
	            strTwo.append(
	                "<a href=\"#\" onclick=\"document.forms(0).pagesTwo.value=1;document.forms(0).submit();\">首页</a>&nbsp;");
	        } else {
	            strTwo.append("<a href=\"#\">首页</a>&nbsp;");
	        }
	        if (curPageTwo > 1) {
	            strTwo.append(
	                "<a href=\"#\" onclick='document.forms(0).pagesTwo.value=" +prevTwo + ";document.forms(0).submit();'>上页</a>&nbsp;");
	        } else {
	            strTwo.append("<a href=\"#\">上页</a>&nbsp;");
	        }
	        if (curPageTwo < totalPageTwo) {
	            strTwo.append(
	                "<a href=\"#\" onclick='document.forms(0).pagesTwo.value=" +nextTwo + ";document.forms(0).submit();'>下页</a>&nbsp;");
	        } else {
	            strTwo.append("<a href=\"#\" >下页</a>&nbsp;");
	        }
	        if (totalPageTwo > 1 && curPageTwo != totalPageTwo) {
	            strTwo.append(
	                "<a href=\"#\"  onclick='document.forms(0).pagesTwo.value=" +totalPageTwo + ";document.forms(0).submit();'>尾页</a>&nbsp;&nbsp;");
	        } else {
	            strTwo.append("<a href=\"#\" >尾页</a>&nbsp;&nbsp;");
	        }
	        strTwo.append(" 共 <font color=\"red\" >" + totalRowTwo + "</font> 条记录/当前第"+curPageTwo+"页");
	        
	        strTwo.append("   转到");
	        strTwo.append("<SELECT style='width: 50px;' size=1 name=PagelistTwo onchange='this.form.pagesTwo.value=this.value;this.form.submit();'>");
	        for (int i = 1; i < totalPageTwo + 1; i++) {
	            if (i == curPageTwo) {
	                strTwo.append("<OPTION value=" + i + " selected>" + i +
	                           "</OPTION>");
	            } else {
	                strTwo.append("<OPTION value=" + i + ">" + i + "</OPTION>");
	            }
	        }
	        strTwo.append("</SELECT>页");
	        strTwo.append("<INPUT type=hidden  value=" + curPageTwo + " name=\"pagesTwo\" > ");
	        strTwo.append("<INPUT type=hidden  value=" + pageSizeTwo+" name=\"pageSizeTwo\"> ");
	        System.out.println(strTwo);
	        return strTwo.toString();
	    }

}


 <!--  分页  -->
	<table>
	   <tr>
	    <td></td>
	    <td height="25">&nbsp;</td>
	    <td height="25">
	   		<div align="center" class="text_title03">
	   			<ww:property value="Mypagebar" escape="false"/>
	   		</div></td>
	    <td height="25">&nbsp;</td>
	   </tr>
	</table>
分享到:
评论

相关推荐

    EXT+Spring+Hibernate+WebWork项目

    【EXT+Spring+Hibernate+WebWork项目】是一个综合性的企业级应用开发实例,它整合了四个关键的技术框架:EXT、Spring、Hibernate和WebWork。这些技术的组合为构建高效、可扩展且用户友好的Web应用程序提供了强大的...

    webwork2.2.7+spring+hibernate分页查询

    ### WebWork 2.2.7 + Spring + Hibernate 分页查询技术详解 #### 一、项目背景及架构 本项目采用WebWork 2.2.7框架结合Spring和Hibernate技术实现了一个基本的用户数据分页查询功能。主要目标是根据用户输入的...

    Spring+Hibernate完整分页

    在IT行业中,Spring和...总的来说,Spring和Hibernate的组合为Java Web开发提供了一种强大的解决方案。通过合理配置和编程,我们可以轻松实现分页功能,无论是在Sturts还是Webwork,或者其他Web框架中,都能灵活应用。

    论坛系统(Struts 2+Hibernate+Spring实现)

    通过Hibernate,开发者可以将Java对象直接保存到关系数据库,无需编写大量的SQL语句。它支持实体类、映射文件(XML或注解)、会话工厂和查询语言(HQL和Criteria API),提供了事务管理和缓存机制,大大提高了开发...

    SSH增删改查、分页、验证

    SSH是Java Web开发中的一个流行框架组合,由Spring、Struts2和Hibernate三个开源项目组成。这个框架集合提供了全面的企业级应用解决方案,包括模型-视图-控制器(MVC)架构、持久层管理和业务逻辑处理。 Spring是...

    Hibernate课程大纲

    - **分页查询**: - 设置起始索引:`setFirstResult(index)`。 - 设置每页记录数:`setMaxResults(count)`。 #### 七、基本映射标签和属性 - **实体类映射文件**:`.hbm.xml`文件中的常用标签。 - `&lt;class&gt;`:...

    图书管理系统J2EE设计报告书

    【图书管理系统J2EE设计报告书】主要涵盖了使用J2EE技术进行图书管理系统的开发,涉及到的主要技术有Struts、Spring和Hibernate这三个流行的Java企业级框架。这些框架的整合使用,能够有效地提升软件开发的效率和...

    基于SSH新闻发布系统-毕业设计

    【基于SSH新闻发布系统-毕业设计】是一个以Spring、Struts2和Hibernate(SSH)三大开源框架为基础构建的简单新闻发布系统。SSH框架组合是Java Web开发中的常见选择,它提供了模型-视图-控制器(MVC)的设计模式,...

    java必备知识点大全.pdf

    Oracle分页:Oracle提供了ROWNUM和ROWID进行分页查询。 Oracle的基本数据类型:包括 NUMBER、DATE、VARCHAR2等。 id、rowid、rownum的区别:id通常是主键字段的名称,rowid是Oracle数据库中每行数据的唯一标识,...

    很符合应届毕业生的简历模板

    - **项目一**:通用物流项目,使用Struts+Spring+Hibernate框架,负责公司信息维护模块的设计、编码和测试。 - **项目二**:员工信息录入系统,使用Struts框架,实现了信息录入、修改、验证等功能,进行了分页等开源...

    J-HI 手册 how to手册

    HQL(Hibernate Query Language)是一种面向对象的查询语言,主要用于Hibernate框架中执行数据库操作。在J-HI平台中,所有自定义的HQL语句都应当写在`XXXDAOHibernate`类中。 - **步骤一**: 在`XXXDAOHibernate`类...

    J2SE讲解文档

    框架如Struts、WebWork、JSF、Tapestry和Spring可以帮助开发者构建MVC架构的应用。ORMapping框架如Hibernate简化了对象与数据库之间的映射。 学习Java SE,需要掌握基础的面向对象编程,熟悉类集框架,理解IO操作,...

    struts2 框架 BBS系统 源代码

    它整合了WebWork的优秀特性,提供了丰富的拦截器、结果类型和插件体系,使得开发者可以更方便地处理请求、响应以及业务逻辑。 2. **模型(Model)**:在BBS系统中,模型通常包括业务实体类(如用户、帖子、论坛等)...

Global site tag (gtag.js) - Google Analytics