MyBatis(五)Map作为parameterType和resultType
sql语句中的ParameterType和resultType可以为:简单数据类型(八种基本数据类型及其包装类,String),也可以为实体类,还可以为集合。
这篇文章就介绍如何使用Map集合给sql语句传值,以及如何使用Map集合封装查询的结果。
为什么会有这种需求呢?有时候JavaBean中的属性已经不能满足我们的结果,如跨表查询时,就不能简单的使用JavaBean来封装结果。
1.使用Map集合给sql语句传值
这个很简单,只要记住一点:Map集合给sql语句传值,参数为:#{Map集合的key}。
简单示例:
<!-- parameterType可以简单的写map或者是Map-->
<select id="selectById2" parameterType="map" resultType="products">
select * from products where pid = #{pid};
</select>
ProductsMapper mapper = session.getMapper(ProductsMapper.class);
Map<String,Integer> map = new HashMap<>();
//key为pid,那么在xml中的参数就应该为#{pid}
map.put("pid",2);
Products product = mapper.selectById2(map);
System.out.println(product);
结果:
Products{pid=2, pname='新疆大枣', price=38.0, pdate=null, cid='s002'}
2.使用Map集合封装结果
也需要注意一点:从数据库中查询出来的字段,与map集合中的key对应。
简单示例:
<select id="selectById3" parameterType="int" resultType="map">
select * from products where pid = #{pid};
</select>
ProductsMapper mapper = session.getMapper(ProductsMapper.class);
Map map = mapper.selectById3(2);
Object pname = map.get("pname");
System.out.println(pname);
Set set = map.entrySet();
for (Object o : set) {
System.out.println(o);
}
结果:
新疆大枣
pname=新疆大枣
price=38.0
pid=2
cid=s002