在实际应用中,查询SQL语句经常需要多个参数,例如:多条件查询,多个参数传递时,元素的parameterType属性值的类型是什么呢?
在Mybatis中允许Map接口通过键值对传递多个参数。
下面我们看一个例子:假设数据操作接口中有个实现查询姓张年龄是12岁的用户信息。
此时,传递给映射器的是一个Map对象,使用它在SQL中设置对应的参数,对应SQL文件代码如下:
<select id="selectStu" resultType="com.wst.pojo.Stu" parameterType="map">
/*定义sql*/
select * from stu where name like concat('%',#{u_name},'%') and age = #{u_age}
</select>
参数名u_name和u_sex是Map的key
一、编写接口
List<Stu> selectStu(Map<String,Object> param);
二、测试。
//测试
@Test
public void select(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
Map<String, Object> map = new HashMap();
map.put("u_name",'张');
map.put("u_age",12);
List<Stu> stuList=mapper.selectStu(map);
for (Stu stu : stuList) {
System.out.println(stu);
}
//关闭sqlsession
sqlSession.close();
}
注:严格来说,map适用几乎所有场景,但是我们用得不多。原因有两个:
- map是一个键值对应的集合,使用者要通过阅读它的键,才能明了其作用;
- 使用map不能限定其传递的数据类型,因此业务性质不强,可读性差,使用者要读懂代码才能知道需要传递什么参数给它,所以不推荐用这种方式传递多个参数。