From 561f71618dadac3cf450bf4eb86e8fabce3296d1 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 10 Mar 2024 10:56:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20selectCursorByQuer?= =?UTF-8?q?yAs=20=E9=87=8D=E8=BD=BD=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/BaseMapper.java | 41 ++++++++++++++++--- .../mybatisflex/test/CursorTestStarter.java | 8 ++++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java index a6148267..b3519aeb 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java @@ -21,12 +21,23 @@ import com.mybatisflex.core.field.FieldQueryBuilder; import com.mybatisflex.core.mybatis.MappedStatementTypes; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.provider.EntitySqlProvider; -import com.mybatisflex.core.query.*; +import com.mybatisflex.core.query.CPI; +import com.mybatisflex.core.query.FunctionQueryColumn; +import com.mybatisflex.core.query.QueryColumn; +import com.mybatisflex.core.query.QueryCondition; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.row.Row; import com.mybatisflex.core.table.TableInfo; import com.mybatisflex.core.table.TableInfoFactory; -import com.mybatisflex.core.util.*; -import org.apache.ibatis.annotations.*; +import com.mybatisflex.core.util.ClassUtil; +import com.mybatisflex.core.util.CollectionUtil; +import com.mybatisflex.core.util.ConvertUtil; +import com.mybatisflex.core.util.MapperUtil; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; import org.apache.ibatis.builder.annotation.ProviderContext; import org.apache.ibatis.cursor.Cursor; import org.apache.ibatis.session.ExecutorType; @@ -34,7 +45,11 @@ import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.io.Serializable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static com.mybatisflex.core.query.QueryMethods.count; @@ -625,6 +640,22 @@ public interface BaseMapper { @SelectProvider(type = EntitySqlProvider.class, method = "selectListByQuery") Cursor selectCursorByQuery(@Param(FlexConsts.QUERY) QueryWrapper queryWrapper); + /** + * 根据查询条件查询游标数据,要求返回的数据为 asType 类型。该方法必须在事务中才能正常使用,非事务下无法获取数据。 + * + * @param queryWrapper 条件 + * @param asType 接收的数据类型 + * @return 游标数据 + */ + default Cursor selectCursorByQueryAs(QueryWrapper queryWrapper, Class asType) { + try { + MappedStatementTypes.setCurrentType(asType); + return (Cursor) selectCursorByQuery(queryWrapper); + } finally { + MappedStatementTypes.clear(); + } + } + /** * 根据查询条件查询 Row 数据。 * @@ -843,7 +874,7 @@ public interface BaseMapper { } return MapperUtil.getLongNumber(objects); } finally { - //fixed https://github.com/mybatis-flex/mybatis-flex/issues/49 + // fixed https://github.com/mybatis-flex/mybatis-flex/issues/49 CPI.setSelectColumns(queryWrapper, selectColumns); } } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/CursorTestStarter.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/CursorTestStarter.java index d86d78a2..a8563b58 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/CursorTestStarter.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/CursorTestStarter.java @@ -76,6 +76,14 @@ public class CursorTestStarter { return true; }); + Db.tx(() -> { + Cursor accountDTOS = accountMapper.selectCursorByQueryAs(QueryWrapper.create(), AccountDTO.class); + for (AccountDTO accountDTO : accountDTOS) { + System.out.println(accountDTO); + } + return true; + }); + }