From f7f3295058d0267c235789bb7ab7e6c9dca0d4dc Mon Sep 17 00:00:00 2001 From: tangxin <617054137@qq.com> Date: Fri, 15 Dec 2023 18:08:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Db.selectMap=20=E6=94=AF=E6=8C=81=EF=BC=88?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E7=9A=84=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=88=97=E4=BD=9C=E4=B8=BAkey=EF=BC=8C=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E5=88=97=E4=BD=9C=E4=B8=BAvalue)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/FlexDefaultResultSetHandler.java | 18 ++++++-- .../java/com/mybatisflex/core/row/Db.java | 42 +++++++++++++++++++ .../com/mybatisflex/core/row/RowMapper.java | 6 +++ .../core/row/RowMapperInvoker.java | 8 +++- .../java/com/mybatisflex/test/DbTest.java | 11 +++++ 5 files changed, 81 insertions(+), 4 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java index f4539599..09df6eb1 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java @@ -290,9 +290,21 @@ public class FlexDefaultResultSetHandler extends DefaultResultSetHandler { if (parentMapping != null) { handleRowValues(rsw, resultMap, null, RowBounds.DEFAULT, parentMapping); } else if (resultHandler == null) { - DefaultResultHandler defaultResultHandler = new DefaultResultHandler(objectFactory); - handleRowValues(rsw, resultMap, defaultResultHandler, rowBounds, null); - multipleResults.add(defaultResultHandler.getResultList()); + if(resultMap.getId().startsWith("com.mybatisflex.core.row.RowMapper.selectMap")){ + ResultSet resultSet = rsw.getResultSet(); + skipRows(resultSet, rowBounds); + Map row = new HashMap<>(); + while (!resultSet.isClosed() && resultSet.next()) { + row.put(resultSet.getObject(1),resultSet.getObject(2)); + } + List> mapArrayList = new ArrayList<>(1); + mapArrayList.add(row); + multipleResults.add(mapArrayList); + }else { + DefaultResultHandler defaultResultHandler = new DefaultResultHandler(objectFactory); + handleRowValues(rsw, resultMap, defaultResultHandler, rowBounds, null); + multipleResults.add(defaultResultHandler.getResultList()); + } } else { handleRowValues(rsw, resultMap, resultHandler, rowBounds, null); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java index 60f10af8..688f831c 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java @@ -854,6 +854,48 @@ public class Db { return invoker().selectObjectByQuery(null, null, queryWrapper); } + /** + * 根据 queryWrapper 查询内容,数据返回为Map 第一列的值作为key 第二列的值作为value + * + * @param queryWrapper query 封装 + * @return 数据内容 + */ + public static Map selectMap(QueryWrapper queryWrapper) { + return invoker().selectMapByQuery(null, null, queryWrapper); + } + + /** + * 查询某个内容,数据返回为Map 第一列的值作为key 第二列的值作为value + * + * @param sql sql 内容 + * @param args sql 参数 + */ + public static Map selectMap(String sql, Object... args) { + return invoker().selectMap(sql, args); + } + + /** + * 根据 queryWrapper 查询内容,数据返回为Map 第一列的值作为key 第二列的值作为value + * + * @param schema 模式 + * @param tableName 表名 + * @param queryWrapper query 封装 + * @return 数据内容 + */ + public static Map selectMap(String schema, String tableName, QueryWrapper queryWrapper) { + return invoker().selectMapByQuery(schema, tableName, queryWrapper); + } + + /** + * 根据 queryWrapper 查询内容,数据返回为Map 第一列的值作为key 第二列的值作为value + * + * @param tableName 表名 + * @param queryWrapper query 封装 + * @return 数据内容 + */ + public static Map selectMap(String tableName, QueryWrapper queryWrapper) { + return invoker().selectMapByQuery(null, tableName, queryWrapper); + } /** * 查询某列内容,数据返回应该有 多行 1 列 diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java index c99b0daa..bfa1bf6c 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java @@ -327,6 +327,12 @@ public interface RowMapper { Object selectObject(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args); + @SelectProvider(value = RowSqlProvider.class, method = RowSqlProvider.METHOD_RAW_SQL) + Map selectMap(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args); + + @SelectProvider(type = RowSqlProvider.class, method = "selectListByQuery") + Map selectMapByQuery(@Param(FlexConsts.SCHEMA_NAME) String schema + , @Param(FlexConsts.TABLE_NAME) String tableName, @Param(FlexConsts.QUERY) QueryWrapper queryWrapper); /** * 通过 sql 查询多行数据,sql 执行的结果应该只有 1 列 * diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java index bf05af19..b67842b7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java @@ -24,6 +24,7 @@ import org.apache.ibatis.session.SqlSessionFactory; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Function; @@ -188,7 +189,12 @@ public class RowMapperInvoker { public List selectAll(String schema, String tableName) { return execute(mapper -> mapper.selectAll(schema, tableName)); } - + public Map selectMapByQuery(String schema, String tableName, QueryWrapper queryWrapper) { + return execute(mapper -> mapper.selectMapByQuery(schema, tableName, queryWrapper)); + } + public Map selectMap(String sql, Object... args) { + return execute(mapper -> mapper.selectMap(sql, args)); + } public Object selectObjectByQuery(String schema, String tableName, QueryWrapper queryWrapper) { return execute(mapper -> mapper.selectObjectByQuery(schema, tableName, queryWrapper)); } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java index a0cf5bf6..bd270e9c 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java @@ -17,6 +17,7 @@ package com.mybatisflex.test; import com.mybatisflex.core.MybatisFlexBootstrap; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.row.Db; import com.mybatisflex.core.row.Row; import org.apache.ibatis.session.Configuration; @@ -28,6 +29,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import javax.sql.DataSource; import java.util.List; +import java.util.Map; /** * @author 王帅 @@ -70,4 +72,13 @@ public class DbTest { .forEach(Assert::assertNull); } + @Test + public void test02() { + Map map = Db.selectMap(QueryWrapper.create().from(tb_account)); + Map map2 = Db.selectMap("select * from tb_account"); + System.out.println(map); + System.out.println(map2); + Assert.assertEquals(map,map2); + } + } From 8999be6026f7c83f98d1eab600c1e41ffb8f2fbf Mon Sep 17 00:00:00 2001 From: tangxin <617054137@qq.com> Date: Mon, 18 Dec 2023 10:02:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Db.selectFirstAndSecondColumnsAsMap=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=EF=BC=88=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E7=9A=84=E7=AC=AC=E4=B8=80=E5=88=97=E4=BD=9C=E4=B8=BAkey?= =?UTF-8?q?=EF=BC=8C=E7=AC=AC=E4=BA=8C=E5=88=97=E4=BD=9C=E4=B8=BAvalue)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/base/db-row.md | 3 +++ .../mybatis/FlexDefaultResultSetHandler.java | 2 +- .../main/java/com/mybatisflex/core/row/Db.java | 16 ++++++++-------- .../java/com/mybatisflex/core/row/RowMapper.java | 5 +++-- .../mybatisflex/core/row/RowMapperInvoker.java | 8 ++++---- .../main/java/com/mybatisflex/test/DbTest.java | 4 ++-- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/docs/zh/base/db-row.md b/docs/zh/base/db-row.md index fa785089..d32cf378 100644 --- a/docs/zh/base/db-row.md +++ b/docs/zh/base/db-row.md @@ -27,6 +27,9 @@ String listsql = "select * from tb_account where age > ?" List rows = Db.selectListBySql(listsql,18); +//查询所有大于 18 岁用户的Id和用户名对应的Map +Map map = Db.selectFirstAndSecondColumnsAsMap("select id,user_name from tb_account where age >?",18); + //分页查询:每页 10 条数据,查询第 3 页的年龄大于 18 的用户 QueryWrapper query=QueryWrapper.create() .where(ACCOUNT.AGE.ge(18)); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java index 09df6eb1..d12353a5 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java @@ -290,7 +290,7 @@ public class FlexDefaultResultSetHandler extends DefaultResultSetHandler { if (parentMapping != null) { handleRowValues(rsw, resultMap, null, RowBounds.DEFAULT, parentMapping); } else if (resultHandler == null) { - if(resultMap.getId().startsWith("com.mybatisflex.core.row.RowMapper.selectMap")){ + if(resultMap.getId().startsWith("com.mybatisflex.core.row.RowMapper.selectFirstAndSecondColumnsAsMap")){ ResultSet resultSet = rsw.getResultSet(); skipRows(resultSet, rowBounds); Map row = new HashMap<>(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java index 688f831c..4cab02bc 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Db.java @@ -860,8 +860,8 @@ public class Db { * @param queryWrapper query 封装 * @return 数据内容 */ - public static Map selectMap(QueryWrapper queryWrapper) { - return invoker().selectMapByQuery(null, null, queryWrapper); + public static Map selectFirstAndSecondColumnsAsMap(QueryWrapper queryWrapper) { + return invoker().selectFirstAndSecondColumnsAsMapByQuery(null, null, queryWrapper); } /** @@ -870,8 +870,8 @@ public class Db { * @param sql sql 内容 * @param args sql 参数 */ - public static Map selectMap(String sql, Object... args) { - return invoker().selectMap(sql, args); + public static Map selectFirstAndSecondColumnsAsMap(String sql, Object... args) { + return invoker().selectFirstAndSecondColumnsAsMap(sql, args); } /** @@ -882,8 +882,8 @@ public class Db { * @param queryWrapper query 封装 * @return 数据内容 */ - public static Map selectMap(String schema, String tableName, QueryWrapper queryWrapper) { - return invoker().selectMapByQuery(schema, tableName, queryWrapper); + public static Map selectFirstAndSecondColumnsAsMap(String schema, String tableName, QueryWrapper queryWrapper) { + return invoker().selectFirstAndSecondColumnsAsMapByQuery(schema, tableName, queryWrapper); } /** @@ -893,8 +893,8 @@ public class Db { * @param queryWrapper query 封装 * @return 数据内容 */ - public static Map selectMap(String tableName, QueryWrapper queryWrapper) { - return invoker().selectMapByQuery(null, tableName, queryWrapper); + public static Map selectFirstAndSecondColumnsAsMap(String tableName, QueryWrapper queryWrapper) { + return invoker().selectFirstAndSecondColumnsAsMapByQuery(null, tableName, queryWrapper); } /** diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java index bfa1bf6c..7bbad179 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapper.java @@ -328,10 +328,10 @@ public interface RowMapper { @SelectProvider(value = RowSqlProvider.class, method = RowSqlProvider.METHOD_RAW_SQL) - Map selectMap(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args); + Map selectFirstAndSecondColumnsAsMap(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args); @SelectProvider(type = RowSqlProvider.class, method = "selectListByQuery") - Map selectMapByQuery(@Param(FlexConsts.SCHEMA_NAME) String schema + Map selectFirstAndSecondColumnsAsMapByQuery(@Param(FlexConsts.SCHEMA_NAME) String schema , @Param(FlexConsts.TABLE_NAME) String tableName, @Param(FlexConsts.QUERY) QueryWrapper queryWrapper); /** * 通过 sql 查询多行数据,sql 执行的结果应该只有 1 列 @@ -459,4 +459,5 @@ public interface RowMapper { } + } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java index b67842b7..9a7e77ab 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowMapperInvoker.java @@ -189,11 +189,11 @@ public class RowMapperInvoker { public List selectAll(String schema, String tableName) { return execute(mapper -> mapper.selectAll(schema, tableName)); } - public Map selectMapByQuery(String schema, String tableName, QueryWrapper queryWrapper) { - return execute(mapper -> mapper.selectMapByQuery(schema, tableName, queryWrapper)); + public Map selectFirstAndSecondColumnsAsMapByQuery(String schema, String tableName, QueryWrapper queryWrapper) { + return execute(mapper -> mapper.selectFirstAndSecondColumnsAsMapByQuery(schema, tableName, queryWrapper)); } - public Map selectMap(String sql, Object... args) { - return execute(mapper -> mapper.selectMap(sql, args)); + public Map selectFirstAndSecondColumnsAsMap(String sql, Object... args) { + return execute(mapper -> mapper.selectFirstAndSecondColumnsAsMap(sql, args)); } public Object selectObjectByQuery(String schema, String tableName, QueryWrapper queryWrapper) { return execute(mapper -> mapper.selectObjectByQuery(schema, tableName, queryWrapper)); diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java index bd270e9c..d06aec07 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java @@ -74,8 +74,8 @@ public class DbTest { @Test public void test02() { - Map map = Db.selectMap(QueryWrapper.create().from(tb_account)); - Map map2 = Db.selectMap("select * from tb_account"); + Map map = Db.selectFirstAndSecondColumnsAsMap(QueryWrapper.create().from(tb_account)); + Map map2 = Db.selectFirstAndSecondColumnsAsMap("select * from tb_account"); System.out.println(map); System.out.println(map2); Assert.assertEquals(map,map2);