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();
}
}