前言
在之前的学习中,使用到了将查询结果封装到bean对象内,使用到了将查询结果封装的bean对象封装到List集合中,但是如果我们没有对应的bean对象,我们应该将结果封装到哪呢?今天这篇文章就记录一下几种常见查询结果的封装。
准备工作,用到的数据库表
返回bean对象
实战
接口中代码
/***
* 数据库表中字段能与实体类一一对应,就将查询结果封装到实体类
* @return
*/
Car selectToBean(Long id);
sql语句映射文件中代码
<select id="selectToBean" resultType="Car">
select
id,
car_num as carNum,
brand as Brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType
from t_car where id = #{id}
</select>
测试代码
@Test
public void testSelectToBean(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
Car car = mapper.selectToBean(59L);
System.out.println(car);
sqlSession.close();
}
执行结果
再将每条记录装到LIst集合就不再展示了。
返回Map
实战
接口中代码
/***
* 数据库表中字段能与实体类属性不能一一对应,可以将查询结果封装到Map集合
* 字段名为key,每个字段值为value
* @return
*/
Map<String,Object> selectToMap(Long id);
sql语句映射文件中代码
<select id="selectToMap" resultType="map">
select *
from t_car where id = #{id}
</select>
小细节:这里的sql语句不用起别名,下面的查询结果可以看出Map中的key值直接就是数据库表中的字段名
测试代码
@Test
public void testSelectToMap(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
Map<String,Object> car = mapper.selectToMap(60L);
System.out.println(car);
sqlSession.close();
}
执行结果
返回List< Map >
如果我们的查询结果不是一条,我们也可以将每一个Map都装到List集合中
实战
接口中代码
/***
* 查询所有结果将每条记录保存到map中
* 再将所有map装到list中
* @return
*/
List<Map> selectAllToMap();
sql语句映射文件中代码
<select id="selectAllToMap" resultType="map">
select * from t_car
</select>
测试代码
@Test
public void testSelectAllToMap(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
List<Map> cars = mapper.selectAllToMap();
cars.forEach(car -> System.out.println(car));
sqlSession.close();
}
执行结果
返回Map<String,Map>
为了更加方便我们取出每一个map我们可以用每条记录的id作为大Map的key值,这样我们就可以很方便地取出每条记录
但是我们如何将id作为map地key值呢?
可以使用 @MapKey 这一注解式开发来指定具体步骤见下
实战
接口代码
/***
*将每一条查询结果存入map,随后将每一个map存入一个大map,
* 并且大map的key对应数据库表中的主键
* @return
*/
@MapKey("id")
Map<Long,Map<String,Object>> selectAllToBigMap();
sql语句映射文件中代码
<select id="selectAllToBigMap" resultType="map">
select * from t_car
</select>
测试代码
@Test
public void testSelectAllToBigMap(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
Map<Long,Map<String,Object>> cars = mapper.selectAllToBigMap();
cars.forEach((id,car)->System.out.println("车id:"+ id + " 汽车信息" + car));
sqlSession.close();
}
测试结果
可以看出可以成功地将车地id取出来
end…