diff --git a/src/main/java/com/boot/security/server/page/table/PageTableHandler.java b/src/main/java/com/boot/security/server/page/table/PageTableHandler.java index d5c4433..2ed2240 100644 --- a/src/main/java/com/boot/security/server/page/table/PageTableHandler.java +++ b/src/main/java/com/boot/security/server/page/table/PageTableHandler.java @@ -14,6 +14,7 @@ public class PageTableHandler { private CountHandler countHandler; private ListHandler listHandler; + private OrderHandler orderHandler; public PageTableHandler(CountHandler countHandler, ListHandler listHandler) { super(); @@ -21,12 +22,20 @@ public class PageTableHandler { this.listHandler = listHandler; } + public PageTableHandler(CountHandler countHandler, ListHandler listHandler, OrderHandler orderHandler) { + this(countHandler, listHandler); + this.orderHandler = orderHandler; + } + public PageTableResponse handle(PageTableRequest dtRequest) { int count = 0; List list = null; count = this.countHandler.count(dtRequest); if (count > 0) { + if (orderHandler != null) { + dtRequest = orderHandler.order(dtRequest); + } list = this.listHandler.list(dtRequest); } @@ -44,4 +53,8 @@ public class PageTableHandler { public interface CountHandler { int count(PageTableRequest request); } + + public interface OrderHandler { + PageTableRequest order(PageTableRequest request); + } } \ No newline at end of file diff --git a/src/main/java/com/boot/security/server/utils/ColumnProUtil.java b/src/main/java/com/boot/security/server/utils/ColumnProUtil.java new file mode 100644 index 0000000..995a01c --- /dev/null +++ b/src/main/java/com/boot/security/server/utils/ColumnProUtil.java @@ -0,0 +1,70 @@ +package com.boot.security.server.utils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.mapping.ResultMap; +import org.apache.ibatis.mapping.ResultMapping; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.util.CollectionUtils; + +import com.boot.security.server.page.table.PageTableRequest; + +public class ColumnProUtil { + + private static String DEFAULT_ID = "BaseResultMap"; + + /** + * 获取java类属性和表字段对应关系 + * + * @param dao + * @param id + * @return + */ + public static Map getColumnPro(Class dao, String... id) { + Map map = new HashMap<>(); + + SqlSessionFactory sessionFactory = SpringUtil.getBean(SqlSessionFactory.class); + ResultMap resultMap = sessionFactory.getConfiguration() + .getResultMap(dao.getName() + "." + (id.length == 0 ? DEFAULT_ID : id[0])); + if (resultMap != null) { + List list = resultMap.getResultMappings(); + + list.parallelStream().forEach(rm -> { + String column = rm.getColumn(); + String pro = rm.getProperty(); + if (StringUtils.isNoneBlank(column) && StringUtils.isNotBlank(pro)) { + map.put(pro, column); + } + }); + + } + + return map; + } + + /** + * 将java类属性替换为表字段 + * + * @param request + * @param map + * @return + */ + public static String pro2Column(PageTableRequest request, Map map) { + String orderBy = (String) request.getParams().get("orderBy"); + if (StringUtils.isNoneBlank(orderBy) && !CollectionUtils.isEmpty(map)) { + for (String pro : map.keySet()) { + String val = map.get(pro); + if (StringUtils.isNoneBlank(val)) { + orderBy = orderBy.replace(pro, val); + } + } + + request.getParams().put("orderBy", orderBy); + } + + return orderBy; + } +}