resultType=“string” 完全可以映射为 List 或 String,这是 MyBatis 中非常常见且标准的用法

在 MyBatis 中:

  1. resultType 指定的是结果集中每一行(row)的 Java 类型。
  2. 返回值类型(如 List、String)由 Mapper 接口的方法签名决定。
<select id="getNames" resultType="string">
    SELECT name FROM user
</select>

返回 List(多行)

List<String> getNames(); // ← 多个结果 → List

返回 List(多行)

String getFirstName(); // ← 只取第一行(需确保最多一行)

如果查询返回多行,MyBatis 会抛出 TooManyResultsException

MyBatis 内部如何处理?

  1. 执行 SQL,得到 ResultSet
  2. 遍历每一行:
    取第一列(因为 resultType=“string” 隐含只处理单列)
    调用 ResultSet.getString(1) 或自动类型转换
    创建 String 对象
  3. 将所有 String 放入 ArrayList(或其他集合)
  4. 返回给调用方
    💡 即使数据库列是 BIGINT、UUID、DATE,MyBatis 也会尝试转为 String。
问题说明
SQL 必须只返回一列如果 SELECT id, name,MyBatis 无法映射到 String,会报错
空结果集List<String> 会返回空列表(size()=0),不会是 null
单值方法 + 多行结果若接口返回 String 但 SQL 返回多行 → 抛 TooManyResultsException

最佳实践

想获取多个字符串 → 接口返回 List
想获取单个字符串 → 确保 SQL 加了 LIMIT 1 或条件唯一
始终在 SQL 中明确指定单列,避免 SELECT *

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐