!388 Db.selectMap 支持,查询的结果列1作为key,列2作为value

Merge pull request !388 from tangxin/main
This commit is contained in:
Michael Yang 2023-12-19 07:04:26 +00:00 committed by Gitee
commit 13e717fc9c
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 85 additions and 4 deletions

View File

@ -27,6 +27,9 @@ String listsql = "select * from tb_account where age > ?"
List<Row> rows = Db.selectListBySql(listsql,18); List<Row> 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 的用户 //分页查询:每页 10 条数据,查询第 3 页的年龄大于 18 的用户
QueryWrapper query=QueryWrapper.create() QueryWrapper query=QueryWrapper.create()
.where(ACCOUNT.AGE.ge(18)); .where(ACCOUNT.AGE.ge(18));

View File

@ -290,9 +290,21 @@ public class FlexDefaultResultSetHandler extends DefaultResultSetHandler {
if (parentMapping != null) { if (parentMapping != null) {
handleRowValues(rsw, resultMap, null, RowBounds.DEFAULT, parentMapping); handleRowValues(rsw, resultMap, null, RowBounds.DEFAULT, parentMapping);
} else if (resultHandler == null) { } else if (resultHandler == null) {
DefaultResultHandler defaultResultHandler = new DefaultResultHandler(objectFactory); if(resultMap.getId().startsWith("com.mybatisflex.core.row.RowMapper.selectFirstAndSecondColumnsAsMap")){
handleRowValues(rsw, resultMap, defaultResultHandler, rowBounds, null); ResultSet resultSet = rsw.getResultSet();
multipleResults.add(defaultResultHandler.getResultList()); skipRows(resultSet, rowBounds);
Map<Object,Object> row = new HashMap<>();
while (!resultSet.isClosed() && resultSet.next()) {
row.put(resultSet.getObject(1),resultSet.getObject(2));
}
List<Map<Object,Object>> 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 { } else {
handleRowValues(rsw, resultMap, resultHandler, rowBounds, null); handleRowValues(rsw, resultMap, resultHandler, rowBounds, null);
} }

View File

@ -854,6 +854,48 @@ public class Db {
return invoker().selectObjectByQuery(null, null, queryWrapper); return invoker().selectObjectByQuery(null, null, queryWrapper);
} }
/**
* 根据 queryWrapper 查询内容数据返回为Map 第一列的值作为key 第二列的值作为value
*
* @param queryWrapper query 封装
* @return 数据内容
*/
public static Map selectFirstAndSecondColumnsAsMap(QueryWrapper queryWrapper) {
return invoker().selectFirstAndSecondColumnsAsMapByQuery(null, null, queryWrapper);
}
/**
* 查询某个内容数据返回为Map 第一列的值作为key 第二列的值作为value
*
* @param sql sql 内容
* @param args sql 参数
*/
public static Map selectFirstAndSecondColumnsAsMap(String sql, Object... args) {
return invoker().selectFirstAndSecondColumnsAsMap(sql, args);
}
/**
* 根据 queryWrapper 查询内容数据返回为Map 第一列的值作为key 第二列的值作为value
*
* @param schema 模式
* @param tableName 表名
* @param queryWrapper query 封装
* @return 数据内容
*/
public static Map selectFirstAndSecondColumnsAsMap(String schema, String tableName, QueryWrapper queryWrapper) {
return invoker().selectFirstAndSecondColumnsAsMapByQuery(schema, tableName, queryWrapper);
}
/**
* 根据 queryWrapper 查询内容数据返回为Map 第一列的值作为key 第二列的值作为value
*
* @param tableName 表名
* @param queryWrapper query 封装
* @return 数据内容
*/
public static Map selectFirstAndSecondColumnsAsMap(String tableName, QueryWrapper queryWrapper) {
return invoker().selectFirstAndSecondColumnsAsMapByQuery(null, tableName, queryWrapper);
}
/** /**
* 查询某列内容数据返回应该有 多行 1 * 查询某列内容数据返回应该有 多行 1

View File

@ -327,6 +327,12 @@ public interface RowMapper {
Object selectObject(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args); Object selectObject(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args);
@SelectProvider(value = RowSqlProvider.class, method = RowSqlProvider.METHOD_RAW_SQL)
Map selectFirstAndSecondColumnsAsMap(@Param(FlexConsts.SQL) String sql, @Param(FlexConsts.SQL_ARGS) Object... args);
@SelectProvider(type = RowSqlProvider.class, method = "selectListByQuery")
Map selectFirstAndSecondColumnsAsMapByQuery(@Param(FlexConsts.SCHEMA_NAME) String schema
, @Param(FlexConsts.TABLE_NAME) String tableName, @Param(FlexConsts.QUERY) QueryWrapper queryWrapper);
/** /**
* 通过 sql 查询多行数据sql 执行的结果应该只有 1 * 通过 sql 查询多行数据sql 执行的结果应该只有 1
* *
@ -453,4 +459,5 @@ public interface RowMapper {
} }
} }

View File

@ -24,6 +24,7 @@ import org.apache.ibatis.session.SqlSessionFactory;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Function; import java.util.function.Function;
@ -188,7 +189,12 @@ public class RowMapperInvoker {
public List<Row> selectAll(String schema, String tableName) { public List<Row> selectAll(String schema, String tableName) {
return execute(mapper -> mapper.selectAll(schema, tableName)); return execute(mapper -> mapper.selectAll(schema, tableName));
} }
public Map selectFirstAndSecondColumnsAsMapByQuery(String schema, String tableName, QueryWrapper queryWrapper) {
return execute(mapper -> mapper.selectFirstAndSecondColumnsAsMapByQuery(schema, tableName, queryWrapper));
}
public Map selectFirstAndSecondColumnsAsMap(String sql, Object... args) {
return execute(mapper -> mapper.selectFirstAndSecondColumnsAsMap(sql, args));
}
public Object selectObjectByQuery(String schema, String tableName, QueryWrapper queryWrapper) { public Object selectObjectByQuery(String schema, String tableName, QueryWrapper queryWrapper) {
return execute(mapper -> mapper.selectObjectByQuery(schema, tableName, queryWrapper)); return execute(mapper -> mapper.selectObjectByQuery(schema, tableName, queryWrapper));
} }

View File

@ -17,6 +17,7 @@
package com.mybatisflex.test; package com.mybatisflex.test;
import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.Db; import com.mybatisflex.core.row.Db;
import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.Row;
import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.Configuration;
@ -28,6 +29,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author 王帅 * @author 王帅
@ -70,4 +72,13 @@ public class DbTest {
.forEach(Assert::assertNull); .forEach(Assert::assertNull);
} }
@Test
public void test02() {
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);
}
} }