1.查询对象
public class child{
public String name;
public String orderBy;
}
2.设置值
child ch = new Child();
ch.setOrderBy(" test");
ch.setName("123");
3.实际生成的sql
select * from child where name = "123" test
4.实现是用mybatils的拦截器,可看 PageHelper 的 SqlUtil类,实现代码如下(第20行代码处理orderBy关键字)
public static <T> Page<T> getPageFromObject(Object params) {
int pageNum;
int pageSize;
MetaObject paramsObject = null;
if (params == null) {
throw new NullPointerException("无法获取分页查询参数!");
}
if (hasRequest && requestClass.isAssignableFrom(params.getClass())) {
try {
paramsObject = SystemMetaObject.forObject(getParameterMap.invoke(params, new Object[]{}));
} catch (Exception e) {
//忽略
}
} else {
paramsObject = SystemMetaObject.forObject(params);
}
if (paramsObject == null) {
throw new NullPointerException("分页查询参数处理失败!");
}
Object orderBy = getParamValue(paramsObject, "orderBy", false);
boolean hasOrderBy = false;
if (orderBy != null && orderBy.toString().length() > 0) {
hasOrderBy = true;
}
try {
Object _pageNum = getParamValue(paramsObject, "pageNum", hasOrderBy ? false : true);
Object _pageSize = getParamValue(paramsObject, "pageSize", hasOrderBy ? false : true);
if (_pageNum == null || _pageSize == null) {
Page page = new Page();
page.setOrderBy(orderBy.toString());
page.setOrderByOnly(true);
return page;
}
pageNum = Integer.parseInt(String.valueOf(_pageNum));
pageSize = Integer.parseInt(String.valueOf(_pageSize));
} catch (NumberFormatException e) {
throw new IllegalArgumentException("分页参数不是合法的数字类型!");
}
Page page = new Page(pageNum, pageSize);
//count查询
Object _count = getParamValue(paramsObject, "count", false);
if (_count != null) {
page.setCount(Boolean.valueOf(String.valueOf(_count)));
}
//排序
if (hasOrderBy) {
page.setOrderBy(orderBy.toString());
}
//分页合理化
Object reasonable = getParamValue(paramsObject, "reasonable", false);
if (reasonable != null) {
page.setReasonable(Boolean.valueOf(String.valueOf(reasonable)));
}
//查询全部
Object pageSizeZero = getParamValue(paramsObject, "pageSizeZero", false);
if (pageSizeZero != null) {
page.setPageSizeZero(Boolean.valueOf(String.valueOf(pageSizeZero)));
}
return page;
}