MyBatis
查询多条数据
查询返回数据为多条实体javabean
若查询出的数据有多条:
- 可以通过实体类类型的
List
集合接收【就是泛型是JavaBean
】 - 可以通过
Map
类型的List
集合接收【就是泛型是Map
集合】在select
的resultType
或resultMap
要传入别名为map
【用于json
数据传输】 - 可以在
Mapper
接口的方法添加上@MapKey
注解,此时就可以将每条数据转换的Map
集合作为值,以某个字段的值作为键,放在同一个Map
集合中
注意是:一定不能通过实体类对象接收,此时会抛出异常TooManyResultException
mapper
接口
/**
* 查询多条数据的三种情况
*/
// 通过List集合接收
List<User> getMoreUserByList();
// 通过Map类型的List集合
List<Map<String,Object>> getMoreyUserByMap();
// 以某个字段为主键,javabean为值
@MapKey("id")
Map<Integer,Object> getUserByMapAndId();
Mapper.xml
文件
<!--
查询返回多个实体
// 通过List集合接收
List<User> getMoreUserByList();
// 通过Map类型的List集合
List<Map<String,Object>> getMoreyUserByMap();
// 以某个字段为主键,javabean为值
@MapKey("id")
Map<Integer,Object> getUserByMapAndId();
-->
<select id="getMoreUserByList" resultType="User">
select * from t_user;
</select>
<select id="getMoreyUserByMap" resultType="map">
select * from t_user;
</select>
<select id="getUserByMapAndId" resultType="map">
select * from t_user;
</select>
test
类
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
QueryEntity mapper = sqlSession.getMapper(QueryEntity.class);
// 返回多个实体
@Test
public void testMoreEntity(){
// 通过List集合接收
List<User> list = mapper.getMoreUserByList();
list.forEach(user -> System.out.println(user));
// 通过Map类型的List集合[泛型是Map集合,注意是在select中resultType传入别名是map]
List<Map<String, Object>> maps = mapper.getMoreyUserByMap();
maps.forEach(map -> System.out.println(map));
// 以某个字段为主键,javabean为值[注意是在select中resultType传入别名是map]
Map<Integer, Object> mapAndId = mapper.getUserByMapAndId();
System.out.println(mapAndId);
}