sql-语法 mybatis resultType=“string“
·
resultType=“string” 完全可以映射为 List 或 String,这是 MyBatis 中非常常见且标准的用法
在 MyBatis 中:
- resultType 指定的是结果集中每一行(row)的 Java 类型。
- 返回值类型(如 List、String)由 Mapper 接口的方法签名决定。
<select id="getNames" resultType="string">
SELECT name FROM user
</select>
返回 List(多行)
List<String> getNames(); // ← 多个结果 → List
返回 List(多行)
String getFirstName(); // ← 只取第一行(需确保最多一行)
如果查询返回多行,MyBatis 会抛出 TooManyResultsException
MyBatis 内部如何处理?
- 执行 SQL,得到 ResultSet
- 遍历每一行:
取第一列(因为 resultType=“string” 隐含只处理单列)
调用 ResultSet.getString(1) 或自动类型转换
创建 String 对象 - 将所有 String 放入 ArrayList(或其他集合)
- 返回给调用方
💡 即使数据库列是 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 *
更多推荐



所有评论(0)