Skip to content

05.返回 List 和 Map

1.List

接口方法

java
// 返回List集合
List<User> getList();

方法映射

xml
<!-- resultType: 如果返回的是一个集合, 要写集合中元素的类型 -->
<select id="getList" resultType="org.hong.pojo.User">
    select * from user
</select>

测试用例

java
@Test
public void testList(){
    // 1.获取sqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    // 2.获取需要的mapper接口的代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 3.调用对应的方法执行操作
    List<User> list = mapper.getList();
    list.forEach(System.out :: println);
    // 4.提交事务
    sqlSession.commit();
    // 5.关闭sqlSession
    sqlSession.close();
}

控制台打印

shell
## 正常运行
[main] [org.hong.mapper.UserMapper.getList]-[DEBUG] ==>  Preparing: select * from user
[main] [org.hong.mapper.UserMapper.getList]-[DEBUG] ==> Parameters:
[main] [org.hong.mapper.UserMapper.getList]-[DEBUG] <==      Total: 4
User(id=1, name=谢禹宏, pwd=654321)
User(id=2, name=Tom, pwd=123456)
User(id=3, name=Jerry, pwd=123456)
User(id=4, name=SAVE ID, pwd=123)

2.Map

2.1 key -> 列名 value -> 列值

接口方法

java
// 返回Map集合, key -> 列名、value -> 列值
Map<String, Object> getMapColumnToValue(int id);

方法映射

xml
<!-- resultType: key->列名、value->列值, 写Map的全类名 -->
<select id="getMapColumnToValue" resultType="java.util.Map">
    select * from user where id = #{id}
</select>

测试用例

java
@Test
public void testMapColumnToValue(){
    // 1.获取sqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    // 2.获取需要的mapper接口的代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 3.调用对应的方法执行操作
    Map<String, Object> mapColumnToValue = mapper.getMapColumnToValue(1);
    mapColumnToValue.forEach((key, value) -> System.out.println(key + "->" + value));
    // 4.提交事务
    sqlSession.commit();
    // 5.关闭sqlSession
    sqlSession.close();
}

控制台打印

shell
 ## 正常运行
[main] [org.hong.mapper.UserMapper.getMapColumnToValue]-[DEBUG] ==>  Preparing: select * from user where id = ?
[main] [org.hong.mapper.UserMapper.getMapColumnToValue]-[DEBUG] ==> Parameters: 1(Integer)
[main] [org.hong.mapper.UserMapper.getMapColumnToValue]-[DEBUG] <==      Total: 1
name->谢禹宏
id->1
pwd->654321

2.2 key -> 主键 value -> 实体对象

接口方法

java
// 返回Map集合, key -> 主键值、value -> 对应的实体对象
@MapKey("id")
Map<Integer, User> getMapPrimayToEntity();

方法映射

xml
<!-- resultType: key->主键、value->实体对象, 写实体对象的全类名 -->
<select id="getMapPrimayToEntity" resultType="org.hong.pojo.User">
    select * from user
</select>

测试用例

java
@Test
public void testMapPrimayToEntity(){
    // 1.获取sqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    // 2.获取需要的mapper接口的代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 3.调用对应的方法执行操作
    Map<Integer, User> mapPrimayToEntity = mapper.getMapPrimayToEntity();
    mapPrimayToEntity.forEach((key, value) -> System.out.println(key + "->" + value));
    // 4.提交事务
    sqlSession.commit();
    // 5.关闭sqlSession
    sqlSession.close();
}

控制台打印

shell
 ## 正常运行
[main] [org.hong.mapper.UserMapper.getMapPrimayToEntity]-[DEBUG] ==>  Preparing: select * from user
[main] [org.hong.mapper.UserMapper.getMapPrimayToEntity]-[DEBUG] ==> Parameters:
[main] [org.hong.mapper.UserMapper.getMapPrimayToEntity]-[DEBUG] <==      Total: 4
1->User(id=1, name=谢禹宏, pwd=654321)
2->User(id=2, name=Tom, pwd=123456)
3->User(id=3, name=Jerry, pwd=123456)
4->User(id=4, name=SAVE ID, pwd=123)

3.最终版

3.1 Mapper 接口

java
package org.hong.mapper;

import org.apache.ibatis.annotations.MapKey;
import org.hong.pojo.User;

import java.util.List;
import java.util.Map;


public interface UserMapper {
    // 返回List集合
    List<User> getList();

    // 返回Map集合, key -> 列名、value -> 列值
    Map<String, Object> getMapColumnToValue(int id);

    // 返回Map集合, key -> 主键值、value -> 对应的实体对象
    @MapKey("id") // 告诉MyBatis封装Map的时候使用实体类的哪个属性作为map的key
    Map<Integer, User> getMapPrimayToEntity();
}

3.2 Mapper.xml 文件

xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.hong.mapper.UserMapper">

    <!-- resultType: 如果返回的是一个集合, 要写集合中元素的类型 -->
    <select id="getList" resultType="org.hong.pojo.User">
        select * from user
    </select>

    <!-- resultType: key->列名、value->列值, 写Map的全类名 -->
    <select id="getMapColumnToValue" resultType="java.util.Map">
        select * from user where id = #{id}
    </select>

    <!-- resultType: key->主键、value->实体对象, 写实体对象的全类名 -->
    <select id="getMapPrimayToEntity" resultType="org.hong.pojo.User">
        select * from user
    </select>

</mapper>

3.3 测试用例

java
package org.hong.test;

import org.apache.ibatis.session.SqlSession;
import org.hong.mapper.UserMapper;
import org.hong.pojo.User;
import org.hong.util.MyBatisUtil;
import org.junit.Test;

import java.util.List;
import java.util.Map;

public class ResultTypeTest {
    @Test
    public void testList(){
        // 1.获取sqlSession对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        // 2.获取需要的mapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 3.调用对应的方法执行操作
        List<User> list = mapper.getList();
        list.forEach(System.out :: println);
        // 4.提交事务
        sqlSession.commit();
        // 5.关闭sqlSession
        sqlSession.close();
    }

    @Test
    public void testMapColumnToValue(){
        // 1.获取sqlSession对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        // 2.获取需要的mapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 3.调用对应的方法执行操作
        Map<String, Object> mapColumnToValue = mapper.getMapColumnToValue(1);
        mapColumnToValue.forEach((key, value) -> System.out.println(key + "->" + value));
        // 4.提交事务
        sqlSession.commit();
        // 5.关闭sqlSession
        sqlSession.close();
    }

    @Test
    public void testMapPrimayToEntity(){
        // 1.获取sqlSession对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        // 2.获取需要的mapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 3.调用对应的方法执行操作
        Map<Integer, User> mapPrimayToEntity = mapper.getMapPrimayToEntity();
        mapPrimayToEntity.forEach((key, value) -> System.out.println(key + "->" + value));
        // 4.提交事务
        sqlSession.commit();
        // 5.关闭sqlSession
        sqlSession.close();
    }
}

Released under the MIT License.