各种查询功能
2026/1/15大约 2 分钟MyBatis查询结果映射
MyBatis的各种查询功能
1. 查询一个实体类对象
// Mapper接口
User getUserById(@Param("id") Integer id);<select id="getUserById" resultType="User">
select * from t_user where id = #{id}
</select>2. 查询一个List集合
// Mapper接口
List<User> getAllUser();<select id="getAllUser" resultType="User">
select * from t_user
</select>3. 查询单个数据
// Mapper接口
Integer getCount();<select id="getCount" resultType="Integer">
select count(*) from t_user
</select>4. 查询一条数据为Map集合
// Mapper接口
Map<String, Object> getUserByIdToMap(@Param("id") Integer id);<select id="getUserByIdToMap" resultType="map">
select * from t_user where id = #{id}
</select>查询结果:
{password=123456, sex=男, id=4, age=20, email=123@qq.com, username=张三}5. 查询多条数据为Map集合
方式一:List<Map>
// Mapper接口
List<Map<String, Object>> getAllUserToMap();<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>方式二:@MapKey注解
// Mapper接口
@MapKey("id")
Map<String, Object> getAllUserToMap();<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>使用 @MapKey 注解,可以将每条数据转换的 Map 集合作为值,以某个字段为键,放在同一个 Map 集合中。
总结
查询数据只有一条时
可以通过以下方式接收:
- 实体类对象
- List 集合
- Map 集合
查询数据有多条时
可以通过以下方式接收:
- List 集合
- Map 类型的 List 集合
- 在 Mapper 接口的方法上添加
@MapKey注解
注意
一定不能通过实体类对象接收多条数据,此时会抛出异常 TooManyResultsException
MyBatis内置类型别名
| Java类型 | 类型别名 |
|---|---|
| java.lang.Integer | int, integer |
| int | _int, _integer |
| Map | map |
| String | string |
| List | list |
测试代码
@Test
public void testGetUserById() {
User user = mapper.getUserById(1);
System.out.println(user);
}
@Test
public void testGetAllUser() {
List<User> list = mapper.getAllUser();
list.forEach(System.out::println);
}
@Test
public void testGetCount() {
Integer count = mapper.getCount();
System.out.println("总记录数: " + count);
}
@Test
public void testGetUserByIdToMap() {
Map<String, Object> map = mapper.getUserByIdToMap(1);
System.out.println(map);
}
@Test
public void testGetAllUserToMap() {
Map<String, Object> map = mapper.getAllUserToMap();
System.out.println(map);
}