多条件查询有好几种方式,这里主要介绍两种
使用@Param来指定
使用HashMap来传参
使用@Param:
接口:
public List<Emp> findEmpByMultiParams(@Param("lastName")String lastName,
@Param("salary") double salary);
mapper文件:
这里要注意,{}中的字符串一定要跟@Param中的字符串一样
<select id="findEmpByMultiParams" resultType="emp" >
<![CDATA[
select * from emp where last_name like #{lastName} and salary < #{salary}
]]>
</select>
test:
public void testMultiParams(){
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.findEmpByMultiParams("%A%", 1200);
System.out.println(list);
}
使用HashMap来传参
接口:
public List<Emp> findEmpByMap(Map<String,Object> map);
mapper文件:
<select id="findEmpByMap" resultType="emp" parameterType="map">
<![CDATA[
select * from ${tb} where last_name like #{lastName} and salary < #{salary}
order by ${sal} ${desc}
]]>
</select>
test:
map中的key必须等于{}里面的字符串
public void testMap(){
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("lastName", "%A%");
map.put("salary", 1200);
map.put("tb", "emp");
map.put("sal", "salary");
map.put("desc", "desc");
List<Emp> list = mapper.findEmpByMap(map);
System.out.println(list);
}
使用多参数的时候,mybatis会自动将多参数封装成HashMap,{}中写入key就可以获取对应的值,如果key没有指定的话,就是按照顺序的param1,param2一直排序。但由于我们需要做到见名知意,所以大可先将值按照相应的名字封装到HashMap中,然后再以参数形式传入。