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
相当于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
相关文章推荐
- mybatis select元素的使用以及模糊查询
- MyBatis 模糊查询-拼接SQL语句
- MyBatis中的模糊查询语句
- Mybatis中使用oracle的模糊查询的SQL语句写法
- mybatis 不同数据库的like 模糊查询语句
- Mybatis中使用oracle的模糊查询的SQL语句写法
- Mybatis事务下解决多次select语句查询结果一致的问题+案列(获取全局序列ID)
- mybatis模糊查询语句
- mybatis模糊查询的sql语句
- 学习 SQL 语句 - Select(3): 条件查询与模糊查询
- mybatis使用select语句进行关联查询
- mybatis 中使用模糊查询语句
- Mybatis模糊查询SQL语句
- 学习 SQL 语句 - Select(3): 条件查询与模糊查询
- mybatis 写模糊查询语句的几种方法
- mybatis中模糊查询的sql语句
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库
- MyBatis中模糊查询Like语句使用方式
- mybatis中模糊查询sql语句
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库