public class JHDbKit { /** * 获取总数时传入的标识 */ public static final String GET_COUNT_SIGN = "isGetCount"; /** * 获取空分页 */ public static Page emptyPage(Integer pageNumber, Integer pageSize) { return new Page(new ArrayList(0), pageNumber, pageSize, 0, 0); } /** * 创建page对象 */ public static Page<Record> page(List<Record> list, Integer pageNumber, Integer pageSize, Integer totalRow) { if (totalRow == 0) { return emptyPage(pageNumber, pageSize); } int totalPage = (int) (totalRow / pageSize); if (totalRow % pageSize != 0) { totalPage++; } if (pageNumber > totalPage) { return new Page(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int) totalRow); } return new Page(list, pageNumber, pageSize, totalPage, (int) totalRow); } /** * 创建page对象(不统计总数) */ public static Page<Record> page(List<Record> list, Integer pageNumber, Integer pageSize) { return new Page(list, pageNumber, pageSize, 0, 0); } /** * 分页 * * @param func 数据处理 */ public static Page<Record> page(SqlPara totalSqlPara, SqlPara selectSqlPara, Integer pageNumber, Integer pageSize, Consumer<Record> func) { int totalRow = Db.queryInt(totalSqlPara.getSql(), totalSqlPara.getPara()); if (totalRow == 0) { return emptyPage(pageNumber, pageSize); } List list = getPageList(selectSqlPara, pageNumber, pageSize, func); return page(list, pageNumber, pageSize, totalRow); } /** * 分页(不统计总数) * * @param func 数据处理 */ public static Page<Record> page(SqlPara selectSqlPara, Integer pageNumber, Integer pageSize, Consumer<Record> func) { List list = getPageList(selectSqlPara, pageNumber, pageSize, func); return page(list, pageNumber, pageSize); } /** * 分页 * * @param countTotal 是否统计总数量 * @param func 数据处理 */ public static Page<Record> page(String key, Map data, Integer pageNumber, Integer pageSize, boolean countTotal, Consumer<Record> func) { if (data == null) { data = new HashMap(); } SqlPara selectSqlPara = Db.getSqlPara(key, data); if (countTotal) { data.put(GET_COUNT_SIGN, true); SqlPara totalSqlPara = Db.getSqlPara(key, data); data.remove(GET_COUNT_SIGN); return page(totalSqlPara, selectSqlPara, pageNumber, pageSize, func); } else { return page(selectSqlPara, pageNumber, pageSize, func); } } /** * 分页 * * @param countTotal 是否统计总数量 */ public static Page<Record> page(String key, Map data, Integer pageNumber, Integer pageSize, boolean countTotal) { return page(key, data, pageNumber, pageSize, countTotal, null); } /** * 分页 * * @param func 数据处理 */ public static Page<Record> page(String key, Map data, Integer pageNumber, Integer pageSize, Consumer<Record> func) { return page(key, data, pageNumber, pageSize, true, func); } /** * 分页 */ public static Page<Record> page(String key, Map data, Integer pageNumber, Integer pageSize) { return page(key, data, pageNumber, pageSize, true, null); } /** * 分页 * * @param func 数据处理 */ public static Page<Record> page(String key, Integer pageNumber, Integer pageSize, Consumer<Record> func) { return page(key, null, pageNumber, pageSize, func); } /** * 分页 */ public static Page<Record> page(String key, Integer pageNumber, Integer pageSize) { return page(key, null, pageNumber, pageSize, null); } /** * 获取分页列表 * * @param func 数据处理 */ public static List<Record> getPageList(SqlPara sqlPara, Integer pageNumber, Integer pageSize, Consumer<Record> func) { List<Record> list = new ArrayList<Record>(); StringBuffer findSql = new StringBuffer(sqlPara.getSql()); int offset = pageSize * (pageNumber - 1); findSql.append(" limit ").append(offset).append(", ").append(pageSize); Db.each((Record t) -> { if (func != null) { func.accept(t); } list.add(t); return true; }, findSql.toString(), sqlPara.getPara()); return list; } /** * 获取分页列表 * * @param func 数据处理 */ public static List<Record> getPageList(String key, Map data, Integer pageNumber, Integer pageSize, Consumer<Record> func) { if (data != null) { data = new HashMap(); } SqlPara sqlPara = Db.getSqlPara(key, data); return getPageList(sqlPara, pageNumber, pageSize, func); } /** * 获取分页列表 * * @param func 数据处理 */ public static List<Record> getPageList(String key, Integer pageNumber, Integer pageSize, Consumer<Record> func) { return getPageList(key, null, pageNumber, pageSize, func); } /** * 查询列表 * * @param func 数据处理 */ public static List<Record> find(SqlPara sqlPara, Consumer<Record> func) { List<Record> list = new ArrayList<Record>(); Db.each((Record t) -> { if (func != null) { func.accept(t); } list.add(t); return true; }, sqlPara.getSql(), sqlPara.getPara()); return list; } /** * 查询列表 * * @param func 数据处理 */ public static List<Record> find(String key, Map data, Consumer<Record> func) { if (data == null) { data = new HashMap(); } SqlPara sqlPara = Db.getSqlPara(key, data); return find(sqlPara, func); } /** * 查询列表 * * @param func 数据处理 */ public static List<Record> find(String key, Consumer<Record> func) { return find(key, null, func); } }
分页的sql模版写法
select #if(isGetCount) count(*) #else u.user_name,u.user_id,u.org_id,u.user_account, u.is_enable, o.org_name #end from sys_user u #if(!isGetCount || org_name) left join sys_org o on u.org_id = o.org_id #end where 1 = 1 #if(org_name) and o.org_name #like(org_name) #end #if(!isGetCount) order by u.create_time desc #end
有几处改进建议,#if( isGetCount??false ) 这个与 #if( isGetCount ) 其实是等价的,因为 #if ( null ) 等价于 #if ( false )
同理 #if( !(isGetCount??false) ) 也可以改成 #if( !isGetCount )