Spring Mybatis 返回 List<String> 和List<Map<String,Object>>

本文介绍如何使用MyBatis进行List和Map类型的查询,包括配置resultType和resultMap的方式,以及返回不同类型数据的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果返回List,resultType=”String”就可以了,如果需要返回List

 <select id="selectAllInnerUser" resultType="String">
    select account_name
    from user_account
    where is_deleted=0 and user_type=0
  </select>

2.

 <resultMap id="stringsResult" type="java.lang.String">
    <result column="account_name" property="accountName" jdbcType="VARCHAR" />
  </resultMap>
  <select id="selectAllInnerUser" resultMap="stringsResult">
    select account_name
    from user_account
    where is_deleted=0 and user_type=0
  </select>

二、要返回map可以通过如下方式知道key和value

<resultMap type="HashMap" id="testMap">  
    <result column="UA_INFO" property="key" />  
    <association property="value" resultMap="com.xxx.xxx.BaseResultMap"></association>  
  </resultMap>  
  <select id="getUaMapByTimestamp" parameterType="Map" resultMap="testMap">
  </select> 

下面的还未尝试!
或者List

<select id="getMyCredit"  parameterClass="java.util.Map" resultClass="java.util.HashMap">
</select>

这样设置返回类型为resultClass=”java.util.HashMap”,查询时执行queryForList
List

方案 1:自定义 ResultHandler(推荐) 实现原理:通过实现 MyBatis 的 ResultHandler 接口,在结果集处理阶段直接修改 Map 数据。 适用场景:需要针对特定查询进行字段过滤。 实现步骤: 创建自定义结果处理器: Java public class MapFieldFilterResultHandler implements ResultHandler<Map<String, Object>> { private final List<Map<String, Object>> results = new ArrayList<>(); private final Set<String> excludeFields; public MapFieldFilterResultHandler(Set<String> excludeFields) { this.excludeFields = excludeFields; } @Override public void handleResult(ResultContext<? extends Map<String, Object>> resultContext) { Map<String, Object> originalMap = resultContext.getResultObject(); // 创建新 Map 并过滤字段 Map<String, Object> filteredMap = new LinkedHashMap<>(); originalMap.forEach((key, value) -> { if (!excludeFields.contains(key.toLowerCase())) { // 忽略大小写 filteredMap.put(key, value); } }); results.add(filteredMap); } public List<Map<String, Object>> getFilteredResults() { return results; } } 在 Mapper 接口中使用处理器: Java public List<Map<String, Object>> selectUsersWithoutSensitiveFields() { MapFieldFilterResultHandler resultHandler = new MapFieldFilterResultHandler(Set.of("password", "salt")); // 指定要排除的字段 sqlSession.select("selectUsers", resultHandler); // "selectUsers" 是对应的 SQL ID return resultHandler.getFilteredResults(); } SQL 映射文件保持简单查询: Xml <select id="selectUsers" resultType="map"> SELECT * FROM user <!-- 直接查询所有字段 --> </select> 优势: 代码侵入性低,可精准控制特定查询 支持动态过滤规则 兼容所有 MyBatis 版本 你这个方案在java8怎么实现?
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值