mybatis中返回结果类型为集合类型(List、Map)

本章节主要讲解如果Mapper接口的返回类型为集合(List、Map)时,如何定义

一、返回结果类型为List

Mapper接口的方法:

 List<Employee> getAll();

EmployeeMapper.xml映射文件:

<select id="getAll" resultType="com.wcg.mybatis.entity.Employee">
    select id,last_name ,email,gender from tbl_employee
</select>

在resultType定义返回结果List中的元素类型即可:

List<Employee> --> resultType="com.wcg.mybatis.entity.Employee"

测试方法:

@Test
public void selectAllTest(){
    // 获取 SqlSession 的实例 。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句
    SqlSession sqlSession = null;
    try {
        sqlSession = sessionFactory.openSession();
        // 通过获取接口代理对象来执行sql语句
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        List<Employee> employeeList = mapper.getAll();
        for (Employee employee : employeeList) {
            System.out.println("name: "+ employee.getLastName());
        }
    } finally {
        // 资源关闭,放在finally中确保一定会执行
        sqlSession.close();
    }
}

结果:

DEBUG 05-07 23:46:31,854 ==>  Preparing: select id,last_name ,email,gender from tbl_employee   (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:46:31,905 ==> Parameters:   (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:46:31,927 <==      Total: 3  (BaseJdbcLogger.java:145) 
name: BB
name: CC
name: DD

二、返回结果类型为Map

返回一行数据:

Mapper接口的方法:

Map<String, Object> getEmpById(@Param("id") Integer id);

EmployeeMapper.xml映射文件:

<select id="getEmpById" resultType="map">
    select id,last_name ,email,gender from tbl_employee where id = #{id}
</select>

则Map<String, Object>中,String对应着字段名,Object对应着字段值

测试方法:

@Test
public void selectMapTest(){
    // 获取 SqlSession 的实例 。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句
    SqlSession sqlSession = null;
    try {
        sqlSession = sessionFactory.openSession();
        // 通过获取接口代理对象来执行sql语句
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Map<String, Object> empMap = mapper.getEmpById(2);
        Set<Map.Entry<String, Object>> entries = empMap.entrySet();
        Iterator<Map.Entry<String, Object>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, Object> next = iterator.next();
            System.out.println(next.getKey()+" : "+next.getValue());
        }
    } finally {
        // 资源关闭,放在finally中确保一定会执行
        sqlSession.close();
    }
}

结果:

DEBUG 05-07 23:45:03,837 ==>  Preparing: select id,last_name ,email,gender from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:45:03,882 ==> Parameters: 2(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:45:03,937 <==      Total: 1  (BaseJdbcLogger.java:145) 
gender : 0
last_name : BB
id : 2
email : bb@qq.com

返回多行数据:

Mapper接口的方法:

@MapKey("id")
Map<Integer, Employee> getAllEmp();

EmployeeMapper.xml映射文件:

<select id="getAllEmp" resultType="employee">
    select id,last_name ,email,gender from tbl_employee
</select>

通过@MapKey定义返回Map集合的key是哪个字段的值,Map集合的Value则为每行数据的值

 

测试方法:

@Test
public void selectMapKeyTest(){
    // 获取 SqlSession 的实例 。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句
    SqlSession sqlSession = null;
    try {
        sqlSession = sessionFactory.openSession();
        // 通过获取接口代理对象来执行sql语句
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Map<Integer, Employee> empMap = mapper.getAllEmp();
        Set<Map.Entry<Integer, Employee>> entries = empMap.entrySet();
        Iterator<Map.Entry<Integer, Employee>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer, Employee> next = iterator.next();
            System.out.println(next.getKey()+" : "+next.getValue().getLastName());
        }
    } finally {
        // 资源关闭,放在finally中确保一定会执行
        sqlSession.close();
    }
}

结果:

DEBUG 05-07 23:30:54,624 ==>  Preparing: select id,last_name ,email,gender from tbl_employee   (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:30:54,712 ==> Parameters:   (BaseJdbcLogger.java:145) 
DEBUG 05-07 23:30:54,738 <==      Total: 3  (BaseJdbcLogger.java:145) 
2 : BB
4 : CC
5 : DD

 

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis是一款优秀的持久化框架,它使用简单,并且可以与多种数据库进行兼容。使用Mybatis操作数据库可以轻松实现数据的CRUD操作,其常用的返回结果为List<Map>集合。 返回List<Map>集合,意味着我们可以先将数据库查询的结果放入Map,然后将Map装入List,最后返回List集合。这样做有很大的优点,在我们需要查询多个字段时,直接返回List<Map>,可以较为方便的取出需要的字段值,而无需对复杂的实体对象进行处理。 代码示例: ```java public interface UserMapper { List<Map<String, Object>> getUserList(); } ``` ```xml <select id="getUserList" resultType="java.util.Map"> SELECT * FROM user; </select> ``` 以上示例,我们定义了一个返回List<Map>类型的getUserList方法,通过sql语句查询user表,将查询结果以List<Map>的形式返回。 在实际开发,我们可以根据实际需要,通过Map指定的键取出对应的值,如: ```java List<Map<String, Object>> userList = userMapper.getUserList(); for (Map<String, Object> user: userList) { System.out.println("用户名:" + user.get("username") + ",年龄:" + user.get("age")); } ``` 以上示例,我们遍历了返回List<Map>集合,通过get方法,分别取出用户名和年龄的值。 总之,返回List<Map>集合是Mybatis比较常见的结果集类型,它适用于查询多个字段的情况,同时也需要我们自己处理其的数据。 ### 回答2: Mybatis是一种Java持久性框架,它可以将数据库的数据映射到Java对象,使得开发人员可以使用面向对象的思维来进行数据库操作。在Mybatis,我们可以使用SQL语句来进行操作,同时Mybatis还提供了返回结果集的方法,其比较常用的方法是返回List<Map>集合。 List<Map>集合是一种比较灵活的数据结构,它可以存储任意数据类型,并且可以根据键值对来访问其的数据。在Mybatis,我们可以使用以下方法来获取List<Map>集合: 1. 使用<select>标签来定义SQL语句,并且设置resultType为java.util.Map: ``` <select id="getUserList" resultType="java.util.Map"> SELECT * FROM user </select> ``` 2. 在代码使用SqlSession来执行SQL语句,并且调用selectList方法来获取List<Map>集合: ``` SqlSession sqlSession = sqlSessionFactory.openSession(); List<Map<String, Object>> userList = sqlSession.selectList("getUserList"); ``` 在上面的代码,我们使用了openSession方法来创建SqlSession对象,它可以用来执行SQL语句,并且通过调用selectList方法来获取List<Map>集合。 获取到List<Map>集合之后,我们可以使用遍历的方法来访问其的数据。例如: ``` for (Map<String, Object> user : userList) { System.out.println(user.get("id")); System.out.println(user.get("username")); System.out.println(user.get("password")); } ``` 在上面的代码,我们使用了Map的get方法来访问其的数据,并且通过遍历来访问List的所有Map对象。 总的来说,Mybatis返回List<Map>集合是一种比较方便的方式,它可以适用于不同的数据类型,同时也可以根据键值对来访问其的数据。在使用时,我们只需要定义好SQL语句,并且通过SqlSession来执行它,然后就可以获取到List<Map>集合了。 ### 回答3: Mybatis是一款优秀的Java持久层框架,它可以帮助我们快速、方便地操作数据库。在Mybatis,我们可以使用SQL语句直接操作数据库,获取返回结果。其返回的结果可以是实体对象、集合对象等等。对于返回List<Map>集合,我们以下进行简单介绍。 List<Map>集合表示列表存储了一组Map键值对的集合。Mybatis可以通过SQL查询语句,返回这样一个键值对结构的数据集合。 Mybatis返回List<Map>集合的过程如下: 1. 编写SQL查询语句,在XML映射文件或注解方式使用@Select注解等查询方法。 2. 执行查询,获取ResultSet结果集。 3. 遍历结果集的每一行数据,将其封装到Map。 4. 将每个封装好的Map对象添加到List集合。 我们可以使用MybatisResultMap功能来进行List<Map>集合的映射。ResultMapMybatis用于实现查询结果映射的功能,它可以把一行数据映射成Java对象后重新组装成一个结果集合。这样,我们就可以利用ResultMap将查询结果集合映射为List<Map>集合,代码如下: <!-- 定义ResultMap --> <resultMap id="studentResultMap" type="java.util.Map"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="sex" property="sex"/> </resultMap> <!-- 查询SQL语句 --> <select id="getStudents" resultMap="studentResultMap"> SELECT * FROM student </select> 使用上述方法进行查询的结果会被封装为List<Map>集合。其Map对象的键表示字段名称,值表示字段值。这种方式可以帮助我们实现更加灵活的数据操作,满足不同业务需求的数据查询需要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值