提交 cdd1c0f5 编写于 作者: Z zhuangqian

优化分页封装方法,可自定义分页sql和countsql

上级 681a26ea
......@@ -51,6 +51,11 @@ public class AopContext {
*/
private String sql;
/**
* 从前端grid传过来的参数
*/
private String sqlEx;
/**
* 追加SQL条件(程序自动生成)
*/
......@@ -60,6 +65,16 @@ public class AopContext {
* 自定义SQL覆盖默认查询条件
*/
private String where;
/**
* 自定义列表的sql
*/
private String sqlStatement;
/**
* 自定义分页数的sql
*/
private String sqlCount;
/**
* 自定义SQL参数(map形式)
......@@ -113,7 +128,7 @@ public class AopContext {
public void setView(ModelAndView view) {
this.view = view;
}
public Object getId() {
return id;
}
......@@ -138,6 +153,14 @@ public class AopContext {
this.sql = sql;
}
public String getSqlEx() {
return sqlEx;
}
public void setSqlEx(String sqlEx) {
this.sqlEx = sqlEx;
}
public String getCondition() {
return condition;
}
......@@ -154,6 +177,22 @@ public class AopContext {
this.where = where;
}
public String getSqlStatement() {
return sqlStatement;
}
public void setSqlStatement(String sqlStatement) {
this.sqlStatement = sqlStatement;
}
public String getSqlCount() {
return sqlCount;
}
public void setSqlCount(String sqlCount) {
this.sqlCount = sqlCount;
}
public Map<String, Object> getParam() {
return param;
}
......@@ -170,4 +209,5 @@ public class AopContext {
this.tips = tips;
}
}
......@@ -361,6 +361,35 @@ public class Db {
return getDbManager().paginate(sqlTemplate, clazz, paras, pageNum, pageSize);
}
/**
* 分页
* @param sqlTemplate sql语句
* @param sqlCount count语句
* @param clazz 返回类型
* @param paras 参数
* @param pageNum 页号
* @param pageSize 数量
* @return
*/
@SuppressWarnings("rawtypes")
public static BladePage<Map> paginate(String sqlTemplate, String sqlCount, Object paras, int pageNum, int pageSize){
return getDbManager().paginate(sqlTemplate, sqlCount, paras, pageNum, pageSize);
}
/**
* 分页
* @param sqlTemplate sql语句
* @param sqlCount count语句
* @param clazz 返回类型
* @param paras 参数
* @param pageNum 页号
* @param pageSize 数量
* @return
*/
public static <T> BladePage<T> paginate(String sqlTemplate, String sqlCount, Class<T> clazz, Object paras, int pageNum, int pageSize){
return getDbManager().paginate(sqlTemplate, sqlCount, clazz, paras, pageNum, pageSize);
}
/**
* 是否存在
*
......
......@@ -524,8 +524,36 @@ public class DbManager {
* @return
*/
public <T> BladePage<T> paginate(String sqlTemplate, Class<T> clazz, Object paras, int pageNum, int pageSize){
return paginate(sqlTemplate, "", clazz, paras, pageNum, pageSize);
}
/**
* 分页
* @param sqlTemplate sql语句
* @param sqlCount count语句
* @param clazz 返回类型
* @param paras 参数
* @param pageNum 页号
* @param pageSize 数量
* @return
*/
public <T> BladePage<Map> paginate(String sqlTemplate, String sqlCount, Object paras, int pageNum, int pageSize){
return paginate(sqlTemplate, sqlCount, Map.class, paras, pageNum, pageSize);
}
/**
* 分页
* @param sqlTemplate sql语句
* @param sqlCount count语句
* @param clazz 返回类型
* @param paras 参数
* @param pageNum 页号
* @param pageSize 数量
* @return
*/
public <T> BladePage<T> paginate(String sqlTemplate, String sqlCount, Class<T> clazz, Object paras, int pageNum, int pageSize){
List<T> rows = getList(sqlTemplate, clazz, paras, pageNum, pageSize);
long count = queryInt("SELECT COUNT(*) CNT FROM (" + sqlTemplate + ") a", paras).longValue();
long count = queryInt((StrKit.isBlank(sqlCount) ? "SELECT COUNT(*) CNT FROM (" + sqlTemplate + ") a" : sqlCount), paras).longValue();
BladePage<T> page = new BladePage<>(rows, pageNum, pageSize, count);
return page;
}
......
......@@ -72,29 +72,35 @@ public abstract class BaseGridFactory implements IGrid{
}
private Object paginateBySql(String dbName, Integer page, Integer rows, String sqlTemplate, String para, String sort, String order, IQuery intercept, BladeController ctrl) {
String statement = "select * from (" + sqlTemplate + ") blade_statement";
String sqlex = SqlKeyword.getWhere(para);
Map<String, Object> map = getSqlMap(para, sort, order);
String statement = "select * from (" + sqlTemplate + ") blade_statement";
String orderBy = (Func.isEmpty(map.get(Const.ORDER_BY_STR))) ? " " : (" order by " + Func.toStr(map.get(Const.ORDER_BY_STR)));
String sqlCount = "";
// 查询前拦截
AopContext ac = null;
if (null != intercept) {
ac = new AopContext(ctrl);
ac.setSql(statement + sqlex);
ac.setSql(sqlTemplate);
ac.setSqlEx(sqlex);
ac.setCondition("");
ac.setSqlStatement("");
ac.setSqlCount("");
ac.setParam(map);
intercept.queryBefore(ac);
statement = statement + (StrKit.isBlank(ac.getWhere()) ? (sqlex + ac.getCondition()) : ac.getWhere());
sqlCount = ac.getSqlCount();
statement = (StrKit.isBlank(ac.getSqlStatement()) ? (statement + (StrKit.isBlank(ac.getWhere()) ? (sqlex + ac.getCondition()) : ac.getWhere()) + orderBy) : ac.getSqlStatement());
} else {
statement = statement + sqlex;
statement = statement + sqlex + orderBy;
}
Object list = null;
String orderBy = (Func.isEmpty(map.get(Const.ORDER_BY_STR))) ? " " : (" order by " + Func.toStr(map.get(Const.ORDER_BY_STR)));
if(StrKit.notBlank(dbName)){
list = Db.init(dbName).paginate(statement + orderBy, Map.class, map, page, rows);
list = Db.init(dbName).paginate(statement, sqlCount, map, page, rows);
} else {
list = Db.paginate(statement + orderBy, Map.class, map, page, rows);
list = Db.paginate(statement, sqlCount, map, page, rows);
}
// 查询后拦截
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册