`
q_wong
  • 浏览: 108498 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一個有點噁心的查詢+分頁

阅读更多
@Entity
public class Employee extends XXXObject {

//...

/**
	 * 最近復職日期
	 */
	private Date lastReinstatementDate;

/**
	 * 核薪資料者
	 */
	private Set<BaseCheckSalary> baseCheckSalary = new HashSet<BaseCheckSalary>();

@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY)
	@Cascade(value = { org.hibernate.annotations.CascadeType.ALL,
			org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
	public Set<BaseCheckSalary> getBaseCheckSalary() {
		return baseCheckSalary;
	}

	public void setBaseCheckSalary(Set<BaseCheckSalary> baseCheckSalary) {
		this.baseCheckSalary = baseCheckSalary;
	}

//...

}

 

@Entity
public class BaseCheckSalary extends XXXObject {

//...

private Employee employee;
	private Date startDate;

	@ManyToOne(fetch = FetchType.LAZY)
	public Employee getEmployee() {
		return employee;
	}

	public void setEmployee(Employee employee) {
		this.employee = employee;
	}

//...

}

  

@Name("baseCheckSalaryQuery")
@Scope(ScopeType.CONVERSATION)
public class BaseCheckSalaryQuery extends EntityQuery<Employee> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//未核薪員工查詢語句
	private static final String UNCHECKED_EMPLOYEE = "select e from Employee e where e not in " +
			"(select b.employee from BaseCheckSalary b) or " +
			"(e.lastReinstatementDate is not null and e.lastReinstatementDate > " +
			"(select max(b.startDate) from BaseCheckSalary b where b.employee = e ))";
	
	//已核薪員工查詢語句
	private static final String CHECKED_EMPLOYEE = "select e from Employee e where e not in " +
			"(select emp from Employee emp where emp not in (select b.employee from BaseCheckSalary b) or " +
			"(e.lastReinstatementDate is not null and emp.lastReinstatementDate > " +
			"(select max(b.startDate) from BaseCheckSalary b where b.employee = emp )))";
	
	//所有員工查詢語句
	private static final String ALL_EMPLOYEE = "from Employee e";
	
	public BaseCheckSalaryQuery() {
		super.setEjbql(UNCHECKED_EMPLOYEE);
		super.setOrder("e.employeeNumber");
		super.setMaxResults(20);
	}
	
	/**
	 * 查詢所有員工
	 * 
	 * @return
	 */
	public List<Employee> queryAllEmployee() {
		super.setEjbql(ALL_EMPLOYEE);
		return super.getResultList();
	}
	
	/**
	 * 查詢已核薪員工
	 * 
	 * @return
	 */
	public List<Employee> queryCheckedEmployee() {
		super.setEjbql(CHECKED_EMPLOYEE);
		return super.getResultList();
	}
	
	/**
	 * 查詢未核薪員工
	 * 
	 * @return
	 */
	public List<Employee> queryUnCheckedEmployee() {
		super.setEjbql(UNCHECKED_EMPLOYEE);
		return super.getResultList();
	}

}

 

@Name("baseCheckSalaryHome")
@Scope(ScopeType.CONVERSATION)
public class BaseCheckSalaryAction {

//...
	
	private static final Integer MAXRESULTS = 15;// 分頁查詢每頁顯示行數

@RequestParameter
	private Integer firstResult = 0;// 分頁查詢開始頁
	
	@In(required = false, create = true)
	@Out(required = false, scope = ScopeType.CONVERSATION)
	private ControlBean controlBean;// 注入控制類

	/**
	 * 根據核薪狀態查詢符合條件的員工列表
	 */
	@Factory("employeeList")
	public void getEmployeeList() {
		baseCheckSalaryQuery.setFirstResult(firstResult);
		baseCheckSalaryQuery.setMaxResults(MAXRESULTS);
		if (queryStatus.equals("false")) {
			employeeList = baseCheckSalaryQuery.queryUnCheckedEmployee();
		} else if (queryStatus.equals("true")) {
			employeeList = baseCheckSalaryQuery.queryCheckedEmployee();
		} else {
			employeeList = baseCheckSalaryQuery.queryAllEmployee();
		}
		controlBean.setPreviousExists(baseCheckSalaryQuery.isPreviousExists());
		controlBean.setNextExists(baseCheckSalaryQuery.isNextExists());
	}

//...

}

 

<rich:dataTable
					id="empList" value="#{employeeList}" var="bcsl" width="90%"
					onRowMouseOver="this.style.backgroundColor='#666666'"
					onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
					<a4j:support event="onRowClick"
						action="#{baseCheckSalaryHome.getBaseCheckSalaryDetail}"
						reRender="empInfo,rsb,otherItemtable">
					</a4j:support>
					<h:column>
						<f:facet name="header">
							<h:outputText value="員工工號" />
						</f:facet>
						<h:outputText value="#{bcsl.employeeNumber}" />
					</h:column>
					<h:column>
						<f:facet name="header">
							<h:outputText value="員工姓名" />
						</f:facet>
						<h:outputText value="#{bcsl.name}" />
					</h:column>
					<h:column>
						<f:facet name="header">
							<h:outputText value="核薪樣板" />
						</f:facet>
						<h:outputText
							value="#{baseCheckSalaryHome.getSalaryModelName(bcsl)}" />
					</h:column>
                    <f:facet name="footer">
									<h:panelGrid columns="4" >
							<f:subview id="s_firstPage_y"
								rendered="#{controlBean.previousExists}">
								<a4j:commandLink action="#{baseCheckSalaryHome.getEmployeeList}"
									value="&lt;&lt;第一頁" rendered="#{controlBean.previousExists}"
									reRender="empList">
									<f:param name="firstResult" value="0" />
								</a4j:commandLink>
							</f:subview>
							<f:subview id="s_firstPage_n"
								rendered="#{!controlBean.previousExists}">
								<h:outputText value="&lt;&lt;第一頁" />
							</f:subview>
							
							<f:subview id="s_previousPage_y"
								rendered="#{controlBean.previousExists}">
								<a4j:commandLink action="#{baseCheckSalaryHome.getEmployeeList}"
									value="&lt; 上一頁" rendered="#{controlBean.previousExists}"
									reRender="empList">
									<f:param name="firstResult"
										value="#{baseCheckSalaryQuery.previousFirstResult}" />
								</a4j:commandLink>
							</f:subview>
							<f:subview id="s_previousPage_n"
								rendered="#{!controlBean.previousExists}">
								<h:outputText value="&lt; 上一頁" />
							</f:subview>


							<f:subview id="s_nextPage_y" rendered="#{controlBean.nextExists}">
								<a4j:commandLink action="#{baseCheckSalaryHome.getEmployeeList}"
									value="下一頁&gt;" rendered="#{controlBean.nextExists}"
									reRender="empList">
									<f:param name="firstResult"
										value="#{baseCheckSalaryQuery.nextFirstResult}" />
								</a4j:commandLink>
							</f:subview>
							<f:subview id="s_nextPage_n"
								rendered="#{!controlBean.nextExists}">
								<h:outputText value="下一頁&gt;" />
							</f:subview>
							
							<f:subview id="s_lastPage_y" rendered="#{controlBean.nextExists}">
								<a4j:commandLink action="#{baseCheckSalaryHome.getEmployeeList}"
									value="最后頁&gt;&gt;" rendered="#{controlBean.nextExists}"
									reRender="empList">
									<f:param name="firstResult"
										value="#{baseCheckSalaryQuery.lastFirstResult}" />
								</a4j:commandLink>
							</f:subview>
							<f:subview id="s_lastPage_n"
								rendered="#{!controlBean.nextExists}">
								<h:outputText value="最后頁&gt;&gt;" />
							</f:subview>
						</h:panelGrid>	
					</f:facet>
				</rich:dataTable>

 

分享到:
评论

相关推荐

    JavaWeb+JSP+Servlet+JDBC分页查询和查询后分页

    项目主体结构是dao+db+filter+pojo+servlet, 使用技术Servlet转发,代码中有注释帮助学者理解,数据库为MySQL资源...实现的数据库内容分页,查询分页,对初学者难点是根据get请求的中的url地址进行查询后的分页效果。

    模糊查询+分页

    可以很好的实现页面的模糊查询+分页,我们在前台实现简单的增删改查,很好的实现页面功能。

    springmvc+mybatis+分页查询

    在本项目中,我们主要探讨的是如何利用Spring MVC和MyBatis两大流行框架构建一个具有分页查询功能的Web应用。Spring MVC作为控制层,负责处理HTTP请求和响应,而MyBatis则作为数据访问层,用于处理数据库交互。下面...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    web高级查询+分页

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织应用程序结构和控制流程的方式。在高级查询的实现中,Struts2主要负责处理HTTP请求,将用户的查询参数从视图层(通常是HTML...

    JavaWeb+JSP+Servlet+JDBC分页查询和查询后分页界面优化最终版

    在JavaWeb开发中,"JavaWeb+JSP+Servlet+JDBC分页查询和查询后分页界面优化"是一个常见的需求,特别是在构建大型的、数据密集型的学生管理系统中。这个主题涵盖了许多关键知识点,让我们逐一深入探讨。 首先,...

    Jsp+Servlet+MyBatis完成分页查询

    在本文中,我们将深入探讨如何使用JSP、Servlet和MyBatis这三种技术来实现一个分页查询的功能。这是一个常见的需求,在许多Web应用程序中,为了提高用户体验,通常需要将大量数据分批次展示,而不是一次性加载所有...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH+模糊查询+分页+增删改查

    在"SSH+模糊查询+分页+增删改查"这个主题中,我们将深入探讨这些关键概念以及它们在实际应用中的结合。 首先,让我们来了解SSH框架的核心组件: 1. **Struts2**:这是一个基于MVC设计模式的开源框架,用于构建动态...

    Ajax+模糊查询+分页

    本文将深入探讨如何利用Ajax实现无刷新分页和模糊查询功能。 一、Ajax基础 Ajax的核心是JavaScript对象XMLHttpRequest,它允许JavaScript在后台与服务器进行通信。通过创建XMLHttpRequest实例,发送HTTP请求,并...

    EL+JSTL+分页

    实现分页通常涉及以下几个步骤: 1. **计算总页数**:根据数据库中的记录总数和每页显示的记录数,计算出总页数。 2. **获取当前页数据**:通过SQL查询语句,结合当前页码和每页记录数,获取当前页的数据。 3. **...

    基于spring+hibernate的组合查询+分页组件

    以下是一个简单的示例,展示如何在Spring和Hibernate中实现组合查询和分页: ```java @Service public class UserService { @Autowired private SessionFactory sessionFactory; public Page&lt;User&gt; ...

    基于存储过程+分页控件+分页类的无敌分页模式

    "基于存储过程+分页控件+分页类的无敌分页模式"是一个高效的数据查询和展示策略,它结合了数据库优化、前端界面控制以及后端数据处理的最佳实践。下面将详细解析这一模式的关键知识点。 首先,**存储过程(Stored ...

    SSM+分页展示查询项目

    这个项目以"SSM+分页展示查询项目"为标题,旨在通过集成这三个框架,实现一个能够进行分页查询的功能。在这个项目中,开发者运用了PageHelper插件来帮助处理数据库的分页查询,提高了代码的可维护性和效率。 1. **...

    完整thinkPHP增删改查+分页+模糊查询+Ajax登录+注册

    这个“完整thinkPHP增删改查+分页+模糊查询+Ajax登录+注册”项目涵盖了几个核心的Web开发知识点,下面将逐一详细解释。 1. **增删改查(CRUD)**:CRUD代表创建(Create)、读取(Read)、更新(Update)和删除...

    php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页

    php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax分页php+ajax...

Global site tag (gtag.js) - Google Analytics