在web开发时我们时常需要进行分页查询,其中就可以设计为两部分,一个是通用部分,也即各个查询对象可能都有的部分,进行抽取出来,作为一个基础查询的对象,同时针对不同的具体情况,有需要有合理的对不同情况设置查询关键字,这部分可以具体为不同的对象,这同时继承基础查询对象,这样就完成各种不同的查询对象的建立,比如如下:
一,抽象出来的共有查询特性
package com.xxx.param;
public class BaseParam {
private Long previousPage;
private Long nextPage;
private Long totalRecord;
private Long totalPage;
private Long offsetRecord;
//below is for easyui parameter
private Long rows; //pageSize
private Long page; //current page number
private String sort; //sort field name
private String order; //asc or desc
public BaseParam() {
this.previousPage = 1L;
this.nextPage = 1L;
this.totalRecord = 1L;
this.totalPage = 1L;
this.rows = 10L;
this.page = 1L;
this.sort = "";
this.order = "";
}
public Long getPreviousPage() {
previousPage = page - 1;
if(previousPage < 1){
previousPage = 1L;
}
return previousPage;
}
public void setPreviousPage(Long previousPage) {
this.previousPage = previousPage;
}
public Long getNextPage() {
if(nextPage > totalPage){
nextPage = totalPage;
}
return nextPage;
}
public void setNextPage(Long nextPage) {
this.nextPage = nextPage;
}
public Long getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(Long totalRecord) {
if(totalRecord < 0){
totalRecord = 0L;
}
this.totalRecord = totalRecord;
}
public Long getTotalPage() {
if(totalRecord != null && rows != null){
totalPage = (totalRecord % rows == 0) ? (totalRecord / rows) : (totalRecord / rows + 1);
}else{
totalPage = 1L;
}
return totalPage;
}
public void setTotalPage(Long totalPage) {
this.totalPage = totalPage;
}
public Long getRows() {
if(rows < 1){
rows = 1L;
}
return rows;
}
public void setRows(Long rows) {
this.rows = rows;
}
public Long getPage() {
if(page < 1){
page = 1L;
}
return page;
}
public void setPage(Long page) {
this.page = page;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
public Long getOffsetRecord() {
/*
//------------------------------------
// max method/max方式
if(page != null && rows != null){
if(page < 1){
page = 1L;
}
offsetRecord = (page - 1) * rows + 1;
}else{
offsetRecord = rows ;
}
//------------------------------------
*/
/*
//------------------------------------
//top method/top方法
if(page != null && rows != null){
if(page < 1){
page = 1L;
}
offsetRecord = page * rows ;
}else{
offsetRecord = rows;
}
//------------------------------------
*/
//------------------------------------
//row_number() over(order by xxx [asc|desc]) method,support ms sql2005+
//row_number() over(order by xxx)方法
if(page != null && rows != null){
if(page < 1){
page = 1L;
}
if(page > getTotalPage()){
page = getTotalPage();
}
offsetRecord = (page - 1) * rows ;
}else{
offsetRecord = 0L;
}
//------------------------------------
return offsetRecord;
}
public void setOffsetRecord(Long offsetRecord) {
this.offsetRecord = offsetRecord;
}
}
二,针对不同的具体情况,除了有自己的查询关键字,同时继承基本查询对象,比如国家相关信息的查询,除了有基础的查询外,还有国家相关的名称,ISO代码,域名等不同的信息查询,比如下面:
package com.xxx.param;
import com.xxx.model.CountryInfo;
public class CountryInfoParam extends BaseParam {
private CountryInfo country;
private Integer countryId;
private String countryIsoCode;
private String countryDomainName;
private String countryName;
private String showFlag;
public CountryInfoParam() {
super();
}
public CountryInfo getCountry() {
return country;
}
public void setCountry(CountryInfo country) {
this.country = country;
}
public Integer getCountryId() {
return countryId;
}
public void setCountryId(Integer countryId) {
this.countryId = countryId;
}
public String getCountryIsoCode() {
return countryIsoCode;
}
public void setCountryIsoCode(String countryIsoCode) {
this.countryIsoCode = countryIsoCode;
}
public String getCountryDomainName() {
return countryDomainName;
}
public void setCountryDomainName(String countryDomainName) {
this.countryDomainName = countryDomainName;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public String getShowFlag() {
return showFlag;
}
public void setShowFlag(String showFlag) {
this.showFlag = showFlag;
}
}
基础查询共性相同,针对不同 model 可以建立不同的 model 的查询 param 对象,基础基础查询,即可得到即灵活又有共性的 各种查询对象,在实际应用中,非常方便....
欢迎拍砖讨论... 懒人计划...