您的位置:首页 > 其它

mybatis中select语句的模糊查询--${}与#{}

2017-11-09 23:09 381 查看
${}:

相当于statement,直接拼sql语句

如果parameterType是基本数据类型和String,是不会将{}里面的字符串当做parameterType的属性来解析,如果parameterType是HashMap或者自定义类型,就会将{}里面的字符串当成parameterType的属性来解析

#{}:

相当于preparestatement,相当于占位符?

只要{}里面的字符串不是value,就会当做parameterType的属性来解析

以下将列举例子说明:

接口:

public List<Emp> findEmpsByLikeName(String lastName);
${}的mapper

注意,如果写成'%${lastName}%',那么就会在String类中找lastName属性,这是错误的。因此要注意是否需要写成value,避免当成属性来解析

<select id="findEmpsByLikeName" parameterType="string" resultType="emp">
select * from emp where last_name like '%${value}%'
</select>

对应的test:
public void testLike(){
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.findEmpsByLikeName("A");
System.out.println(list);
}

发出的sql语句:
Preparing: select * from emp where last_name like '%A%'

#{}的mapper

<select id="findEmpsByLikeName" parameterType="string" resultType="emp">
select * from emp where last_name like #{value}
</select>

对应的test:
public void testLike(){
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.findEmpsByLikeName("%A%");
System.out.println(list);
}

发出的sql语句:
Preparing: select * from emp where last_name like ?


混合使用:

接口:

注意,参数为什么是map请参考mybatis的多参数查询

public List<Emp> findEmpByMap(Map<String,Object> map);

mapper(由于有<。在xml中就是标签开始的标志,所以需要强制不解析sql语句中的<):
<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

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);
}

发出的sql语句:
Preparing: select * from emp where last_name like ? and salary < ? order by salary desc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: