From ea0e24dc36db342b0a0b904d247f45373690b6f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BB=96=E9=87=91=E9=BE=99?= Date: Mon, 6 Jul 2020 22:58:38 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E5=88=86=E9=A1=B5=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhengjie/base/BaseRepository.java | 21 ++++++++-- .../java/me/zhengjie/db/ElSpecification.java | 15 +++++++ .../me/zhengjie/db/MybatisPlusConfig.java | 39 +++++++++++++++++++ .../java/me/zhengjie/utils/QueryHelp.java | 16 ++++---- .../src/main/java/me/zhengjie/AppRun.java | 4 -- 5 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 eladmin-common/src/main/java/me/zhengjie/db/MybatisPlusConfig.java diff --git a/eladmin-common/src/main/java/me/zhengjie/base/BaseRepository.java b/eladmin-common/src/main/java/me/zhengjie/base/BaseRepository.java index 4278e656..6c765921 100644 --- a/eladmin-common/src/main/java/me/zhengjie/base/BaseRepository.java +++ b/eladmin-common/src/main/java/me/zhengjie/base/BaseRepository.java @@ -17,10 +17,14 @@ package me.zhengjie.base; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.IService; import com.google.common.collect.Sets; import me.zhengjie.db.ElSpecification; +import me.zhengjie.utils.QueryHelp; +import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.WhereFun; import me.zhengjie.utils.WrapperUtils; import me.zhengjie.utils.enums.DbType; @@ -295,12 +299,21 @@ public class BaseRepository, J extends JpaRepository page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(); page.setPages(pageable.getPageNumber()); page.setSize(pageable.getPageSize()); - page.setCurrent(pageable.getOffset()); + page.setCurrent(pageable.getOffset() / page.getSize() + 1); final Sort sort = pageable.getSort(); final ArrayList orders = new ArrayList<>(); + + final Class clazz = specifications.getClazz(); + final TableInfo tableInfo = TableInfoHelper.getTableInfo(clazz); + final String name = clazz.getName(); + sort.get().forEach(order -> { final Sort.Direction direction = order.getDirection(); - final String property = order.getProperty(); + /** + * 翻译位 数据库 Column + */ + final String tableColumnFromField = QueryHelp.getTableColumnFromField(tableInfo, name, order.getProperty()); + final String property = StringUtils.isNotBlank(tableColumnFromField) ? tableColumnFromField : order.getProperty(); final OrderItem orderItem; switch (direction) { case DESC: @@ -315,7 +328,9 @@ public class BaseRepository, J extends JpaRepository(mpService.page(page, queryWrapper).getRecords(), + final List records1 = mpService.getBaseMapper().selectPage(page, queryWrapper).getRecords(); + final List records = mpService.page(page, queryWrapper).getRecords(); + return new PageImpl(records, pageable, page.getTotal()); } diff --git a/eladmin-common/src/main/java/me/zhengjie/db/ElSpecification.java b/eladmin-common/src/main/java/me/zhengjie/db/ElSpecification.java index 8becbed2..8646f634 100644 --- a/eladmin-common/src/main/java/me/zhengjie/db/ElSpecification.java +++ b/eladmin-common/src/main/java/me/zhengjie/db/ElSpecification.java @@ -43,6 +43,21 @@ public class ElSpecification implements Specification { return QueryHelp.getQueryWrapper(criteria, clazz); } + public Object getCriteria() { + return criteria; + } + + public Class getClazz() { + return clazz; + } + + public Specification getSpecification() { + return specification; + } + + public void setSpecification(Specification specification) { + this.specification = specification; + } /** * Creates a WHERE clause for a query of the referenced entity in form of a {@link Predicate} for the given diff --git a/eladmin-common/src/main/java/me/zhengjie/db/MybatisPlusConfig.java b/eladmin-common/src/main/java/me/zhengjie/db/MybatisPlusConfig.java new file mode 100644 index 00000000..216be434 --- /dev/null +++ b/eladmin-common/src/main/java/me/zhengjie/db/MybatisPlusConfig.java @@ -0,0 +1,39 @@ +package me.zhengjie.db; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * MybatisPlus 分页插件 + * + * @author liaojinlong + * @since 2020/7/6 22:32 + */ +@Configuration +@EnableTransactionManagement +@MapperScan({ + "me.zhengjie.repository.mp", + "me.zhengjie.modules.system.repository.mp" +}) +public class MybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false + paginationInterceptor.setOverflow(false); + // 设置最大单页限制数量,默认 500 条,-1 不受限制 + paginationInterceptor.setLimit(500); + // 开启 count 的 join 优化,只针对部分 left join + paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); + return paginationInterceptor; + } +} + diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java index 1a8b6602..45c0e744 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java @@ -42,7 +42,7 @@ import java.util.concurrent.atomic.AtomicReference; public class QueryHelp { public static ThreadLocal queryWrapperThreadLocal = new ThreadLocal<>(); protected static Map> FIELD_CACHE = new ConcurrentHashMap<>(16); - protected static Map COLUMN_CACHE = new ConcurrentHashMap<>(16); + protected static Map COLUMN_CACHE = new ConcurrentHashMap<>(16); /** * JPA 查询参数构建 @@ -228,7 +228,7 @@ public class QueryHelp { if (Objects.isNull(value)) { return; } - attributeName = getTableColumnFromField(tableInfo, field); + attributeName = getTableColumnFromField(tableInfo, clazz.getName(), field.getName()); } catch (IllegalAccessException e) { log.error(e.getMessage(), e); return; @@ -316,6 +316,7 @@ public class QueryHelp { return true; } + /** * 依据Mybatis Plus 获取 Database 真实Column 字段 * @@ -323,16 +324,17 @@ public class QueryHelp { * @param field * @return / */ - public static String getTableColumnFromField(TableInfo tableInfo, Field field) { + public static String getTableColumnFromField(TableInfo tableInfo, String className, String field) { String columnName = null; - if (FIELD_CACHE.containsKey(field)) { + final String key = className + "_" + field; + if (FIELD_CACHE.containsKey(key)) { final ElField elField = COLUMN_CACHE.get(field); if (elField.isStatus()) { columnName = elField.getColumn(); } } else { AtomicReference tableColumnName = null; - final String name = field.getName(); + final String name = field; for (TableFieldInfo item : tableInfo.getFieldList()) { if (item.getField().getName().equals(name)) { tableColumnName = new AtomicReference<>(); @@ -342,9 +344,9 @@ public class QueryHelp { } if (Objects.nonNull(tableColumnName)) { columnName = tableColumnName.get(); - COLUMN_CACHE.put(field, new ElField(columnName, true)); + COLUMN_CACHE.put(key, new ElField(columnName, true)); } else { - COLUMN_CACHE.put(field, new ElField(columnName, false)); + COLUMN_CACHE.put(key, new ElField(columnName, false)); } } return columnName; diff --git a/eladmin-system/src/main/java/me/zhengjie/AppRun.java b/eladmin-system/src/main/java/me/zhengjie/AppRun.java index 1c3d5e0b..db2e33b9 100644 --- a/eladmin-system/src/main/java/me/zhengjie/AppRun.java +++ b/eladmin-system/src/main/java/me/zhengjie/AppRun.java @@ -40,10 +40,6 @@ import org.springframework.web.bind.annotation.RestController; @Api(hidden = true) @SpringBootApplication @EnableTransactionManagement -@MapperScan({ - "me.zhengjie.repository.mp", - "me.zhengjie.modules.system.repository.mp" -}) @EnableJpaAuditing(auditorAwareRef = "auditorAware") public class AppRun {