From cdd1c0f56a636739870dcb27a2630f6ad9470599 Mon Sep 17 00:00:00 2001 From: zhuangqian Date: Tue, 13 Dec 2016 12:35:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=86=E9=A1=B5=E5=B0=81?= =?UTF-8?q?=E8=A3=85=E6=96=B9=E6=B3=95,=E5=8F=AF=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=88=86=E9=A1=B5sql=E5=92=8Ccountsql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/smallchill/core/aop/AopContext.java | 42 ++++++++++++++++++- .../com/smallchill/core/plugins/dao/Db.java | 29 +++++++++++++ .../core/plugins/dao/DbManager.java | 30 ++++++++++++- .../core/toolbox/grid/BaseGridFactory.java | 20 +++++---- 4 files changed, 112 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/smallchill/core/aop/AopContext.java b/src/main/java/com/smallchill/core/aop/AopContext.java index 7872fa33..a6dc6621 100644 --- a/src/main/java/com/smallchill/core/aop/AopContext.java +++ b/src/main/java/com/smallchill/core/aop/AopContext.java @@ -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 getParam() { return param; } @@ -170,4 +209,5 @@ public class AopContext { this.tips = tips; } + } diff --git a/src/main/java/com/smallchill/core/plugins/dao/Db.java b/src/main/java/com/smallchill/core/plugins/dao/Db.java index 836ebf41..21a60372 100644 --- a/src/main/java/com/smallchill/core/plugins/dao/Db.java +++ b/src/main/java/com/smallchill/core/plugins/dao/Db.java @@ -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 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 BladePage paginate(String sqlTemplate, String sqlCount, Class clazz, Object paras, int pageNum, int pageSize){ + return getDbManager().paginate(sqlTemplate, sqlCount, clazz, paras, pageNum, pageSize); + } + /** * 是否存在 * diff --git a/src/main/java/com/smallchill/core/plugins/dao/DbManager.java b/src/main/java/com/smallchill/core/plugins/dao/DbManager.java index 47e6c75f..35237dae 100644 --- a/src/main/java/com/smallchill/core/plugins/dao/DbManager.java +++ b/src/main/java/com/smallchill/core/plugins/dao/DbManager.java @@ -524,8 +524,36 @@ public class DbManager { * @return */ public BladePage paginate(String sqlTemplate, Class 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 BladePage 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 BladePage paginate(String sqlTemplate, String sqlCount, Class clazz, Object paras, int pageNum, int pageSize){ List 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 page = new BladePage<>(rows, pageNum, pageSize, count); return page; } diff --git a/src/main/java/com/smallchill/core/toolbox/grid/BaseGridFactory.java b/src/main/java/com/smallchill/core/toolbox/grid/BaseGridFactory.java index de87cc4f..dc638ec7 100644 --- a/src/main/java/com/smallchill/core/toolbox/grid/BaseGridFactory.java +++ b/src/main/java/com/smallchill/core/toolbox/grid/BaseGridFactory.java @@ -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 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); } // 查询后拦截