fixed 1.2.4新增的 paginateAs 异常 close #I73BP6

This commit is contained in:
开源海哥 2023-05-16 09:19:05 +08:00
parent 75329948dd
commit 0cffd08ce7
3 changed files with 43 additions and 33 deletions

View File

@ -16,6 +16,7 @@
package com.mybatisflex.core; package com.mybatisflex.core;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.mybatis.MappedStatementTypes;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.provider.EntitySqlProvider; import com.mybatisflex.core.provider.EntitySqlProvider;
import com.mybatisflex.core.query.CPI; import com.mybatisflex.core.query.CPI;
@ -615,7 +616,7 @@ public interface BaseMapper<T> {
//清除group by 去查询数据 //清除group by 去查询数据
CPI.setGroupByColumns(queryWrapper, null); CPI.setGroupByColumns(queryWrapper, null);
CPI.setSelectColumns(queryWrapper, Arrays.asList(count())); CPI.setSelectColumns(queryWrapper, Collections.singletonList(count()));
long count = selectCountByQuery(queryWrapper); long count = selectCountByQuery(queryWrapper);
page.setTotalRow(count); page.setTotalRow(count);
@ -633,8 +634,15 @@ public interface BaseMapper<T> {
int offset = page.getPageSize() * (page.getPageNumber() - 1); int offset = page.getPageSize() * (page.getPageNumber() - 1);
queryWrapper.limit(offset, page.getPageSize()); queryWrapper.limit(offset, page.getPageSize());
List<R> records = selectListByQueryAs(queryWrapper, asType); try {
page.setRecords(records); // 调用内部方法不走代理需要主动设置 MappedStatementType
// fixed https://gitee.com/mybatis-flex/mybatis-flex/issues/I73BP6
MappedStatementTypes.setCurrentType(asType);
List<R> records = selectListByQueryAs(queryWrapper, asType);
page.setRecords(records);
}finally {
MappedStatementTypes.clear();
}
return page; return page;
} }
} }

View File

@ -19,15 +19,15 @@ public class MappedStatementTypes {
private static ThreadLocal<Class<?>> currentTypeTL = new ThreadLocal<>(); private static ThreadLocal<Class<?>> currentTypeTL = new ThreadLocal<>();
static void setCurrentType(Class<?> type){ public static void setCurrentType(Class<?> type){
currentTypeTL.set(type); currentTypeTL.set(type);
} }
static Class<?> getCurrentType(){ public static Class<?> getCurrentType(){
return currentTypeTL.get(); return currentTypeTL.get();
} }
static void clear(){ public static void clear(){
currentTypeTL.remove(); currentTypeTL.remove();
} }

View File

@ -25,7 +25,6 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.List;
import static com.mybatisflex.test.table.Tables.ACCOUNT; import static com.mybatisflex.test.table.Tables.ACCOUNT;
import static com.mybatisflex.test.table.Tables.ARTICLE; import static com.mybatisflex.test.table.Tables.ARTICLE;
@ -58,39 +57,42 @@ public class EntityTestStarter {
// List<Account> accounts1 = myAccountMapper.selectAll(); // List<Account> accounts1 = myAccountMapper.selectAll();
QueryWrapper wrapper = QueryWrapper.create().select().from(ACCOUNT) // QueryWrapper wrapper = QueryWrapper.create().select().from(ACCOUNT)
.and(ACCOUNT.ID.ge(100).and(ACCOUNT.ID.ge(200))) // .and(ACCOUNT.ID.ge(100).and(ACCOUNT.ID.ge(200)))
.and(ACCOUNT.ID.ge(100).and(ACCOUNT.ID.ge(200))) // .and(ACCOUNT.ID.ge(100).and(ACCOUNT.ID.ge(200)))
.groupBy(ACCOUNT.ID); // .groupBy(ACCOUNT.ID);
//
List<Account> accounts = accountMapper.selectListByQuery(wrapper); // List<Account> accounts = accountMapper.selectListByQuery(wrapper);
System.out.println(accounts); // System.out.println(accounts);
//
QueryWrapper wrapper1 = QueryWrapper.create().select().from(ACCOUNT) // QueryWrapper wrapper1 = QueryWrapper.create().select().from(ACCOUNT)
// .leftJoin(ARTICLE).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID).and(ACCOUNT.ID.ge(100))) //// .leftJoin(ARTICLE).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID).and(ACCOUNT.ID.ge(100)))
.and(ACCOUNT.ID.ge(100).when(false).and(ACCOUNT.ID.ge(100).when(false))); // .and(ACCOUNT.ID.ge(100).when(false).and(ACCOUNT.ID.ge(100).when(false)));
//
Page<Account> accounts1 = accountMapper.paginate(Page.of(1,1),wrapper1); // Page<Account> accounts1 = accountMapper.paginate(Page.of(1,1),wrapper1);
System.out.println(accounts1); // System.out.println(accounts1);
//
//
QueryWrapper wrapper2 = QueryWrapper.create().select(ACCOUNT.ID).from(ACCOUNT); // QueryWrapper wrapper2 = QueryWrapper.create().select(ACCOUNT.ID).from(ACCOUNT);
List<Object> objects = accountMapper.selectObjectListByQuery(wrapper2); // List<Object> objects = accountMapper.selectObjectListByQuery(wrapper2);
System.out.println(objects); // System.out.println(objects);
//
//
Object object = accountMapper.selectObjectByQuery(wrapper2); // Object object = accountMapper.selectObjectByQuery(wrapper2);
System.out.println(object); // System.out.println(object);
//
QueryWrapper asWrapper = QueryWrapper.create() QueryWrapper asWrapper = QueryWrapper.create()
.select(ARTICLE.ALL_COLUMNS) .select(ARTICLE.ALL_COLUMNS)
.select(ACCOUNT.USER_NAME,ACCOUNT.AGE,ACCOUNT.BIRTHDAY) .select(ACCOUNT.USER_NAME,ACCOUNT.AGE,ACCOUNT.BIRTHDAY)
.from(ARTICLE) .from(ARTICLE)
.leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID)) .leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID))
.where(ACCOUNT.ID.ge(0)); .where(ACCOUNT.ID.ge(0));
//
// List<ArticleDTO> articleDTOS = accountMapper.selectListByQueryAs(asWrapper, ArticleDTO.class);
// System.out.println(articleDTOS);
Page<ArticleDTO> paginate = accountMapper.paginateAs(Page.of(1, 1), asWrapper, ArticleDTO.class);
System.out.println(paginate);
List<ArticleDTO> articleDTOS = accountMapper.selectListByQueryAs(asWrapper, ArticleDTO.class);
System.out.println(articleDTOS);
// QueryWrapper queryWrapper = new QueryWrapper(); // QueryWrapper queryWrapper = new QueryWrapper();