diff --git a/src/main/java/com/github/yulichang/base/MPJBaseMapper.java b/src/main/java/com/github/yulichang/base/MPJBaseMapper.java index 26a8e04..d6e5c90 100644 --- a/src/main/java/com/github/yulichang/base/MPJBaseMapper.java +++ b/src/main/java/com/github/yulichang/base/MPJBaseMapper.java @@ -16,6 +16,13 @@ import java.util.Map; */ public interface MPJBaseMapper extends BaseMapper { + /** + * 根据 Wrapper 条件,查询总记录数 + * + * @param wrapper joinWrapper + */ + Integer selectJoinCount(@Param(Constants.WRAPPER) MPJBaseJoin wrapper); + /** * 连表查询返回一条记录 * diff --git a/src/main/java/com/github/yulichang/base/MPJBaseService.java b/src/main/java/com/github/yulichang/base/MPJBaseService.java index 1d67276..1d42595 100644 --- a/src/main/java/com/github/yulichang/base/MPJBaseService.java +++ b/src/main/java/com/github/yulichang/base/MPJBaseService.java @@ -13,6 +13,11 @@ import java.util.Map; */ public interface MPJBaseService extends IService { + /** + * 根据 Wrapper 条件,查询总记录数 + */ + Integer selectJoinCount(MPJBaseJoin wrapper); + /** * 连接查询返回一条记录 */ diff --git a/src/main/java/com/github/yulichang/base/MPJBaseServiceImpl.java b/src/main/java/com/github/yulichang/base/MPJBaseServiceImpl.java index 3ff87f7..b0c0e00 100644 --- a/src/main/java/com/github/yulichang/base/MPJBaseServiceImpl.java +++ b/src/main/java/com/github/yulichang/base/MPJBaseServiceImpl.java @@ -39,6 +39,11 @@ public class MPJBaseServiceImpl, T> extends ServiceIm return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), ServiceImpl.class, 1); } + @Override + public Integer selectJoinCount(MPJBaseJoin wrapper) { + return baseMapper.selectJoinCount(wrapper); + } + @Override public DTO selectJoinOne(Class clazz, MPJBaseJoin wrapper) { return baseMapper.selectJoinOne(clazz, wrapper); diff --git a/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java b/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java index 4b97a16..f397bb6 100644 --- a/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java +++ b/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java @@ -30,6 +30,7 @@ public class MPJSqlInjector extends DefaultSqlInjector { @Override public List getMethodList(Class mapperClass) { List list = super.getMethodList(mapperClass); + list.add(new SelectJoinCount()); list.add(new SelectJoinOne()); list.add(new SelectJoinList()); list.add(new SelectJoinPage()); diff --git a/src/main/java/com/github/yulichang/method/MPJAbstractMethod.java b/src/main/java/com/github/yulichang/method/MPJAbstractMethod.java index a9718ef..f5a16d9 100644 --- a/src/main/java/com/github/yulichang/method/MPJAbstractMethod.java +++ b/src/main/java/com/github/yulichang/method/MPJAbstractMethod.java @@ -51,6 +51,13 @@ public abstract class MPJAbstractMethod extends AbstractMethod { SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), selectColumns); } + @Override + protected String sqlCount() { + return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null and %s != ''", WRAPPER, + Q_WRAPPER_SQL_SELECT, Q_WRAPPER_SQL_SELECT), + SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), ASTERISK); + } + protected String sqlAlias() { return SqlScriptUtils.convertIf("${ew.alias}", String.format("%s != null and %s != ''", "ew.alias", "ew.alias"), false); } diff --git a/src/main/java/com/github/yulichang/method/SelectJoinCount.java b/src/main/java/com/github/yulichang/method/SelectJoinCount.java new file mode 100644 index 0000000..628d277 --- /dev/null +++ b/src/main/java/com/github/yulichang/method/SelectJoinCount.java @@ -0,0 +1,24 @@ +package com.github.yulichang.method; + +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlSource; + +/** + * copy {@link com.baomidou.mybatisplus.core.injector.methods.SelectCount} + * + * @author yulichang + * @since 1.1.8 + */ +public class SelectJoinCount extends MPJAbstractMethod { + + @Override + public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { + SqlMethod sqlMethod = SqlMethod.SELECT_JOIN_COUNT; + String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlCount(), + tableInfo.getTableName(), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); + return this.addSelectMappedStatementForOther(mapperClass, sqlMethod.getMethod(), sqlSource, Integer.class); + } +} diff --git a/src/main/java/com/github/yulichang/method/SqlMethod.java b/src/main/java/com/github/yulichang/method/SqlMethod.java index 2ad0fe3..268c165 100644 --- a/src/main/java/com/github/yulichang/method/SqlMethod.java +++ b/src/main/java/com/github/yulichang/method/SqlMethod.java @@ -14,6 +14,9 @@ public enum SqlMethod { /** * 连表查询 */ + SELECT_JOIN_COUNT("selectJoinCount", "查询满足条件总记录数", + ""), + SELECT_JOIN_ONE("selectJoinOne", "返回一条记录", ""),